四极管:关于突然掉电防止系统崩溃以及保护数据的一些拙见
2012-03-01 13:35
393 查看
博客学习
需要软件和硬件配合工作。
一般要解决如下问题:
1)快速检测掉电信号;
2)要有足够的时间让你停下来保存现场;
3)上电后可靠的复位;
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,如果存在,打开并读取赋值即可。
一、可能原因
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,如果存在,打开并读取赋值即可。
相关文章推荐
- iOS 关于大小端以及一些数据补位
- 【强烈推荐】:关于系统学习数据挖掘(Data Mining)的一些建议!!
- 一些关于线程用法的总结以及对上篇多线程同步、数据共享的补充
- 关于为什么电脑32位系统在处理数据时是4个字节的二进制数据以及byte取值范围的考虑?
- 关于如何确定要索引的数据列以及如何正确的建立索引的一些方法
- 关于android 3.0系统的内存限制的一些测试数据
- 收罗了一些关于BI数据领域以及ETL技术论坛地址,欢迎收藏
- django1.6 使用userprofile 以及一些关于用户系统的总结
- 关于gridview的一些用法,如获得gridview的选中行的数据,以及其他删除DataTable中的重复行。
- 关于NSuserdefault存储数据以及存储可变数据时的一些问题
- 关于datatable的一些操作以及使用adapter对数据的操作
- 关于前台文本框数据传入后台出现乱码?的解决以及ssh传参
- Linux 关于动态链接库以及静态链接库的一些概念
- Windows中一些关于CPU\系统效能的知识——编程之美1.1
- Query ajax()使用serialize()提交form数据 以及如何防止中文乱码
- 关于消防系统安装的一些规范
- 关于OMG的DDS,实时系统的数据分发服务
- 关于java的基础--基本数据类型以及循环
- 关于解决tomcat的一些问题-内存溢出 PermGen space以及超时
- 关于EF中实体和数据表以及查询语句映射的问题