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