
近期,合作厂家开发了1款产品,基于STM32F405系列一个64pin MCU,在使用过程中,整机掉电更换另一个部件,再上电后发现这个产品不工作了。发回厂家发现STM32内部flash数据被改写了,前几行被改成了0,导致程序无法正常启动。 在厂家实验室,我们协助定位问题,反复多次上下电模拟现场场景,有概率在多个实验样品上复现了故障,平均上下电20~30次能出一次。也是内部flash被改写,被改写的位置不固定,但全是前几行,有的是1行,有的是12行,有的是123行,被改的地方全变成0。 FLASH数据修改前后 ![]() 图一 被改写的flash数据前后对比 继续实验,厂家的MCU系统设计上,VDD和VDDA采用的两个不同的电源供电,我们抓取了这两个电源的下电波形,发现两个电源掉电时间和速度不一致,VDDA先掉电,VDD后掉电,且由于VDD采用的是开关电源,输出电容比较大,掉电速度也很慢。 VDD与VDDA ![]() 图二 VDDA(黄)与VDD(蓝)下电波形 继续测试,抓取MCU的电源和NRST复位信号,可以看到复位信号在掉电时有一个异常的解复位脉冲。 VDDA与RST ![]() 图三 VDDA(黄)与NRST(蓝)下电波形 VDD与RST ![]() 图四 VDD(蓝)与NRST(黄)下电波形 我们分析:第一次NRST的下降沿,为MCU内部PVD(可编程电压检测),这个模块监控VDD/VDDA的电压状态,当VDDA掉到程序设置的1.8V时,MCU主动拉低了NRST管脚4ms左右,(厂家在NRST管脚外部设计了一个10k的上拉到VDD的电阻和一个100nF到地的去抖电容),4ms后,NRST释放,外部RC通过未掉电完全的VDD充电,于是有了异常的上升沿,造成MCU被解复位。随着VDD持续掉电,到达MCU 的PDR(掉电复位)门限后,MCU再次主动拉低NRST管教,此时主动拉低持续了70ms左右,之后VDD掉电至500mV左右,NRST管脚再次释放充电,后随着VDD降为0。 通过以上现象,我们怀疑,在掉电过程中,MCU在电源不稳的条件下解复位了一次,可能出现工作异常导致flash被改写。 于是我们在VDD电源输出端加上一个200欧姆的泄放电阻,在掉电时能够提供一个输出电容的快速放电回路,我们再此抓取掉电波形,发现复位管脚的异常脉冲已经被大幅削弱,达不到解复位条件。 VDD加200欧电阻后与RST波形 ![]() 图五 修改后的复位(黄)与VDD(蓝)波形 把修改后的产品再次做反复上下点的测试,通过自动化测试挂测了一晚上,没有在复现问题。 至此,通过实验现象来看,问题根因应该就在电源和NRST复位管脚,优化后能够解决问题。 但是我们仍有一个怀疑点没有解开: 通过查看MCU手册,我们看到这样的描述: 手册 ![]() 图六 STM32参考手册相关描述 同厂家软件开发人员咨询,他们在程序中没有做任何操作内部flash的动作,尤其是写操作和擦除操作。并且我们要求他们在工程中全局搜索了 写flash和擦flash的库函数关键字,也确实没有调用。那么这个改写动作是怎么完成的呢?(后来我们又做了加上写保护的动作,发现还是会出同样的问题),或者在这个电源不稳状态下,MCU被解复位初始化,程序从flash启动的动作被打断也能轻易改写内部数据吗?发生问题的机理又是什么呢? 虽然最终问题现象指向的大概率是硬件设计上的问题,由于以上问题我们没有办法理论解释,导致公司的专家甚至怀疑这颗MCU作为工业应用的可靠性,需要我们继续找出根因。 或者我们问题原因还有别的方向? 由于个人对这颗芯片的了解有限,跪求论坛各位大神指点,欢迎留言交流哦~ 个人邮箱zhiyu_nice@outlook.com 再次感谢~ |
STM32 F407骄阳电机版用DMA双缓存接收串口数据时,上电第一次接收区是memory1而不是memory0?
STM32F407骄阳版用DMA双缓存区接收串口数据,上电第一次接收到的数据在memory1而不是memory0
stm32f407无法配置定时器2为全部dma
FreeRTOS问题求解
使用stm32F407连接PHY芯片进行以太网通讯,一插网线就会进入错误中断。
ST的IMU和地磁计用motionfx库融合后航向角异常的问题
CUEBIDE生成的APP程序,在写入FLASH之后无法正常跳转。
有关Cubeide IAP 问题
stm32驱动st7735屏幕区分地图上的障碍物.
stm32cubumx使用1.28.0固件包无法初始化fsmc
哈喽你好,我昨天写的帖子由于字数问题正文没有显示,现在我刷新了正文,具体改动点和现象我描述在正文了,欢迎交流~
从信号上看,引起了复位的异常。 通常上下电复位异常会引起很多故障,曾经有一次听朋友说过会改写内容。从厂家的手册上看,的确说明了VDDA的电压与VDD压差是有限的,毕竟给同一芯片内不同电路供电。所以还是建议楼主修改一下硬件,使得上电和下电时电压尽量一致。
附图厂家说明的部分。
从信号上看,引起了复位的异常。 通常上下电复位异常会引起很多故障,曾经有一次听朋友说过会改写内容。从厂家的手册上看,的确说明了VDDA的电压与VDD压差是有限的,毕竟给同一芯片内不同电路供电。所以还是建议楼主修改一下硬件,使得上电和下电时电压尽量一致。
附图厂家说明的部分。
非常感谢您的建议,这块电源设计确实是存在不足,使用两个不同的电源供电,疏忽了对上下电过程的要求,后续厂家会针对这项优化设计,非常感谢!我们还是想继续探寻在这种异常场景下,Flash数据被改写的具体原因,比如内部总线在什么样的状态下会把读动作变成异常的写动作。