航順芯片HK32F103xC/D/E USB枚舉情況分析(二)
HK32F103x/C/D/E是航順推出的中大容量的32位MCU芯片,內(nèi)部集成豐富且強(qiáng)大的外設(shè),如SPI/IIC/UART/USB/FSMC/SDIO等。有客戶在快速替換使用過(guò)程中,遇到過(guò)使用HAL庫(kù)的USB枚舉失敗的情況:VID/PID值等設(shè)備描述符內(nèi)容不正確。使用bus hound捕獲USB包,觀察設(shè)備描述符內(nèi)容,如下紅色箭頭所指IN包數(shù)據(jù)部分,大多數(shù)時(shí)候是不對(duì)的,即不是預(yù)期值,偶發(fā)是對(duì)的。
通過(guò)分析客戶代碼,且使用邏輯分析儀+DSview跟蹤USB通信數(shù)據(jù),發(fā)現(xiàn)是在枚舉過(guò)程中,第三次獲取設(shè)備描述符的時(shí)候出錯(cuò),如下:
進(jìn)一步分析發(fā)現(xiàn)并確認(rèn)(根本原因):
USB設(shè)備在收到STALL之后的下一條SETUP的情況下,硬件會(huì)設(shè)置Tx狀態(tài)為Valid,這導(dǎo)致接下來(lái)IN包來(lái)了之后,USB直接就把還未準(zhǔn)備好的數(shù)據(jù)發(fā)送給主機(jī),即發(fā)送的數(shù)據(jù)不是預(yù)設(shè)值/亂碼,例如一部分為本次要發(fā)送的數(shù)據(jù),另外一部分為上一次的數(shù)據(jù)。
解決方案:
屏蔽掉軟件設(shè)置STALL的代碼,例如在HAL庫(kù)的HID類,屏蔽下圖處。
如需要了解更多航順MCU產(chǎn)品,請(qǐng)聯(lián)系航順核心代理商,穎特新科技,或者掃碼聯(lián)系我們!
在之前的介紹中,我們也為大家介紹了《采用航順芯片HK32F030R8開(kāi)發(fā)的離線串行Flash燒錄器》,也是目前我們主推的非常成熟的解決方案!
編輯:zzy 最后修改時(shí)間:2022-07-05