一种可延长flash使用寿命的数据存储方法

文档序号:6432371阅读:792来源:国知局
专利名称:一种可延长flash使用寿命的数据存储方法
技术领域
本发明涉及数据存储方法技术领域,尤其涉及一种可延长FLASH使用寿命的数据存储方法。
背景技术
嵌入式系统具有功耗低、便携等特点,常常用于各种工业产品及民用产品中,如各种工业生产、消防和安防系统中都用到嵌入式系统。嵌入式系统通常脱离个人电脑或工业主机(如工控机),自成独立系统。由于尺寸要求等原因,嵌入式系统的存储空间往往有限,又因为嵌入式系统常常应用于各种安全性要求比较高的场合,因此该系统的数据操作可靠性变得十分重要。以嵌入式考勤系统或门禁系统为例,当用户考勤时,如果考勤成功,则系统产生考勤成功记录,并把考勤记录存储于FLASH等非易失性存储器中,方便日后查询和考核。另一个例子是工业安防系统,如分布式光纤振动测量系统,系统在线监测时,当振动事件发生后,系统通过模式识别算法判断,如果判定事件为某一类特定事件,则产生报警记录,并把报警记录保存于FLASH等非易失性存储器中,便于将来查询。上述两个嵌入式系统代表了此类系统的应用特性,即它们都频繁产生记录数据,并且记录数据都需要保存于FLASH等非易失性存储器中,而且需要保存相当长一段时间(比如3个月)。尽管单个记录数据量小(只有几个到几十个字节),但由于长时间保存,因此累积的数据量也比较大。FLASH存储器是一种容量大且价格低廉的非易失性存储器,因此,嵌入式系统中通常采用FLASH存储器来保存数据,用来存储数据库、特征数据、操作系统程序及系统产生的各种实时记录等需要掉电保存的数据。FLASH—般都分为很多个SECTOR,每个SECTOR包括一定数量的存储单元。对于大容量的FLASH,还分为不同的BANK,每个BANK还包括一定数目的SECTOR。FLASH的擦除操作一般都是以SECT0R、BANK或者是整片FLASH为单位的。在对FLASH进行写操作的时候,每个B工T可以通过编程由I编为0,但不可以由O修改为I。为了保证写操作的正确性,在执行写操作前,都要执行擦除操作。擦除操作会把FLASH的一个SECTOR、一个BANK或者是整片FLASH的值都修改为OxFF。这样写操作才可以正确完成。但是FLASH有其自身缺陷,一是FLASH有擦除次数(即寿命)限制,一般是10万次擦除操作,所以不宜对FLASH进行频繁写操作。二是FLASH写操作速度很慢,因为写操作前必须先擦除,然后再写,最后验证,整个过程速度很慢,因此对于频繁产生的实时数据,实时将之保存于FLASH也不太适合。FRAM是一种比FLASH更加可靠的存储器,它的读写速度很快,而且几乎没有擦除次数限制。但是其容量比较小,因而只适合存储一些数据量比较小的数据,比如几K的数据量。当系统必须频繁或者快速地写入数据时,上述这些优点对于写操作密集型应用的系统来说非常适合,如考勤或报警记录的保存正属于这种应用。SDRAM(或者DDR)是一种大容量高速度的存储器,适合用来运行操作系统、算法处理等需要高速运行的操作,但SDRAM(或者DDR)是易失性存储器,即系统掉电后其内部数据丢失无法恢复。因此,一般系统上电后,先把操作系统由FLASH自动导入到SDRAM中,然后自动运行操作系统。一般的记录保存方法是系统产生一条记录后,把这条记录写入FLASH(添加记录)中。但是,如前所述,每写一次FLASH,都需要先把要写入的SECTOR擦除后方可写入。这种方法的缺陷是FLASH频繁被擦除,其使用寿命必然大大缩短;而且,擦除操作使得SECTOR里面的旧的数据有被丢失的危险。

发明内容
为了解决现有技术中存在的问题,本发明提供一种可延长FLASH使用寿命的数据存储方法,既能实时存储记录数据,又可长期保存大量记录数据,同时又可大大延长FLASH的使用寿命。 为了达到上述目的,本发明采用一种可延长FLASH使用寿命的数据存储方法,所述数据存储方法是利用FLASH、FRAM及SDRAM三部分组合成的数据存储系统完成的,该方法包括以下步骤步骤一系统初始化在系统设计时,把FLASH划分成如特征数据区、记录数据区、操作系统区、数据库区等多个空间,每个区包括至少一个SECTOR ;进一步的,对FLASH所有的SECTOR进行编号,特别地,保留一个SECTOR,用来作为数据转储(数据备份)区,以进行数据转储(数据备份)操作;进一步的,预留出能满足系统设计指标中的记录保存时间的η个SECTOR作为记录数据保存区,编号从j+Ι开始到j+n结束;进一步的,把记录数据区的每个SECTOR都划分为Y个记录数据块,依次编号为1,2,··· , Y-1, Y;在FRAM中开辟一个记录数据暂存区,一个数据转储操作的标记区及一个数据转移操作的标记区;进一步的,FRAM中记录数据暂存区的空间大小为记录数据区的一个SECTOR中的一个记录数据块的大小;进一步的,数据转储操作的标记区存放数据转储标记A及发生转储操作的FLASH的SECTOR编号两个字节型的数据;进一步的,数据转移操作的标记区存放数据转移标记B、记录数据块的编号及发生转移操作的FLASH的SECTOR编号三个字节型数据;步骤二 数据添加系统把新记录写入到FRAM的记录数据暂存区的尾部,形成旧记录在前新记录在后的顺序,把记录逐条保存起来,直至将FRAM中的记录数据暂存区写满;步骤三数据转移当FRAM中的记录数据暂存区写满之后,就需要做数据转移操作,把FRAM中的记录数据转移到FLASH中,具体操作步骤细化如下第一步,读取FRAM中的数据转移操作的标记B、记录数据块编号i (I < i < Y)、FLASH 的 SECTOR 编号为 k(j+l 彡 k 彡 j+n);第二步,设置FRAM中的数据转储标记A = 0,设置FLASH中SECTOR编号=k ;第三步,擦除FLASH中用于数据备份的SECTOR ;第四步,读取FLASH中编号为k的SECTOR中的全部数据到SDRAM的数据暂存区,然后把这部分数据写入FLASH中用于数据备份的SECTOR中,并做校验,这一步叫做转储;第五步,如果转储成功,则设置FRAM中的转储标记A = 1,如果系统发生异常,则FRAM中的转储标记不会改变仍为A = O;第六步,设置FRAM中的数据转移操作标记B = O;第七步,擦除FLASH中编号为k的SECTOR ;
第八步,把FRAM中的记录数据块读出,并添加到SDRAM中由上述第四步得到的数据块的尾部,然后把这个数据块写回编号为k的SECTOR中,并作校验;第九步,如果第八步写入成功,设置FRAM中的数据转移操作标记B = I ;第十步,经过第九步之后,再根据第一步得到的i判断编号为k的SECTOR是否写满;如果尚未写满,则修改FRAM中数据转移操作标记的记录数据块编号为i+Ι,而SECTOR编号不变仍为k;如果已经写满,则记录数据块编号改为I (即下次从第一个数据块开始写),而设置SECTOR编号=k+Ι (即下次从下一个SECTOR写入);如果(k+Ι)超出FLASH的记录数据区(即k+1 > j+n),则设置SECTOR编号=j+Ι (即循环回到记录数据区起始位置);第十一步,清空FRAM中的记录数据暂存区,新的记录又可以从头写入这个空间;步骤四数据恢复若系统在上述步骤三中的第四步或第八步操作时发生异常故障,导致数据丢失,则数据恢复步骤如下第一步,读取备份SECTOR中的数据到SDRAM中,获得备份数据,此时FRAM中的转储标记没有改变,即A = 1,SECTOR编号=k,但B = 0,表明数据转移没有成功;第二步,擦除FLASH中编号为k的SECTOR ;第三步,把SDRAM中第一步获取的备份数据写入FLASH中编号为k的SECTOR中,并做校验;第四步,如果第三步写入成功,则设置FRAM中的转移标记,即B = 1,转到第五步,如果系统发生异常,则FRAM中的标记A = 1,B = 0, SECTOR编号=k,不会改变;第五步,按数据转移操作方法把FRAM中的记录数据转移到FASLH中。采用本发明所述的技术方案优点在于采用数据转移操作,由于实时产生的记录保存在FRAM记录数据暂存区,只有暂存区记录满时,才把记录转移到FLASH中,这样操作不仅提高了数据的保存速度,更重要的是大大降低了对FLASH的写操作次数,也是减少了对FLASH的擦除次数,从而尽可能地延长了 FLASH的使用寿命;同时,数据转移操作采用先转储,再转移的步骤,保证了在数据转移操作过程中,即使系统发生异常故障,也能保证系统恢复到数据转移操作前的状态,达到了数据安全可靠操作的目的。


图I为本发明工作原理示意图。
具体实施式下面结合附图进一步说明本发明的具体实施步骤。为了便于更加清晰描述所述方法,本发明以对嵌入式系统中记录数据操作为例。记录数据指的是考勤记录或报警记录,或相类似的数据,记录数据是系统在使用过程中实时产生的。例如考勤记录是在考勤过程中产生的,当考勤成功时,产生考勤成功记录,通常包括考勤人姓名(或流水号或工号)和考勤时间;而报警记录,通常是系统在使用过程中,发生事件引发报警(如火警,振动事件等),此时产生报警信息,通常包括发生事件的类型,发生时间和发生地点位置等。记录数据的特点是实时产生,有时频繁 发生,数据量小(通常为几个字到几十个字节);但通常要求系统能保存一段时间的记录数据(考勤数据或报警信息),例如3个月等,方便日后考核或查询。尽管每条记录数据的数据量小,但由于要求系统能长时间保存,因此总的记录数据量有时候会很大。由于记录数据产生频繁,产生次数多等特点,因此需要频繁向存储器写入记录数据。如上所述,FLASH容量大但擦除次数有限,故不宜频繁写入(需要擦除),而FRAM没有擦除次数限制,可以频繁写入,但其容量小,不能存放大量数据。因此,利用FRAM读写速度快、没有擦除次数限制且可靠性高的特点以及FLASH容量大且价格低廉的特点,将二者组合成一个非易失性存储器系统。另外,采用SDRAM作为系统常规内存,用来运行操作系统,算法处理等需要高速运行的操作。本方法取三种存储器的优点,互相补充。一种可延长FLASH使用寿命的数据存储方法,所述数据存储方法是利用FLASH、FRAM及SDRAM三部分组合成的数据存储系统完成的,该方法包括以下步骤步骤一系统初始化在系统设计时,把FLASH空间划分成多个区,比如有特征数据区,记录数据区,操作系统区,数据库区等等,每个区包括至少一个SECTOR ;进一步地,对FLASH所有的SECTOR进行编号,如FLASH —共有M个SECTOR,那么其SECTOR依次编号1,2. . . M ;特别地,保留一个SECTOR,用来作为数据转储(数据备份)操作。所谓数据转储操作就是把数据从FLASH的一个SECTOR转存到另一个用于备份的SECTOR。转储操作是所述数据可靠操作方法的一个重要步骤。预留的FLASH记录数据空间,应该能满足不同应用场合下系统设计指标中的记录保存时间。如附图I所示,假设系统保留了 η个SECTOR作为记录数据保存区,编号从j+1开始到j+n结束。在FRAM中开辟一个记录数据暂存区,其存储空间大小应合理设计(主要在系统设计时考虑)。假设此空间大小为T个字节(如T = 1K),而FLASH每个SECTOR的大小为X个字节(如X = 64K),假设Y = X/T,对Y取整数。那么把FLASH的记录数据空间的每个SECTOR都划分为Y个记录数据块,依次编号为1,2,... ,Y-LY0在FRAM中开辟一个区作为数据转储操作的标记,在此区内存放两个字节型的数据,即数据转储标记A和发生转储操作的FLASH的SECTOR编号。所谓数据转储,是指把数据从一个SECTOR搬移到另一个SECTOR,通常做数据备份用。在FRAM中再开辟一个区作为数据转移操作的标记,在此区内存放三个字节型数据,即数据转移标记B、记录数据块编号和发生转移操作的FLASH的SECTOR编号。所谓数据转移指的是当FRAM记录数据暂存区存满数据时,需要把这个记录数据块转移到FLASH中。转移操作是指把FRAM中的记录数据添加到FLASH中的记录数据区,添加是按顺序添加到记录数据区的尾部,也就是旧的记录数据在前新的记录数据在后,依次添加。那么系统必须记住,当前记录数据已经添加到了哪一个SECTOR中的哪一个记录数据块,因此需要知道当前SECTOR的编号和当前要写入的记录数据块在SECTOR中的编号。步骤二 数据添加数据添加是指当系统产生新的记录时,需要把新记录保存起来,并保留一段时间。具体做法是,系统把新记录写入到FRAM的记录数据暂存区的尾部,这样形成了旧记录在前新记录在后的顺序,把记录逐条保存起来,直至将FRAM中的记录数据暂存区写满。因为FRAM是非易失性存储器,即便系统掉电或发生其他异常后,记录依然能保存在FRAM存储器中。由于单条记录数据量小,而且产生频繁,故不宜直接把记录写入FLASH中,而是暂存在记录数据暂存区。步骤三数据转移 当FRAM中的记录数据暂存区写满之后,就需要做数据转移操作,把FRAM中的记录数据转移到FLASH中。具体操作步骤细化如下第一步,读取FRAM中的数据转移操作的标记B,假设此时记录数据块编号为
i(I 彡 i 彡 Y),FLASH 的 SECTOR 编号为 k(j+l 彡 k 彡 j+n);第二步,设置FRAM中的转储标记,其中设置A = 0,设置FLASH中SECTOR编号=k ;第三步,擦除FLASH中用于数据备份的SECTOR ;第四步,读取FLASH中编号为k的SECTOR中的全部数据到SDRAM的数据暂存区,然后把这部分数据写入FLASH中用于数据备份的SECTOR中,并做校验,这一步叫做转储;第五步,如果转储成功,则设置FRAM中的转储标记A = I ;如果系统发生异常,则FRAM中的转储标记不会改变仍为A = O;第六步,设置FRAM中的数据转移操作的标记B = O;第七步,擦除FLASH中编号为k的SECTOR ;第八步,把FRAM中的记录数据块读出,并添加到SDRAM中由第四步得到的数据块(一个SECTOR大小)的尾部(即旧记录数据块在前,新的记录数据块在后,依次添加到FLASH中),然后把这个数据块(一个SECTOR大小)写回编号为k的SECTOR中,并作校验;第九步,如果第八步写入成功,设置FRAM中的数据转移操作的标记B = I ;第十步,经过第九步之后,再根据第一步得到的i判断编号为k的SECTOR是否写满;如果尚未写满,则修改FRAM中数据转移操作标记的记录数据块编号为i+Ι,而SECTOR编号不变仍为k;如果已经写满,则记录数据块编号改为I (即下次从第一个数据块开始写),而设置SECTOR编号=k+Ι (即下次从下一个SECTOR写入);如果(k+Ι)超出FLASH的记录数据区(即k+1 > j+n),则设置SECTOR编号=j+Ι (即循环回到记录数据区起始位置);第十一步,清空FRAM中的记录数据暂存区,新的记录又可以从头写入这个空间;第十步实现了记录数据的循环存储,即当FLASH记录数据区存满记录时,下一次记录数据转移操作会把FRAM中的记录数据块写入到FLASH中记录数据区的最开始的位置,把最老的记录覆盖掉,这样,FLASH中始终保存了最新的记录数据。
当用户查询记录时,系统把FLASH中的所有记录以及FRAM中的记录都都读入内存中,供系统查询算法调用。所述步骤三由于把记录数据暂时存储在FRAM中,只有等到FRAM中的记录数据区写满之后再把整个记录数据块转移到FLASH中,因此大大降低了对FLASH的写操作(同时也是减少了对FLASH的擦除),从而提高了 FLASH的使用寿命。步骤四数据恢复所述方法采用数据转储操作,实现了数据可靠存储,不会出现由于数据转移时擦除FLASH而导致旧的记录丢失。例如,当数据转移第四步操作时系统发生异常故障,导致记录数据备份不成功,此时系统复位或重新上电后,读取FRAM中的转储标记,得到的结果是A=0,表明数据备份不成功,而此时编号为k的SECTOR尚未被擦除,FRAM中的旧记录数据也尚未被清空,所以旧的记录数据是安全的。如果所述数据转移操作第八步做数据转移操作时系统发生异常故障,这将导致编号为k的SECTOR内的数据丢失,但是由于在这之前数据已经备份过了,系统复位或重新上电后,就可以从备份的SECTOR读出数据,恢复系统做转移操作前的状态。数据恢复步骤如下第一步,读取备份SECTOR的数据到SDRAM中,获得备份数据。此时FRAM中的转储标记没有改变,即A = 1,SECTOR编号=k。但B = 0,表明数据转移不成功。第二步,擦除FLASH中编号为k的SECTOR。第三步,把SDRAM中第一步获取的备份数据写入FLASH中编号为k的SECTOR中,并做校验。第四步,如果第三步写入成功,则设置FRAM中的转移标记,即B = 1,转到第五步。如果系统发生异常,则FRAM中的标记A = 1,B = 0, SECTOR编号=k,不会改变。第五步,按数据转移操作把FRAM中的记录数据转移到FASLH中。所述数据转移操作,由于实时产生的记录保存在FRAM记录数据暂存区,只有暂存区记录满时,才把记录转移到FLASH中,这样操作不仅提高了记录的保存的速度,更重要的是大大减少了 FLASH擦除的次数,从而尽可能地延长了 FLASH的使用寿命;同时,数据转移操作采用先转储,再转移的步骤,保证了在数据转移操作过程中,即使系统发生异常故障,也能保证系统能恢复到数据转移操作前的状态,达到了数据安全可靠操作的目的。
权利要求
1 . 一种可延长FLASH使用寿命的数据存储方法,所述数据存储方法是利用FLASH、FRAM及SDRAM三部分组合成的数据存储系统完成的,其特征在于该方法包括以下四个步骤步骤一系统初始化 在系统设计时,把FLASH划分成如特征数据区、记录数据区、操作系统区、数据库区等多个空间,每个区包括至少一个SECTOR ; 进一步的,对FLASH所有的SECTOR进行编号,特别地,保留一个SECTOR,用来作为数据转储(数据备份)区,以进行数据转储(数据备份)操作; 进一步的,预留出能满足系统设计指标中的记录保存时间的η个SECTOR作为记录数据保存区,编号从j+Ι开始到j+n结束; 进一步的,把记录数据区的每个SECTOR都划分为Y个记录数据块,依次编号为1,2,··· , Y-1, Y ; 在FRAM中开辟一个记录数据暂存区,一个数据转储操作的标记区及一个数据转移操作的标记区; 进一步的,FRAM中记录数据暂存区的空间大小为记录数据区的一个SECTOR中的一个记录数据块的大小; 进一步的,数据转储操作的标记区存放数据转储标记A及发生转储操作的FLASH的SECTOR编号两个字节型的数据; 进一步的,数据转移操作的标记区存放数据转移标记B、记录数据块的编号及发生转移操作的FLASH的SECTOR编号三个字节型数据; 步骤二 数据添加 系统把新记录写入到FRAM的记录数据暂存区的尾部,形成旧记录在前新记录在后的顺序,把记录逐条保存起来,直至将FRAM中的记录数据暂存区写满; 步骤三数据转移 当FRAM中的记录数据暂存区写满之后,就需要做数据转移操作,把FRAM中的记录数据转移到FLASH中,具体操作步骤细化如下 第一步,读取FRAM中的数据转移操作的标记B、记录数据块编号i (I < i < Y)、FLASH的SECTOR编号为k(j+l彡k彡j+n); 第二步,设置FRAM中的数据转储标记A = 0,设置FLASH中SECTOR编号=k ; 第三步,擦除FLASH中用于数据备份的SECTOR ; 第四步,读取FLASH中编号为k的SECTOR中的全部数据到SDRAM的数据暂存区,然后把这部分数据写入FLASH中用于数据备份的SECTOR中,并做校验,这一步叫做转储; 第五步,如果转储成功,则设置FRAM中的转储标记A = i,如果系统发生异常,则FRAM中的转储标记不会改变仍为A = O; 第六步,设置FRAM中的数据转移操作标记B = O; 第七步,擦除FLASH中编号为k的SECTOR ; 第八步,把FRAM中的记录数据块读出,并添加到SDRAM中由上述第四步得到的数据块的尾部,然后把这个数据块写回编号为k的SECTOR中,并作校验; 第九步,如果第八步写入成功,设置FRAM中的数据转移操作标记B = I ; 第十步,经过第九步之后,再根据第一步得到的i判断编号为k的SECTOR是否写满;如果尚未写满,则修改FRAM中数据转移操作标记的记录数据块编号为i+Ι,而SECTOR编号不变仍为k ;如果已经写满,则记录数据块编号改为I (即下次从第一个数据块开始写),而设置SECTOR编号=k+Ι (即下次从下一个SECTOR写入);如果(k+Ι)超出FLASH的记录数据区(即k+l> j+n),则设置SECTOR编号=j+l (即循环回到记录数据区起始位置); 第十一步,清空FRAM中的记录数据暂存区,新的记录又可以从头写入这个空间; 步骤四数据恢复 若系统在上述步骤三中的第四步或第八步操作时发生异常故障,导致数据丢失,则数据恢复步骤如下 第一步,读取备份SECTOR中的数据到SDRAM中,获得备份数据,此时FRAM中的转储标 记没有改变,即A = 1,SECTOR编号=k,但B = 0,表明数据转移没有成功; 第二步,擦除FLASH中编号为k的SECTOR ; 第三步,把SDRAM中第一步获取的备份数据写入FLASH中编号为k的SECTOR中,并做校验; 第四步,如果第三步写入成功,则设置FRAM中的转移标记,即B = 1,转到第五步,如果系统发生异常,则FRAM中的标记A = 1,B = 0, SECTOR编号=k,不会改变; 第五步,按数据转移操作方法把FRAM中的记录数据转移到FASLH中。
全文摘要
本发明公开了一种可延长FLASH使用寿命的数据存储方法,所述数据存储方法是利用FLASH、FRAM及SDRAM三部分组合成的数据存储系统完成的,该方法主要包括系统初始化、数据添加、数据转移及数据恢复四个步骤。采用本发明所述的技术方案优点在于采用数据转移操作,不仅提高了数据的保存速度,更重要的是大大降低了对FLASH的擦除次数,从而尽可能地延长了FLASH的使用寿命;同时,数据转移操作采用先转储,再转移的步骤,保证了在数据转移操作过程中,即使系统发生异常故障,也能保证系统恢复到数据转移操作前的状态,达到了数据安全可靠操作的目的。
文档编号G06F12/08GK102981977SQ20111025965
公开日2013年3月20日 申请日期2011年9月5日 优先权日2011年9月5日
发明者黄正 申请人:上海华魏光纤传感技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1