最近发现公司生产部一批某型号产品经过高温老化后,很多机子都出现问题,某项功能有时能工作,有时不能工作,导致这批机子只能暂停生产。问题是由机子里一块当数据中继的电路板引起的,这块板子负责收集各个模块采集的数据,然后通过SPI发给主机。出现问题的时候,各个模块的数据无法送达主机。
由于最近由我来维护同一系列的机型,于是就被派去调查和跟进。在生产部拿了一台问题表现最严重的机子,出问题的电路板一直无法工作,板子用的MCU是NXP的LPC2364,用示波器测量,IO口没有了正常的输出,外部复位也无效,而晶振起振正常。因为程序以前使用很正常,初步排除了程序问题。难道是芯片坏了?
进一步检查,发现整机刚开始上电的几秒内,那片MCU是可以工作的,然后就没有任何输出了。试了外部复位,也没有任何作用。以往生产部门遇到这种情况的时候就直接更换芯片,就可以用了,但是出现这个问题的概率是比较小的。现在90%的机子都出现问题,难道NXP的某一批次的片子出现问题?这样的怀疑也站不住脚,人家NXP不可能把不合格的芯片卖给客户,否则不是那石头砸自己的脚吗?
一切还是得从硬件的角度出发,根据自己玩FPGA的经验,整个芯片的都停止工作,很可能是时钟模块出现问题,比如内部时钟太快就会导致时序紊乱,从而导致内部逻辑的错乱,这时候如果复位信号也是同步复位的话,恐怕连外部复位也无效了。
由于程序是别人写的,MCU主频确实是有一点超频了。外部晶振是18.432MHz,内部PLL经过了16倍频,然后4分频,得到73.728MHz的CPU主频,确实比芯片手册上标的72MHz的主频上限要高1.728MHz。我们可不能小看超出的这一点频率,如果NXP公司把72MHz当做是规定工作温度范围内的最高频率Fmax,那么在72MHz之内系统能达到时序要求,超出之后就不一定达到时序要求了,在这种情况下工作是很危险的。这个跟我们在设计FPGA的时候就要保留一定的时序余量是一样的道理的。
抱着这样的假设,我把PLL调整为18倍频,5分频,得到66.3552MHz主频,不影响程序的其他功能。重新烧写之后,果不其然,板子可以正常工作了。拿到老化箱做45°C的老化之后仍然正常工作。这就验证了之前的假设,超频导致MCU工作不稳定甚至死机。
经过这一次的DEBUG之后,要在这方面多加注意了。产品要稳定,超频需谨慎啊!
用户1543914 2014-2-14 13:59