解决多次插拔后 USB 无法再工作的问题
客户使用的MCU 是STM32F446,反馈在做压力测试时发现多次插拔后,产品意外无法再工作。分析了几天仍然无进展,只有MCU 复位后才能恢复正常。
1 问题描述
客户使用的 MCU 是 STM32F446,反馈在做压力测试时发现多次插拔后,产品意外无法再工作。分析了几天仍然无进展,只有 MCU 复位后才能恢复正常。
2 问题分析
由于此问题以属于偶发现象,一时半刻无法重现。首先能想到的是可能客户使用到了动态内存。通过与客户沟通,发现客户在一个比较老的 HAL 库版本上的基础上进行了改造,将原来的动态内存方式改成了静态内存,因此,不应该是内存分析失败导致。
好在之前客户有通过 USB 分析仪采集通信过程,如下图所示:
从上图可以看出,当出现问题时,有一堆异常数据,显示为 1044 个字节,展开内容却发现大部分字节值为 0Xff,如下图所示:
这部分数据没有合法格式,姑且认为是 USB 总线上的干扰数据,由插拔操作导致。接下来要客户尝试在调试模式下重现问题,然后再截取异常出现时 USB 各寄存器的值,检查是否有异常。
更多内容请下载阅读。
评论