打印
[信息]

【实战经验】干扰环境下 Flash 数据丢失

[复制链接]
5862|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 香水城 于 2017-8-17 13:46 编辑

干扰环境下 Flash 数据丢失
问题:
该问题由某客户提出,发生在 STM32F103VBT6 器件上。据其工程师讲述:其产品中使用了 STM32,已批量生产。其部分产品在交予客户使用一段时间之后出现故障。其工程师在对故障产品进行分析时发现,STM32 的 Flash 中部分数据丢失,原数据皆被0xFF 取代。丢失数据的 Flash 区间的地址不固定,大小也不固定,呈一定随机性。该现象只在车载环境下发生,而在实验室无法复现。

调研:
检查硬件设计,核对 VDD、VDDA、VBAT、Vref+、Vref-、VSS、VSSA、NRST、BOOT0、BOOT1等管脚的周边电路设计,未见异常。检查软件设计,发现其中有对 Flash 进行擦除和写入的操作,分别如表(二)及表(一)所示:


修改这两个函数,对函数体内的代码只保留其中的行(1)、行(2)、行(3),其余全部删除。重新编译后更新到之前出现问题的若干产品中,然后将这些产品安装到原来的工作环境中长期测试,结果显示更新软件后的产品不再出现 Flash 中数据丢失的现象。

结论:
干扰造成STM32中的程序跑飞,从而错误的执行了对Flash进行擦除或写入操作的代码,最终导致 Flash 中的内容丢失。

处理:
软件中要保证对 Flash 擦除或写入的操作的可控性,要有严格的逻辑验证,否则最好不要在软件加入这样代码。

建议:
什么是可控性?如何做到严格的逻辑验证?在这个问题上不妨借鉴一下成功的案例:美国导弹核潜艇上对导弹发射按钮的管理。核武器的威力是强大的,发射按钮的管理权掌握在单个人的手里是可怕的。为了避免如此危险的武器被滥用,在导弹核潜艇上,导弹的发射按钮是由三个人共同管理的。艇长、副艇长各有一把钥匙,武控官掌握着口令。发射导弹时,必须由武控官输入口令,然后艇长、副艇长同时用各自的钥匙操纵各自的按钮,导弹才得以发射。考虑特殊的情况,如果某个人通过特别的手段同时掌握了两把钥匙和口令,能否发射导弹?答案是不能。因为艇长、副艇长和武控官各自的作业位置相距很远,而且有时间限制,一个人是无法完成这三项作业的。如果艇长、副艇长和武控官合谋叛乱又如何呢?还是发射不了导弹。因为发射导弹的另一半口令和导弹的瞄准参数根本不在潜艇上,只有在下达核攻击命令时才通过密文发给潜艇。甚至,在导弹发射之后,艇上人员也无从知到它将飞往何处,也控制不了。这样,强大的武器最终掌握在中央指挥机关的手里。回到 STM32 的问题,如表(一)、表(二)所示的函数,谈不上逻辑验证,一旦被调用会好不犹豫的执行下去,而不在乎调用是合法的还是非法的。为了避免 Flash 被误擦、误写,STM32 在硬件设计上是有所考虑的,就是在擦除或写入之前,必须验证口令,如果口令不对 Flash 控制器拒绝相应的操作。然而,表(一)、表(二)所示的函数中,口令的验证形同虚设,没有起到应有的作用。因为,在这两段程序中,口令的验证是无条件通过的。犹如锁上门后,却把钥匙留在锁眼里,是不能防盗的。仿照核潜艇的管理思路给出一个一般性的流程,如表(三)所示,供参考。

更多实战经验请看:【ST MCU实战经验汇总贴】

沙发
lfc315| | 2015-8-18 09:50 | 只看该作者
不错。。。

使用特权

评论回复
板凳
ticomi| | 2015-8-18 10:34 | 只看该作者
很有参考意义!!非常感谢!

使用特权

评论回复
地板
aundry| | 2015-8-18 11:24 | 只看该作者
比起这个,更看重为啥引起程序跑飞,而且跑飞还不会复位
如果产品本身要做IAP,尽管一般的Flash操作都放在Boot里面,但是一句程序跑飞还是有点怕了
虽然真正的Flash操作是有一系列的通讯约束,但是“干扰造成程序跑飞”这个还是没解决

使用特权

评论回复
5
mmuuss586| | 2015-8-18 12:10 | 只看该作者
学习了

使用特权

评论回复
6
笑苍天| | 2015-8-18 14:24 | 只看该作者
这个还是很实用的

使用特权

评论回复
7
myxiaonia| | 2015-8-18 15:22 | 只看该作者
版主啊   这个不是 齐工技术支持手记 里的例子嘛

使用特权

评论回复
8
myxiaonia| | 2015-8-18 15:24 | 只看该作者
stm给的固件库里不是也没有高级验证策略嘛。。。

使用特权

评论回复
9
643757107| | 2015-8-18 19:07 | 只看该作者
能不能是文字版的啊,图片看到眼疼。

使用特权

评论回复
10
香水城|  楼主 | 2015-8-20 15:48 | 只看该作者
myxiaonia 发表于 2015-8-18 15:22
版主啊   这个不是 齐工技术支持手记 里的例子嘛

是的哦。:handshake
放到这里来,分享给大家。

使用特权

评论回复
11
香水城|  楼主 | 2015-8-20 15:49 | 只看该作者
643757107 发表于 2015-8-18 19:07
能不能是文字版的啊,图片看到眼疼。

下次改进:P

使用特权

评论回复
12
myxiaonia| | 2015-8-20 16:06 | 只看该作者
香水城 发表于 2015-8-20 15:48
是的哦。
放到这里来,分享给大家。

这个齐工是你们st的人吧,哈哈哈

使用特权

评论回复
13
643757107| | 2015-8-20 16:42 | 只看该作者
没事,就算是图片,下次拍清晰点也行。

使用特权

评论回复
14
冰河w| | 2015-8-28 21:29 | 只看该作者
有哪些干扰可能会造成STM32中的程序跑飞呢

使用特权

评论回复
15
天灵灵地灵灵| | 2015-8-28 21:30 | 只看该作者
最好做好后,核心部分用金属罩盖住。

使用特权

评论回复
16
lanmanck| | 2018-9-11 18:40 | 只看该作者
aundry 发表于 2015-8-18 11:24
比起这个,更看重为啥引起程序跑飞,而且跑飞还不会复位
如果产品本身要做IAP,尽管一般的Flash操作都放在B ...

我看都是说了一通的废话,把其他去掉保留1、2、3就解决问题了?太扯淡了.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17108

帖子

287

粉丝