|
前段时间有个模块在客户现场出现偶发性问题,后面研发搭建环境进行了复现和分析测试,整个过程可谓是跌宕起伏,让我刻骨铭心......
下面就是整个过程,与大家分享一下,即使未从事相关行业的读者也可以阅读,咱们只取方法,希望可以让大家在解决Bug的道路上尽量少走弯路,一步到位! 使用PLC主机扫描模块时,会偶现扫描失败,主机软件会报错; 偶发性Bug,需要反复测试才有可能会出现一次。 使用主机软件+主机+多个模块进行测试,并使用wireshark工具进行抓包分析; 复现后,进行抓包分析,发现异常的模块会上报一个EtherCAT协议栈的中止码Abort code,为0x06020000。 经过往下层的逐层分析后,判断是从站模块出问题了。 继续分析: 通过数据分析后,判断是SPI通信的读写数据出问题了。 将SPI读写接口由寄存器操作改为HAL库函数操作,也会出现异常; 难道是SPI速率太快了? 将SPI速率由当前的10MHz改成5MHz进行测试: 从下午1:30测试到5:00,未复现异常。 然后就是上示波器进行波形测试和分析:
使用示波器测试了10MHz速率和5MHz速率时,SPI的CLK时钟波形图如下: ESC芯片和MCU的SPI通信的通信速率10MHz偏高,造成偶发性的数据接收错误;将通信速率改成5MHz后复测,未出现异常。
但是之前设计时我们是需要支持10MHz的,但为什么现在出现问题呢? 后面硬件工程师参与分析,发现滤波电容是在升级到版本的时候修改的,但BOM漏修改了!!!! 导致SPI波形出异常了! 至此,偶现Bug解决,一波三折,也得到了一些新的想法: 1、嵌入式软件是离不开硬件的软件,所以以后咱还是得多学硬件知识,才能在解决Bug的漫长道路上少走弯路,提高效率; 2、产品的任何问题,即使是偶发性或者出现概率低的Bug,咱也不能忽视,曾经有位前辈说过:随着产品生产量的增多,出现一次的Bug,以后肯定还会出现,我们必须严肃对待所有Bug!
3、对于偶发性Bug,起初无法定位为软件问题还是硬件问题或其他问题的时候,可以先尽量从软件层面去做减法,排除能想到的所有可能性,逐层深入,也许就会柳暗花明! |