在大多数工控应用中,由于各种复杂的环境因素,使工控设备不可避免的会面临供电突然断掉的情况。为了可以保证系统运行状态确定性以及记录数据完整性,当系统供电恢复后,现场数据可以及时恢复,避免应用系统产生混乱。为了保证保存数据的实时性,现场数据的存储频率还会非常高,因此还要求数据保存的速度应足够快,从而不影响应用程序的正常运行。
对目前的非易失性存储器,NandFlash、NorFlash、EEPROM,有一定的擦写寿命限制,而且写入速度也不高,不利于现场数据实时保存。但是成本较低。
对于一些成本较高的非易失性存储器,例如铁电存储器,不利于降低产品的成本;而且容量也不大。
对目前的易失性存储器如DDR,数据写入和读取速度都非常的高,不过掉电后,数据将会全部掉失。如果使用一个后备电池的话,使得DDR一直通电,数据就不会掉失。但是电池有充电和放电时间,使用寿命的限制。也不利于产品的维护和降低成本。
因此本文提出一种“NandFlash + DDR + 法拉电容(又叫超级电容)”的低成本,高可靠性的解决方案。NandFlash(SLC)具有擦除次数高,达10万次,数据存储时间长,成本低等特点,被大多数嵌入式工控机所使用。
2. 实现的原理
如果能预知掉电的发生,并能够利用超级电容继续为最小系统供电2秒钟。侧可以在有外电时把实时性比较高的数据保存在内存DDR里。获得掉电发生时,在超级电容供电的2秒钟里,把内存的一些重要的数据和现场运行状态数据打包成文件保存到NandFlash存储器。以保证工控设备在供电回复后能继续正常运行。基于这个原理广州市微嵌计算机科技有限公司生产的8寸WINCE工业平板电脑(WLT_TFT8060_080)已经实现了这个掉电保护功能。只需要在购买时选配这个掉电保护模块就可以了。
上图中的+5V为外部供电电源,+3.3V给CPU、NandFlash和DDRII 供电,C3为超级电容(法拉电容)。外部供电后,D3导通前,通过R1,R2充电;D3导通后,通过R1、D3快速通电;电容电压上升到4.7V左右后,通过R1、R2缓慢充电。+5V系统掉电时, U1是一个复位芯片,电压低于4.2V后,RST脚立刻产生一个低电平通知CPU,同时 C3通过D2放电,维持核心系统工作至少2S。CPU可以有2S以上的时间充分保存现场的数据。
4. 软件的编程
本公司提供一个动态库“PwLostSave.dll”,用户只需要在应用程序中使用该库的两个函数即可。
“PwLostSave.dll”的函数定义在“PwLostSave.h”头文件中。提供了两个函数:
BOOL InitPowLostSave(void (*lpfnNotify)(void), DWORD dwpriority);
功能说明:注册和初始化掉电通知功能,该函数只能执行一次。
BOOL CheckPowerOn(DWORD dwChkTimes);
功能说明:用于检测外部电源是否重新供电。一般用于 用户编写的函数lpfnNotify(回调函数)中。
5. 软件说明
一般掉电保护是强实时性的任务,可以通过触发中断的方式来获得Windows CE操作系统的服务。
用户在回调函数“lpfnNotify”中实现自己编写的掉电处理程序即可。
6. 总结
使用广州市微嵌计算机科技有限公司生产的8寸WINCE工业平板电脑(WLT_TFT8060_080),测试结果如下。在上电2分钟后,电容充电,掉电后可以保存到Nandflash的数据大小约为800Kb;上电10分钟后,电容充分充电,可以保存到Nandflash的数据大小约为3Mb。当然,如果用户在回调函数“lpfnNotify”中处理过多的内容,则影响保存数据量。
对于实时采集数据的用户来说,应先将数据保存到DDR中,当达到一定大小,例如1M,立刻将数据写入到NandFlash。系统掉电时候,将剩余的数据在“lpfnNotify”中保存到NandFlash即可。
技术支持QQ:605440535
资料下载:
附件:
[本地下载]