一种数据存储方法与流程

文档序号:31833124发布日期:2022-10-18 19:42阅读:47来源:国知局
一种数据存储方法与流程

1.本发明涉及数据存储领域,尤其涉及多源融合传感器数据的存储领域。


背景技术:

2.智能化设备开发、调试中,需要存储多传感器实时采集的数据,便于分析设备的工作过程。例如无人机开发、测试、调试、飞行过程中,为了便于分析无人机的详细状态及控制效果,需要利用非易失性存储器对无人机姿态、gps定位等传感器的高速数据进行本地记录。可使用非易失性存储器nor flash存储数据。该种存储器写入数据前需要先擦除写入数据的区域,才可以写入,并且擦除次数有一定的限制,超出限制后,该区域将损坏。另外擦除期间或者写入数据期间,突然断电会引起数据错乱,甚至整个芯片的存储管理系统崩溃。
3.管理这种非易失性存储器,通常有两种方案:一是利用文件系统对存储器进行管理;二是将存储区域划分为数据存储单元和逻辑存储单元,二者建立映射关系,逻辑存储单元用于记录数据存储区每个单元写入的次数及其他信息,通过对比数据存储单元写入的次数,每次存储数据前,选择写入次数较少的存储单元写入数据。
4.使用文件系统的缺点包括以下两点:
5.缺点1:文件系统消耗硬件平台的rom和ram资源较多;
6.缺点2:基于文件系统存储数据时消耗的时间不固定,文件比较多或者文件比较大的时候,基于单片机硬件平台,存储文件耗时可达秒级,而无人机系统高速采集数据时,每10ms或者更快就产生1包数据,此种工况,存储耗时不能接受;
7.划分逻辑单元常规方法缺点:划分逻辑单元的常规方案虽然可以解决磨损平衡的问题,但是记录统计存储单元信息,比较耗费时间,且随着存储器循环使用,逻辑单元管理的内容越来越庞大,计算管理信息耗时逐渐变长,且耗时不固定,也很难满足基于单片机平台的无人机传感器高速数据的存储要求。


技术实现要素:

8.本发明公开了一种数据存储方法,该方法通过发明一种nor flash管理方法,具有存储器磨损平衡和断电保护功能。
9.该方法将nor flash存储器的存储区分为数据区和索引区,并按照每条数据记录和每条索引占用的存储空间大小,等比例分配数据区和索引区存储空间,数据区和索引区的每个存储单元保持相同的擦写频率,如此可以做到磨损平衡;索引区建立多备份镜像,异常断电时其中一份镜像可能遭到破坏,其他索引镜像正确保存,通过查找两份正确且相同的索引镜像恢复现场,实现断电保护。该方法每次更新索引区时,管理方法涉及的计算耗时固定且较短,能够满足小型无人机硬件平台条件下对存储数据实时性的要求。
10.该存储方法具体技术方案描述如下:
11.nor flash分为两个区,d区用于存储数据记录,r区用于存储数据记录索引;
12.d区共可存储n条数据记录,每存储一条数据记录,索引都会发生一次变化,在r区
存储变化后的索引;
13.为实现磨损平衡,在r区开辟一块大小为n*n的存储区,用于存储索引值,n表示一组索引占用的存储空间大小;
14.d区每存入一条数据记录后,索引值相应变化,索引值存储地址递增一个单元后,将索引值写入更新后的存储地址;
15.d区数据记录存储到n条,存满一次时,索引区也刚好存满,索引区擦除一次,重新从索引区初始地址存储索引的值,此时数据区所有存储单元也刚被擦写一次,如此可以保持数据区和索引区每个存储单元相同的擦写频率,从而实现索引区和数据区的磨损平衡;
16.为了实现断电保护,索引区建立4份索引镜像。如遇异常断电,系统重新上电时,通过对比4份索引镜像,恢复断电前的正确的索引值,具体表述如下。
17.若更新第一份索引镜像时断电,第一份索引镜像错乱,第二、三、四份索引镜像正确且相同,存储器重新上电时,用第二份镜像恢复索引值;
18.若更新所述第二份索引镜像时断电,第二份索引镜像错乱,第三、四份索引镜像正确且相同,存储器重新上电时,用第三份索引镜像恢复索引值;
19.若更新第三份索引镜像时断电,第三份索引镜像错乱,第一、二份镜像正确且相同,存储器重新上电时,用第一份镜像恢复索引值;
20.若更新第四份索引镜像时断电,第四份索引镜像错乱,第一、二、三份索引镜像正确且相同,存储器重新上电时,用第一份索引镜像恢复索引值。
21.本发明的上述技术方案至少具有如下有益效果:
22.优点1:具有磨损平衡和断电保护功能;
23.优点2:管理方法简便易行,消耗微控制器的资源少,包括rom和ram资源;
24.优点3:管理方法涉及的计算时间短,且比较固定,能够满足资源受限的单片机硬件平台实时数据存储要求。
附图说明
25.图1为本发明具体实施例提供的nor flash分区示意图;
26.图2为本发明具体实施例提供的基于磨损平衡的前2条数据记录的存储过程;
27.图3为本发明具体实施例提供基于磨损平衡的倒数第4条、倒数第3条和倒数第2条据记录的存储过程;
28.图4为本发明具体实施例提供的基于磨损平衡的末尾记录存储,以及初次循环覆盖时的前2条数据记录存储过程;
29.图5为本发明具体实施例提供的断电保护过程示意图;
30.图6为本发明具体实施例提供的w25q128芯片的分区示意图。
具体实施方式
31.为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
32.参见图1,图1为本发明实施例提供的分区示意图,如图1所示:
33.nor flash分为两个区,d区用于存储数据记录,r区用于存储数据记录索引。d区共
可存储n条数据记录,每存储一条数据记录,索引都会发生一次变化,需要擦写r区存储更新后的索引,如此r区擦写过于频繁,易造成存储单元损坏。为了避免存储单元频繁擦写,本发明在r区开辟一块存储区,存储区的大小为:
34.b=n*n
35.其中:b表示索引存储所占用的字节数,n表示数据区可存储的数据记录数,n表示每条索引记录的占用字节数。索引记录共两个参数,分别是first-index、next-index。其中first-index表示最早存入的数据的索引号,next-index表示最新数据产生时,需要存入的位置。next-index减去1表示,最晚一次存入的数据的索引号。
36.参见图2,图2为本发明具体实施例提供基于磨损平衡的前2条数据记录的存储过程,具体步骤如下:
37.步骤201,存储器格式化完毕,为存储首条数据记录做准备,此时数据区的存储单元全部为空白,索引区首地址存储一条索引记录,first-index、next-index的值都为0,指向第1条数据记录位置。第1条数据记录的编号为0,第n条数据记录的编号为n-1。
38.步骤202,数据区写入第1条数据记录,索引区存储地址加1,写入的first-index的值仍为0,指向第一条数据记录位置,next-index的值为1,指向第2条数据记录位置。
39.步骤203,数据区写入第2条数据记录,索引区存储地址继续加1,写入的first-index的值仍为0,指向第一条数据记录位置,next-index的值为2,指向第3条数据记录位置。
40.参见图3,为本发明具体实施例提供基于磨损平衡的倒数第4条、倒数第3条和倒数第2条据记录的存储过程,具体步骤如下:
41.步骤301,数据区写入第n-3条数据记录,索引区存储地址继续加1,写入的first-index的值仍为0,指向第一条数据记录位置,next-index的值为n-3,指向第n-2条数据记录位置。
42.步骤302,数据区写入第n-2条数据记录,索引区存储地址继续加1,写入的first-index的值仍为0,指向第一条数据记录位置,next-index的值为n-2,指向第n-2条数据记录位置。
43.步骤303,数据区写入第n-1条数据记录,索引区存储地址继续加1,写入的first-index的值仍为0,指向第一条数据记录位置,next-index的值为n-1,指向第n条数据记录位置。参见图4,图4为本发明具体实施例提供的基于磨损平衡的末尾记录存储,以及初次循环覆盖时的前2条数据记录存储过程;具体步骤如下:
44.步骤401,数据区写入第n条数据记录,索引区全部擦除后,索引区存储首地址用于存储当前索引号,写入的first-index的值为1,指向第二条数据记录位置,next-index的值为0,指向第1条数据记录位置。索引地址递增到n后,需要将整个索引存储区擦除一次,索引号从起始的0地址开始存储。此时数据区的存储单元也被擦写过一次,索引区和数据区每个存储单元保持相同的擦写频率,实现磨损平衡。
45.步骤402,数据区写入第1条数据记录,索引区存储地址加1,写入的first-index的值仍为2,指向第3条数据记录位置,next-index的值为1,指向第2条数据记录位置。
46.步骤403,数据区写入第2条数据记录,索引区存储地址加1,写入的first-index的值为3,指向第4条数据记录位置,next-index的值为2,指向第3条数据记录位置。
47.步骤403之后,顺序存储,直到存储到第n-3条数据记录,再执行301步骤,如此进行循环存储。
48.参见图5,图5为本发明具体实施例提供的断电保护过程示意图,如图5所示,建立4份索引镜像,实现断电保护,正常情况下,索引值变化时,4份索引镜像中都写入正确的索引值,遇异常断电,分4种情形说明断电保护的详细步骤:
49.步骤501,修改m1索引镜像时,如遇断电,m1镜像错乱。镜像m2、m3、m4还保持错乱之前最后一次正确的索引值,设备重新上电时通过对比镜像可以发现m1与m2不同,m2与m3相同,则读出镜像m2的索引值使用,并将正确的索引值写入m1镜像;
50.步骤502,修改m2索引镜像时,如遇断电,m2镜像错乱。镜像m1已经更新为最新的索引值,镜像m3、m4还保持错乱之前最后一次正确的索引值,设备重新上电时通过对比镜像可以发现m1与m2不同,m2与m3不同,m3与m4相同,则读出镜像m3的索引值使用,并将正确的索引值写入m1镜像和m2镜像。
51.步骤503,修改m3索引镜像时,如遇断电,m3镜像错乱。镜像m1和m2已经更新为错乱之前正确的索引值,m4还保持错乱之前的前一次的索引值,设备重新上电时通过对比镜像可以发现m1与m2相同,m2与m3不同,则读出镜像m1的索引值使用,并将正确的索引值写入m3镜像和m4镜像。
52.步骤504,修改m4索引镜像时,如遇断电,m4镜像错乱。镜像m1、m2、m3已经更新为错乱之前的索引值,设备重新上电时通过对比镜像可以发现m1与m2相同,m2与m3相同,m3与m4不同,则读出镜像m1的索引值使用,并将正确的索引值写入m4镜像。
53.参见图6,图6为本发明具体实施例提供的w25q128芯片的分区示意图,给出了基于nor flash芯片w25q128的一种具体分区方案:
54.w25q128型nor flash芯片存储数据,w25q128型nor flash芯片总的字节数为16777216(0x1000000)。
55.按照图6进行分区,高512k字节作为索引区,用于存储数据索引和设备的配置参数,其余的低地址区域用于存储数据。每条数据记录长度为4096字节,数据区共可以存储数据的记录数为3968条。索引循环的数值n取3968。first_index和next_index各占用两字节,每条索引记录共占用4字节。每个索引镜像占用15,872字节,4个索引镜像共占用63,488字节。以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1