portant;">由于FLASH的擦除和写入的特性,如果在擦除中掉电或者写入时掉电,有可能会出现失败的情况,下次再上电读取就会出错。
portant;">擦除的时候掉电,不能保证擦除完全,但是已经擦除的部分,肯定是0xff了。
portant;">写的时候掉电,已经写入的就是正确的,电平掉到极限工作电压附近时,写入的就无法保证了,地址无法保证,写入的值也无法保证。没有写到的,肯定还是 0xFF。
portant;">2、解决方式
portant;">2.1、硬件方式解决 — 掉电保护机制
portant;">必须硬件电路上有相应的掉电警告中断,而且必须有足够的时间供软件响应。
portant;">掉电保存和上电恢复,需要以下:
portant;">1) 快速检测掉电信号;
portant;">2) 要有足够的时间让你停下来保存现场;
portant;">3) 上电后可靠的复位;
portant;">这些的关键是掉电信号\电源\复位信号三个怎么配合的事;
掉电保护不是重新擦写那么简单,首先要有一个机制能知道发生了掉电事件,还要知道什么地方的数据是可能出错的,如果是新建文件还好一点,一般就是数据作废,如果是改写一个文件时发生掉电事故的话,还要有恢复机制,将数据恢复成改写以前的数据。
portant;">由于 flash 的先擦后写的特性,不会在原来位置重新写数据,一般都是把原位置的数据标记为无效,再在新位置写入数据,对于文件来说有一个存储位置的关系,这不同于文件系统的逻辑地址,每个逻辑地址要有对应的物理地址,要有一套逻辑-物理地址的转换映射关系在里面。