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