FLASH数据丢失错误原因:
由于FLASH写入的特性是先擦后写,写入不会在原来位置重新写数据,一般都是把原位置的数据标记为无效,再在新位置写入数据。如果在擦除中掉电或者写入时掉电,有可能会出现失败的情况,下次再上电读取就会出错;如果是在擦除的时候掉电,不能保证擦除完全,但是已经擦除的部分,全变成0xff了。如果是写的时候掉电,已经写入的就是正确的,电平掉到最低极限工作电压附近时写入的数据就无法保证写入正确。
解决方法:
(1)硬件加入掉电保护机制
硬件电路上有相应的掉电警告中断,而且必须有足够的时间供软件响应。
1) 电源管理芯片,检测掉电事件的发生;
2) 储能元件,在掉电发生后能满足执行掉电保护的操作即有足够的时间存储一些标志位和必要的数据;
一个电源检测芯片,一个储能元件(比如大点的电容)结合软件判断以及提前保存现场就能很好的实现掉电保护。
(2)软件方式解决
1)要改写某扇区内容,先把该扇区内容备份到一个特殊的扇区;
2)在某个地方写一个特殊的标记;
3)完成该扇区的改写操作,清除标记;
4)每次操作前先判断备份区数据是否需要恢复。
这个过程“备份->置标记->写->清标记”能有效的解决FLASH突然掉电数据异常的问题。
全部0条评论
快来发表一下你的评论吧 !