一天,有个客户跟我电话,他在用STMCU开发车载产品,STM32和STM8都有用。STM32芯片用在他的多路控制板上,STM8S105用在另外显示面板上。多路控制板上的STM32与显示板上的STM8S105进行UART通讯,电源由从多路控制板这边送过去,两块板之间用了根近2米的普通信号连接线作供电和UART信号传送。STM8S105 的供电电压为5V。
客户反映他的产品已经生产1000多套,小批量送样出去。他的客户反映产品的STM8S105很容易受干扰而程序丢失。他拿到退货后如果重新烧录又能正常工作。
因其进度紧,相约于一晚上见面继续了解情况,探讨问题原因。
见面后他进一步反映,每次STM8S105头次烧录后能正常工作,如果无外来干扰,也能保持正常状态。但如果STM8s105这端的显示板受到外来干扰,比方电源波动[其实不一定限于电源波动,只是找了这么个简单而有效的比较粗暴的办法,他们用手指在多路控制板端的电源供电线路的器件上一派乱摸,导致给显示板的供电异常波动]后,STM8S105工作异常属实。断电后再上电也不能恢复正常,即使多次掉电上电也无济于事。的确很有点像程序丢失的味道。
连上STLINK,打开STVP查看程序[客户之前没有做读保护],读出后进一步跟原始烧录文件比对,一模一样。说明程序并未丢失。既然程序没有丢,而STM8S105显示板受干扰导致功能异常后即使断电再上电都没法回归正常。难道芯片在电源波动干扰时坏了?
检测STM8S105的VCAP脚电源,1.8v,内核供电稳稳的。其复位电路为10K配104电容,参数没什么异常。测试RST复位脚电平,结果是2.5v,显然不正常,正常应该是5v。因为他说产品都测试过了,小批量出货。首先比较怀疑电源剧烈波动时个别器件或STM8s105出了故障,还有那根近两米的电源传输缆线让电源波动时的情况变得更为复杂。
当晚作罢,建议其第二天做电源线路的自行检查,外围器件和STM8S105芯片的更换比对测试。
第二天上午客户反馈,他把所谓的坏板的复位电路处的那个外接电阻从10K更换为110欧就正常工作了。听后一惊,觉得没道理。但人家说行,就只好先建议他多测试下,然后自己心里继续思考到底怎么回事。
到了下午客户反馈回来,说按上午的接法是比之前稳定多了,当用手摸供电模块时还是会出状况。要命的是,当他在110欧的条件下更换MCU芯片做烧录时几乎没**常烧录。这是跟之前接10K时是不一样的新状况。说明他随手更换为110欧并不靠谱,也没理论支撑。当时他更换后感觉好些了,并非真的稳定好了。
记得前一天晚上我随便扫了几眼他的源代码,不复杂。他使用外部晶体做时钟源,UART通信和部分GPIO及显示控制。不过,经过近2天我对该客户的接触,感觉他因为太忙对整个开发没花什么心思,代码是基于ST库代码修改而来,基本没时间做太多研究。
鉴于此,想到他使用外部时钟,需要他做代码配置。突然怀疑会不会是他的时钟配置出了问题,而且如果时钟配置出了问题,比如超频了,那上面的那些奇怪现象就不难理解了。想到这里,我电话他屏蔽跟HSE时钟配置有关的所有代码,使用系统默认HSI做主时钟。
功夫不负有心人,还真是他在利用HSE进行时钟配置的地方出了问题。改用HSI后,复位线路回归正常接法。他们继续用手去触摸电源供电线路的器件会让STM8S105产生复位,但复位后能回归正常运行状态。不像之前受干扰后就回不去了。之前被怀疑因为电源异常波动可能致损的芯片都能正常工作了。
看到这里会有人好奇,他为什么会想到把那个RC中的电阻改为110呢?这点出乎我意料,呵呵。因为头天晚上我测试异常板的复位脚电平时发现电平才2.5V,不正常。没想到他第二天为了想把RST脚电平凑到接近VDD,他就不停减小电阻直到复位脚电平接近5V。当然凑巧的时是,此时功能还真有改善,这更加让他自信这个动作的合理性了。
当然还有个原因,后来他告诉这个问题也拖了几个月了一直没找到原因,病急乱投医也可以理解。这种情况在产品开发过程中也较普遍,在时间进度紧急时先应付了再说。
这里或许有人觉得疑惑,既然他MCU内部时钟配置错误了,为什么第一次烧录后能妥妥地的工作,还可以给客户送样,直到受到外在干扰时才出现异常呢?第一次烧录后的代码和受干扰再次上电的代码并无差别。这点我也迷惑不解,有知道的欢迎留言交流。
但可以肯定的是,他的超频时钟问题代码总归是让芯片工作在技术手册参数约定之外的不可靠无保障的状态。即使某种条件下的正常运行也不能视为真正的正常状态,就像个醉汉个别的正确言行并不代表他的言行可靠一样,因为本身就是出于一种不靠谱状态。
应该说事情并不复杂,但往往由于客户在出现状况时不够冷静淡定去找原因,往往急于片面下结论而使得自己的项目进展缓慢;或者无意地把误判信息再传达给别人而让事情复杂化或玄奥化,类似情况可谓不胜枚举。 |