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