博客学习
一、可能原因
NandFlash里面的部分page代码被开关机噪声擦掉或者是修改成错误的代码。Flash一般在读的时候不会断电,不会造成损坏,在写的时候如果断电,就会造成数据写错误。也就是数据损坏了。文件在写入时处于“写保护”,直到写完才会取消保护,允许别的程序访问。瞬间掉电,那么文件肯定无法完全写完整,保护的特性还存在,但是在FAT表中已经有对应的记录,所以能看到,只是文件实际上不完整,那么就无法真实的访问了,还有一些其他状况的突然断电清苦。
需要软件和硬件配合工作。
一般要解决如下问题:
1)快速检测掉电信号;
2)要有足够的时间让你停下来保存现场;
3)上电后可靠的复位;
二、解决办法
1、加一个后备电源(这个办法断电就是断电了,没有什么后备的,一般不会采用)
2、修改NandFlash的WP管脚,在不写,擦除Nand时,用IO口将WP脚死死的拉低。
3、调用NAND驱动函数,把系统NK部分加锁。
4、将TFAT(Transaction-Safe FAT File System) 加入, 可大大地提高 File System 的稳定性。因为TFAT主要改进就是2个FATs 不是同时更新的,而是在操作前更新备份的FAT, 操作完成后再更新另一个FAT, 这样文件要么全部写入, 要么全部没有写入,可以防止突然掉电造成FAT表混乱。但是如果设备使用Mass Storage的话,挂载到PC端可能不能兼容。还有就是TFAT只能保证每一个传输事物是安全的,也就是说保证目录信息和FAT表对应的正确性,但是这些只能说可以保证存储系统更加健壮一些。但是突然掉电的情况,帮助不是很大。但是可以做如下优化:将DBR所在的Sector进行清零,然后在注册表由文件系统对应的设置相处设置上"AutoFormat" = dword:1.在开机(支持Hive-registry)或者Reset的过程中回去检测该部分并重新对文件系统分区进行格式化。然后就OK了。
5、通过一些标记或算法来做。先把文件扇区备份到一个特殊的扇区,在某个地方做一个特殊的标记,完成改扇区的改写,清楚标记,系统每次上电或复位,都去检查。
6、电路中接一个大电容延迟掉电时间。硬件上提供一个中断管脚,设为优先级最高,一旦触发,立即关LCD背光(这东西耗电量大),然后按照正常流程保存现场,挂起。
简单来说就是如下措施:
1.电源管理芯片,检测掉电事件的发生;
2.储能元件,在掉电发生后能满足执行掉电保护的操作即有足够的时间存储一些标志位和必要的数据;
然后处理上面1-5的内容,将会有较大的改善。
昨天考试中有用到MAX708S的芯片翻译。昨天迷迷糊糊不知道是干嘛的,现在一看才知道,相信,贵公司已经做了掉电保护电路。
如果结合掉电保护电路。在Windows CE系统中,掉电中断发生后。信号发往异常处理器。中断处理器调用OEMInterruptDisable,关闭来自硬件的中断。中断服务例程ISR被内核调用并返回结构。内核设置Event事件来触发中断服务线程IST。IST被唤醒后调用各种I/O函数完成中断处理并返回InterruptDone通知内核。内核调用OEMInterruptDone重新开启中断。
掉电保护的实现:
采用两个线程:一个外部中断0线程和一个应用程序的掉电中断监控线程。
系统上电后,两个线程均处于挂起状态。当掉电监控电路检测到IO管脚突然下降(掉电),则通过外部中断引脚EIEO产生中断,唤醒外部中断0的线程EIET0_InteThread,设置同步事件为通知状态。掉电中断监控线程等到同步事件后,关机,并获取当前监控的各种状态参数。写入掉电保护文件save.txt中。
掉电信息恢复及文件处理:
这个过程就相对简单一些,检查NandFlash内是否存在save.txt,如果存在,打开并读取赋值即可。