MSP430FR5949IDAR FRAM中应用程序内存区域中代码会有个别字节被篡改
[复制链接]
我们使用的芯片型号为MSP430FR5949IDAR,编程软件为IAR,通过IAR生成的文本文件烧写进入片子的FRAM中。设备运行一个月左右,发现FRAM中应用程序内存区域中代码会有个别字节被篡改,导致程序运行不正常。对于造成代码被更改的可能原因我们尚未有明确的判断,希望原厂能给些建议,谢谢!
请问现在运行的环境是怎样的?噪声大吗?是否有可能是电压不稳或者波动,导致内部被误操作了?
出现问题的芯片概率大约是多少? 被篡改的位置固定吗,数值呢?
1、我们出现问题的产品尚未安装到现场,只经过出厂测试,到现场做到货检测时发现的问题,这个过程中并没有比较大的噪声;
2、出现概率大约是6000只中有150只左右,被篡改位置并不固定,可看下面的一些截图;
(注:右侧为正常代码,左侧为异常代码)
产品1位置:
产品2位置:
产品3位置:
MSP430 issue.docx
刚烧进去的时候测试正常吗?若是正常说明当时烧进去的时候是对的。
后来随着时间的推移出现数据不对的话,可能是电压,温度,湿度,电离辐射等对芯片产生了干扰。
现在程序内有针对flash的操作吗?
我们是有写操作的,就是目前出现问题的几个地方比较随机,并不是我们指定的地址,我们写操作的位置是固定的位置,并且与应用程序代码(出现篡改的位置)有一定的间隔和距离。
图中标注的这些位置是我们固化的一个BOOT程序,从地址0x4400到0x63FF我们是不做写操作的。现在发生这样的问题,不知道是不是什么机制的问题,我们没有主动去进行写入操作,而是产生什么被动的写入操作。这中间从运行正常到运行异常期间程序是自己在独立运行的(出厂到供货现场,尚未安装),没有外部噪声干扰的。所以除了意外的写入操作,还有没有什么其他问题会产生这种状况。之前您那有没有遇到类似的情况做参考,因为您那样本量更大。 还有一般的Flash写操作是有解锁环节的,咱们铁电的FRAM读写更容易,环节要少,是不是有什么处理这种意外写入的措施。
有可能影响Flash的数据的因素如下
1. 代码意外操作,比如堆栈溢出造成的误擦写
2. 超过芯片Datasheet允许的电气参数,比如ESD
3. 硬件设计,电源,时钟等
避免代码被修改的话,可以利用密码保护 JTAG;或通过在 FRAM 中对熔丝位标识进行编程来完全禁用 JTAG。 如果 JTAG 已禁用,则只能通过引导加载程序 (BSL) 访问器件。 BSL 需要密码才可读出或接收数据。
请参考
查看详情
|