解決多次插拔后 USB 無(wú)法再工作的問(wèn)題
客戶使用的MCU 是STM32F446,反饋在做壓力測(cè)試時(shí)發(fā)現(xiàn)多次插拔后,產(chǎn)品意外無(wú)法再工作。分析了幾天仍然無(wú)進(jìn)展,只有MCU 復(fù)位后才能恢復(fù)正常。
1 問(wèn)題描述
客戶使用的 MCU 是 STM32F446,反饋在做壓力測(cè)試時(shí)發(fā)現(xiàn)多次插拔后,產(chǎn)品意外無(wú)法再工作。分析了幾天仍然無(wú)進(jìn)展,只有 MCU 復(fù)位后才能恢復(fù)正常。
2 問(wèn)題分析
由于此問(wèn)題以屬于偶發(fā)現(xiàn)象,一時(shí)半刻無(wú)法重現(xiàn)。首先能想到的是可能客戶使用到了動(dòng)態(tài)內(nèi)存。通過(guò)與客戶溝通,發(fā)現(xiàn)客戶在一個(gè)比較老的 HAL 庫(kù)版本上的基礎(chǔ)上進(jìn)行了改造,將原來(lái)的動(dòng)態(tài)內(nèi)存方式改成了靜態(tài)內(nèi)存,因此,不應(yīng)該是內(nèi)存分析失敗導(dǎo)致。
好在之前客戶有通過(guò) USB 分析儀采集通信過(guò)程,如下圖所示:
從上圖可以看出,當(dāng)出現(xiàn)問(wèn)題時(shí),有一堆異常數(shù)據(jù),顯示為 1044 個(gè)字節(jié),展開(kāi)內(nèi)容卻發(fā)現(xiàn)大部分字節(jié)值為 0Xff,如下圖所示:
這部分?jǐn)?shù)據(jù)沒(méi)有合法格式,姑且認(rèn)為是 USB 總線上的干擾數(shù)據(jù),由插拔操作導(dǎo)致。接下來(lái)要客戶嘗試在調(diào)試模式下重現(xiàn)問(wèn)題,然后再截取異常出現(xiàn)時(shí) USB 各寄存器的值,檢查是否有異常。
更多內(nèi)容請(qǐng)下載閱讀。
評(píng)論