MSP430F2xxx系列FLASH数据丢失
偶然的一次机会发现做的MSP430F2xxx板子,在上电时会出现information memory的款被未知原因擦除了,后来对多个板子进行测试,发现有一部分板子在连续上电断电后information memory四个块会存在数据丢失,即这些存储区数据全部变为0xFF,有时候B区数据回复默认,有时候视C区或者D区,A区倒是没怎么注意到,不过有时候会出现程序无法运行的情况,据观察是0xFFFF这个地址的值被改变了,导致程序无法运行。
有哪位兄弟曾见过这样的情况?焊接会不会导致芯片出现这样的现象?
然后我看全新芯片未下载过程序,观察到D区始终有55AA 3FFF ABCD 55AA 1234这样的数据,理论上来说FLASH初始化值应该都是FF啊
还请各位高手能指点一二
里面就是两段程序,一个是启动程序,可根据一个标志位判断是进入升级模式还是进入应用程序,启动程序里面有IAP操作,但是应用程序里面没有。
但是我这样频繁上电又没有调用过函数擦除FLASH,为什么会有这样的情况呢?请稍详细说明,感谢,而且大部分芯片这样频繁上电并未出现异常,只有一部分,而且这部分只要连续上10几次后就会导致FLASH数据复原。更换芯片后又可以了
[解决办法]
恭喜你,是你程序跑飞了!
这个是电源监控及复位的问题。正常情况下,在上电启动过程中,需要芯片电压超过某一阈值才释放复位,进入工作状态,如果提前复位完成,此时系统状态不完全确定,程序跑飞,如果正好飞到flash擦除的代码,那就是楼主看到的现象了;同样,在下电的过程中,如果当电压掉到不能正常工作的阈值是仍未复位,也会跑飞。
这个在芯片手册中关于复位的地方一定讲到了。楼主可以采用外加电源监控芯片的方法解决;有的芯片内部也有电源监控电路,但默认的不一定启动了。祝你好运!
[解决办法]
在上电时会出现information memory的款被未知原因擦除了,
IAR下程序的时候有一项设置是:擦不擦这个的
不知道是不是这个原因?
[解决办法]
写flash是要保证一定时间的,有些写片器为了缩短写时间对这个时间进行了‘优化’,结果可能flash浮栅上的电荷不够会出现数据不稳和丢失,换一个写片的试试,同时要排除芯片是水货。
[解决办法]
像flash那样的存储器,在线写时要保证电源不掉,即需要一个掉电检测电路,在交流220掉电时,提前通知CPU,同时5V还应该可以再使用20ms左右。
以前我也遇到数据掉的情况(SRAM+电池),现在直接用FRAM(铁电存储器),还没发现掉数据情况(掉电保护还要)
[解决办法]
我觉得有两种可能,一种是由于硬件原因引起的,原因前面我已经说过。另外一种可能就是软件本身导致程序跑飞,比如内存越界等原因造成。
程序跑飞,不是说是不是在运行某段程序,而是某段程序不该执行而执行了。比如说如果你的第二段程序有擦除flash的例程,第一段程序在运行中跑飞就可能执行第二段的代码;也可能执行第一段中的第其他代码。一般情况下,flash控制器本身是不允许擦写正在运行的代码所在扇区的。