使用Flash模拟EEPROM的数据存储方法及系统与流程

文档序号:37425017发布日期:2024-03-25 19:12阅读:17来源:国知局
使用Flash模拟EEPROM的数据存储方法及系统与流程

本发明属于嵌入式软件设计领域,具体涉及一种使用flash模拟eeprom的数据存储方法及系统。


背景技术:

1、在嵌入式领域,有大量的数据需要在掉电的情况下能够被保存,且这些数据可能会被频繁的修改。如果增加eeprom去保存这些数据会导致成本上升,通常嵌入式领域会使用微控制器内部flash模拟eeprom。

2、现有技术一般通过使用sram+flash的方式模拟eeprom。一个数据包包括72bit,bit[31:0]用于存储数据,bit[63:32]用于存储目标地址(sram)的地址+有效标志位,bit[71:64]用于存储错误纠正码(ecc),如图1所示。

3、同时考虑异常掉电后数据不会丢失,则需要额外再使用一倍的flash空间用于备份数据,如图2所示,其中,flash bank0用于正常模拟eeprom,flash bank1用于备份数据。但这样的方式导致flash的利用率极低(低于25%)。

4、现有技术主要存在以下缺陷:

5、1、flash利用率较低,模拟大空间的eeprom,需要占用更多的flash;

6、2、需要占用大量的sram,例如模拟4kb eeprom则需要消耗4kb sram;

7、3、上电遍历数据时间较长,需要按照地址逐一遍历所有flash内容,效率低;

8、4、未保存额外的数据信息(例如数据存储的次数、flash擦除次数),不利于问题及故障分析。

9、上述缺陷对于资源有限的小型嵌入式系统来说是难以接受的。


技术实现思路

1、为克服上述现有技术的不足,本发明提供一种使用flash模拟eeprom的数据存储方法及系统,通过管理两个存储空间的激活状态,交替地向两个存储空间的数据区写入数据,以达到延长flash使用寿命的目的。

2、根据本发明说明书的一方面,提供一种使用flash模拟eeprom的数据存储方法,包括:

3、初始化flash内预先划分好的两个存储空间,并确定两个所述存储空间的激活状态;

4、在两个所述存储空间中查找所有的最新数据;

5、在被写入的数据长度小于当前激活状态存储空间的剩余空间时,写入数据至当前激活状态存储空间的数据区;在被写入的数据长度大于当前激活状态存储空间的剩余空间时,交换两个存储空间的激活状态,写入数据至新激活状态存储空间的数据区。

6、上述技术方案使用微控制器内部flash模拟eeprom存储数据,节约了成本;并通过管理两个存储空间的激活状态,交替地向两个存储空间的数据区写入数据来使得flash能够被均衡磨损,减少flash擦除次数,延长整体flash使用寿命。

7、作为进一步的技术方案,在初始化之前,还包括:将flash结构划分为两个存储空间,每个所述存储空间均包括信息区和数据区,所述信息区用于存放每个存储空间的信息,所述数据区用于存放eeprom数据。

8、可选地,所述信息区包括:part状态编号、信息校验标志、crc检验码和复制完成标志。所述数据区包括:数据校验标志头、数据段和数据校验标志尾。其中,所述数据校验标志头包括数据标志头、数据编号、数据长度和数据写入次数。所述数据段包括数据头和数据。所述数据校验标志尾包括数据标志尾、数据编号和数据长度。

9、上述技术方案通过信息区和数据区的特殊结构可以实现上电快速数据查找以及异常掉电数据恢复。进一步来说,所述数据区的特定格式可解决flash模拟eeprom中flash利用率低的问题。

10、作为进一步的技术方案,每个所述存储空间均包括激活状态和非激活状态,且同一时刻仅有一个存储空间处于激活状态。

11、作为进一步的技术方案,在初始化时,还包括:

12、读取flash内两个存储空间的信息区内容,并根据所述信息区内容确定存储空间是否正常;

13、在根据对比结果判断至少一个存储空间异常时,对异常存储空间进行恢复,并确定恢复后两个存储空间的激活状态。

14、作为进一步的技术方案,在根据对比结果判断两个存储空间均正常后,进一步包括:

15、查找最低的未被写入数据的地址,并基于查找到的最低的未被写入数据的地址后,查找所有的最新的有效数据。

16、作为进一步的技术方案,在查找最低的未被写入数据的地址时,还包括:从存储空间的高地址依次往低地址进行遍历,直到内容有数据或者读取到数据区域的起始地址。

17、作为进一步的技术方案,基于查找到的最低的未被写入数据的地址后,查找所有的最新的有效数据时,还包括:

18、根据最低的未被写入数据的地址中的内容,确定数据校验标志尾;

19、根据所述数据校验标志尾中的数据长度找到数据校验标志头地址,并读取数据校验标志头内容;

20、根据所述数据校验标志头中的数据编号、数据长度确定数据是否正确且完整;

21、在所述数据正确且完整时,将所述数据的校验标志头地址记录在sram中。

22、上述技术方案仅将数据的首地址、写入次数、数据编号记录在sram中,一个数据编号可对应大量的数据,大大的节约了sram空间,解决了现有flash模拟eeprom方法需要大量占用sram的问题。

23、作为进一步的技术方案,所述方法还包括:

24、判断被写入的数据长度是否大于存储空间的剩余空间;

25、在小于存储空间的剩余空间时,直接在激活状态存储空间的最低的未被写入数据的地址中依次写入数据的数据校验标志头、数据段、数据校验标志尾;

26、在大于存储空间的剩余空间时,则进行存储空间激活状态交换后,再进行数据写入。

27、作为进一步的技术方案,进行存储空间激活状态交换,进一步包括:

28、将当前激活存储空间的最新数据复制到非激活存储空间,并记录非激活存储空间的最低的未被写入数据的地址;

29、复制完成后擦除激活存储空间中的所有内容;

30、将新的存储空间状态编号、信息校验标志、crc校验码重新写入到被擦除的存储空间信息区;

31、重新标记状态编号小的存储空间为激活状态,状态编号大的存储空间为非激活状态,存储空间激活状态交换完成。

32、根据本发明说明书的一方面,提供一种使用flash模拟eeprom的数据存储系统,包括:

33、初始化模块,用于初始化flash内预先划分好的两个存储空间,并确定两个所述存储空间的激活状态;

34、查找模块,用于在两个所述存储空间中查找所有的最新数据;

35、写入模块,用于在被写入的数据长度小于当前激活状态存储空间的剩余空间时,写入数据至当前激活状态存储空间的数据区;在被写入的数据长度大于当前激活状态存储空间的剩余空间时,交换两个存储空间的激活状态,写入数据至新激活状态存储空间的数据区。

36、与现有技术相比,本发明的有益效果在于:

37、1、本发明通过管理两个存储空间的激活状态,交替地向两个存储数据区以特定的格式写入数据,并在初始化时仅记录数据标志头的首地址,合理地管理了flash中数据,提升了flash的使用寿命,并解决了当前flash模拟eeprom方法中flash利用率低,且大量占用sram问题。

38、2、本发明可记录每份数据总共写入的次数以及flash已被擦除次数,而且占用极少的sram,且flash利用率较高;同时有较强的鲁棒性,任意时刻发生异常掉电后,数据均不会丢失。

39、3、本发明节约了上电初始化时间。相对于现有遍历所有flash内容来读取数据至ram的方式而言,本发明仅读取数据标志头和数据标志尾,来记录数据起始地址,大大减少了遍历flash的时间。

40、4、本发明占用极少的sram资源。现对于现有使用sram来保存所有的数据(例如模拟4kb eeprom,需要4kb eeprom sram)而言,本发明仅仅将数据的首地址、写入次数、数据编号记录在sram中,一个数据编号可对应大量(例如1kbyte)的数据,大大的节约了sram空间。

41、5、本发明易于问题的分析。除了数据外,还保存了数据的写入次数以及flash的擦除次数,同时还可能存在历史数据,这些信息均有助于系统问题及故障的分析。

42、6、本发明flash利用率高。现对于现有每个eeprom地址对应1byte数据而言,本发明采用抽象的方式(数据编号),每个数据编号可以对应任意长度(最大不超过用于模拟eeprom的flash大小除以2,再减512byte)的数据,同样大小的flash,利用该算法可以存储更多的数据。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1