你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32上下电 内部flash 被改写?

[复制链接]
zyzyyyyy 提问时间:2022-10-18 14:42 / 未解决
近期,合作厂家开发了1款产品,基于STM32F405系列一个64pin MCU,在使用过程中,整机掉电更换另一个部件,再上电后发现这个产品不工作了。发回厂家发现STM32内部flash数据被改写了,前几行被改成了0,导致程序无法正常启动。

在厂家实验室,我们协助定位问题,反复多次上下电模拟现场场景,有概率在多个实验样品上复现了故障,平均上下电20~30次能出一次。也是内部flash被改写,被改写的位置不固定,但全是前几行,有的是1行,有的是12行,有的是123行,被改的地方全变成0。

FLASH数据修改前后

FLASH数据修改前后

图一 被改写的flash数据前后对比

继续实验,厂家的MCU系统设计上,VDD和VDDA采用的两个不同的电源供电,我们抓取了这两个电源的下电波形,发现两个电源掉电时间和速度不一致,VDDA先掉电,VDD后掉电,且由于VDD采用的是开关电源,输出电容比较大,掉电速度也很慢。

VDD与VDDA

VDD与VDDA

图二 VDDA(黄)与VDD(蓝)下电波形

继续测试,抓取MCU的电源和NRST复位信号,可以看到复位信号在掉电时有一个异常的解复位脉冲。

VDDA与RST

VDDA与RST

图三 VDDA(黄)与NRST(蓝)下电波形

VDD与RST

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加200欧电阻后与RST波形

图五 修改后的复位(黄)与VDD(蓝)波形

把修改后的产品再次做反复上下点的测试,通过自动化测试挂测了一晚上,没有在复现问题。

至此,通过实验现象来看,问题根因应该就在电源和NRST复位管脚,优化后能够解决问题。

但是我们仍有一个怀疑点没有解开:
通过查看MCU手册,我们看到这样的描述:

手册

手册

图六 STM32参考手册相关描述

同厂家软件开发人员咨询,他们在程序中没有做任何操作内部flash的动作,尤其是写操作和擦除操作。并且我们要求他们在工程中全局搜索了 写flash和擦flash的库函数关键字,也确实没有调用。那么这个改写动作是怎么完成的呢?(后来我们又做了加上写保护的动作,发现还是会出同样的问题),或者在这个电源不稳状态下,MCU被解复位初始化,程序从flash启动的动作被打断也能轻易改写内部数据吗?发生问题的机理又是什么呢?

虽然最终问题现象指向的大概率是硬件设计上的问题,由于以上问题我们没有办法理论解释,导致公司的专家甚至怀疑这颗MCU作为工业应用的可靠性,需要我们继续找出根因。  

或者我们问题原因还有别的方向?

由于个人对这颗芯片的了解有限,跪求论坛各位大神指点,欢迎留言交流哦~

个人邮箱zhiyu_nice@outlook.com
再次感谢~


11.png
13.png
12.png
16.png
14.png
15.png
收藏 评论5 发布时间:2022-10-18 14:42

举报

5个回答
1+1=2 回答时间:2022-10-19 07:49:24
是哪一部分被改了?你上电的时候有没有写的函数?
zyzyyyyy 回答时间:2022-10-19 09:51:45
1+1=2 发表于 2022-10-19 07:49
是哪一部分被改了?你上电的时候有没有写的函数?

哈喽你好,我昨天写的帖子由于字数问题正文没有显示,现在我刷新了正文,具体改动点和现象我描述在正文了,欢迎交流~
butterflyspring 回答时间:2022-10-19 11:01:29
楼主观察和分析的很仔细,从初始的程序内容变化到上下电的关键信号检测,发现了异常的方向,像您学**。
从信号上看,引起了复位的异常。 通常上下电复位异常会引起很多故障,曾经有一次听朋友说过会改写内容。从厂家的手册上看,的确说明了VDDA的电压与VDD压差是有限的,毕竟给同一芯片内不同电路供电。所以还是建议楼主修改一下硬件,使得上电和下电时电压尽量一致。
附图厂家说明的部分。




butterflyspring 回答时间:2022-10-19 11:02:01
楼主观察和分析的很仔细,从初始的程序内容变化到上下电的关键信号检测,发现了异常的方向,像您学**。
从信号上看,引起了复位的异常。 通常上下电复位异常会引起很多故障,曾经有一次听朋友说过会改写内容。从厂家的手册上看,的确说明了VDDA的电压与VDD压差是有限的,毕竟给同一芯片内不同电路供电。所以还是建议楼主修改一下硬件,使得上电和下电时电压尽量一致。
附图厂家说明的部分。


STM32F4 VDDA&VDD 2.png STM32F4 VDDA&VDD 1.png

zyzyyyyy 回答时间:2022-10-19 14:57:09
butterflyspring 发表于 2022-10-19 11:02
楼主观察和分析的很仔细,从初始的程序内容变化到上下电的关键信号检测,发现了异常的方向,像您学**。
从 ...

非常感谢您的建议,这块电源设计确实是存在不足,使用两个不同的电源供电,疏忽了对上下电过程的要求,后续厂家会针对这项优化设计,非常感谢!我们还是想继续探寻在这种异常场景下,Flash数据被改写的具体原因,比如内部总线在什么样的状态下会把读动作变成异常的写动作。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版