一种嵌入式系统数据存储结构及掉电数据恢复方法与流程

文档序号:31051726发布日期:2022-08-06 07:39阅读:200来源:国知局
一种嵌入式系统数据存储结构及掉电数据恢复方法与流程

1.本发明涉及数据存储技术领域,涉及一种嵌入式系统数据存储结构及掉电数据恢复方法。


背景技术:

2.很多嵌入式系统在运行过程中都需要实时保存一系列数据和参数等信息,如智能灯在使用不同色温灯珠或者使用不同颜色的灯珠过程中需要实时保存用户当前使用的灯珠色温或颜色,以便设备在掉电后再上电时仍能显示用户当前使用的灯珠色温或颜色状态。
3.目前,嵌入式系统大部分的存储介质都是采用flash进行保存,直接将实时数据保存到扇区内,在保存数据前,先擦除扇区内保存的原有数据,然后再将数据保存到擦除后的扇区内,当需要再次保存数据或刷新数据,又需要擦除上一次的数据,如此循环往复。
4.由于flash存储未对扇区内部进行划分,这样会导致保存的数据只占扇区的一部分,而每次保存时都需要预先对原有的数据进行擦除,且flash由于受到擦写次数的限制,频繁这种操作会导致寿命降低。此外,这种flash保存方式,在发生异常掉电,如在擦除扇区数据后,保存新数据前异常掉电,就会导致数据丢失,造成设备功能异常。


技术实现要素:

5.针对上述问题,本发明提供了一种嵌入式系统数据存储结构及掉电数据恢复方法,通过设置数据存储结构,延迟了flash内擦除的时间周期,提高了使用寿命,并通过设置数据存储卷绕加备份,使得在设备掉电重启后仍能恢复到掉电前的功能状态。
6.为实现上述目的,本发明提供了一种嵌入式系统数据存储结构,包括:flash存储器和索引指针;
7.所述flash存储器,用于:
8.设置成多个数据存储扇区和一个备份域扇区,每个所述数据存储扇区内设置多个数据记录区域;
9.每个所述数据记录区域存储一条记录数据;
10.当所述数据记录区域存满时,将下一条记录数据暂存至所述备份域扇区,将所有所述数据记录区域的记录数据擦除后,再将所述备份域扇区的记录数据存储至所述数据记录区域;
11.所述索引指针,用于:
12.根据索引值指向所述数据记录区域或备份域扇区;
13.在不同的所述数据记录区域之间上下移动,进行记录数据存储和读取的索引。
14.作为本发明的进一步改进,所述flash存储器内设有多个扇区,将部分扇区用于掉电数据存储,包括多个数据存储扇区和一个备份域扇区。
15.作为本发明的进一步改进,在ram内设置所述索引指针,针对所述索引指针的指示
位置设置不同的索引值;
16.开始时,所述索引指针从初始化索引值指示的位置指向第一个所述数据记录区域,向该所述数据记录区域存储记录数据;
17.存储完成后,所述索引值加1,索引指针指向下一所述数据记录区域,向该所述数据记录区域存储记录数据,直至存储完最后一个所述索引值指示的所述数据记录区域。
18.作为本发明的进一步改进,当所有所述数据存储扇区均已存储记录数据,下一次进行记录数据需要存储时,将索引值转至所述备份域扇区,具体包括:
19.将记录数据存储到备份域扇区;
20.将数据存储扇区内的所有记录数据擦除;
21.将所述备份域扇区的记录数据存储到初始化索引值位置指示的第一个数据记录区域,索引值加1;
22.最后将所述备份域扇区的记录数据擦除。
23.作为本发明的进一步改进,所述记录数据的存储过程包括:
24.根据待存储的用户数据计算相应的校验码,与待存储的所述用户数据共同作为记录数据保存在所述数据记录区域或备份域扇区;
25.若存储的所述数据记录区域对应的索引值小于最大值,则将记录数据保存到所述数据记录区域后,索引值加1继续执行该索引值指向的数据记录区域内的数据保存;
26.若存储的数据记录区域对应的索引值等于最大值,则将记录数据保存到最大索引值指向的数据记录区域后,擦除备份域扇区的数据;
27.若存储的数据记录区域对应的索引值大于最大值,将该数据保存到备份域扇区,并擦除所有所述数据存储扇区内的记录数据,同时初始化索引值,并使备份域扇区的数据保存到该索引值指向的所述数据记录区域。
28.本发明还提供了一种嵌入式系统数据掉电数据恢复方法,包括:
29.设备上电,初始化索引值,使索引指针指向第一个所述数据记录区域,并使所述索引值逐次加1,移动所述索引指针依次读取并校验各所述数据记录区域的记录数据;
30.过程中,若所有所述数据记录区域的记录数据都校验成功,则将索引指针指向备份域扇区;
31.若所述备份域扇区的记录数据校验成功,则擦除所有所述数据记录区域的记录数据,将所述备份域扇区的记录数据保存到初始化索引值对应的数据记录区域,以该记录数据完成掉电数据恢复;
32.若所述备份域扇区的记录数据校验失败,则以所述索引指针指向的最后一个所述数据记录区域的记录数据完成掉电数据恢复,并将索引指针指向所述备份域扇区;
33.过程中,若任一所述数据记录区域的记录数据校验失败,则判断索引位置是否为初始化索引值,如果不是,则将索引指针指向该索引位置减1后的所述数据记录区域,以该所述数据记录区域的记录数据完成掉电数据恢复;
34.如果是,则将所述索引指针指向备份域扇区,读取并校验所述备份域扇区的记录数据;
35.若所述备份域扇区的记录数据校验成功,则将所述备份域扇区的记录数据保存到初始化索引值对应的数据记录区域,并以该记录数据完成掉电数据恢复;
36.若所述备份域扇区的记录数据校验失败,则将默认数据加载到所述初始化索引值对应的所述数据记录区域内,以默认数据完成掉电数据恢复。
37.作为本发明的进一步改进,所述记录数据包括用户数据和校验码;
38.读取并校验所述记录数据时,先将所述用户数据和校验码一并读取出来,在通过校验码判断所述用户数据的完整性。
39.与现有技术相比,本发明的有益效果为:
40.本发明通过将flash设置成若干个数据存储扇区和一个备份域扇区,每个数据存储扇区内设有多个数据记录区域,每个数据记录区域内可以存储一条记录数据,从而延迟了flash内擦除的时间周期,提高了使用寿命,并通过设置数据存储卷绕加备份的方法,使得在设备掉电重启后仍能恢复到掉电前的功能状态,确保产品的正常工作。
41.本发明的掉电数据恢复方法逻辑清晰,在设备第一次启动或掉电重启时,能够精确获取正确的掉电保存数据,并使设备后续运行过程可正常保存数据。
附图说明
42.图1为本发明一种实施例公开的嵌入式系统数据存储结构示意图;
43.图2为本发明一种实施例公开的嵌入式系统掉电数据恢复流程图;
44.图3为本发明一种实施例公开的嵌入式系统数据存储结构的数据保存流程图;
45.图4为本发明一种实施例公开的嵌入式系统数据存储结构的数据读取和校验流程;
46.图5为本发明一种实施例公开的设备掉电发生在数据存储卷绕时的流程图。
具体实施方式
47.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
48.下面结合附图对本发明做进一步的详细描述:
49.如图1所示,本发明提供的一种嵌入式系统数据存储结构,包括:flash存储器和索引指针;
50.其中,
51.(1)flash存储器,根据芯片规格不同,内部设有不同数量的扇区,将部分扇区用于掉电数据存储,设置成多个数据存储扇区和一个备份域扇区,每个数据存储扇区内设置多个数据记录区域;
52.每个数据记录区域存储一条记录数据;
53.当数据记录区域存满时,将下一条记录数据暂存至备份域扇区,将所有数据记录区域的记录数据擦除后,再将备份域扇区的记录数据存储至数据记录区域;
54.如:将flash存储器中的k个扇区用作数据存储扇区和一个扇区用作备份域扇区,即k+1个扇区用作掉电数据存储功能使用,每个数据存储扇区内设有多个数据记录区域,如每个数据存储扇区内设有n个数据记录区域,其中k、n值越大,flash擦写的间隔时间就越
长,使得数据存储卷绕的周期变长;擦除间隔时间长,flash的寿命越长。例如一般flash的一个扇区为4096个字节,当一条记录数据的大小为100字节时,每个扇区内可以存储40条记录数据。当然记录数据的数量可以根据记录数据的大小进行不同的设置。
55.(2)在ram内设置索引指针,针对索引指针的指示位置设置不同的索引值;索引指针,用于:
56.根据索引值指向数据记录区域或备份域扇区;
57.在不同的数据记录区域之间上下移动,进行记录数据存储和读取的索引。
58.进一步的,
59.开始时,索引指针从初始化索引值指示的位置指向第一个数据记录区域,向该数据记录区域存储记录数据;
60.存储完成后,索引值加1,索引指针指向下一数据记录区域,向该数据记录区域存储记录数据,直至存储完最后一个索引值指示的数据记录区域。
61.当所有数据存储扇区均已存储记录数据,下一次进行记录数据需要存储时,将索引值转至备份域扇区,包括:
62.1)将记录数据存储到备份域扇区;
63.2)将数据存储扇区内的所有记录数据擦除;
64.3)将备份域扇区的记录数据存储到初始化索引值位置指示的第一个数据记录区域,索引值加1;
65.4)最后将备份域扇区的记录数据擦除。
66.例如:
67.将索引指针的初始位置设置为0,设备第一次上电后索引指针从索引值为0的位置指向第一个数据记录区域内开始存储数据,存储完第一条记录数据后,索引值加1,即索引值1的位置指向的第二个数据记录区域内存储数据,直至存储完最后一个索引值(index=max)指向的最后一个数据记录区的数据,此时索引值不再进行加1处理,而是转到备份域地址。
68.当下次再进行存储数据时,先将数据存储到备份域内,再将数据存储扇区内的数据擦除,然后将备份域内的数据存储到索引值0位置(index=0)指向的第一个数据记录区域内,最后将备份域内的数据擦除,此时只有数据存储扇区内的第一个数据记录区域内的第一条记录数据是完整的,其余索引指向的数据记录区域内的数据和备份域内的数据都是不完整的。之后按照上面的逻辑进行循环操作。需要说明的是,如果一条记录数据的大小与一个数据存储扇区的大小相接近时,则与传统的flash的运行情况相同,也就不适合本法的运行方法。
69.另外,
70.(1)本发明中,记录数据的具体存储过程如图3所示,包括:
71.1)根据待存储的用户数据计算相应的校验码,与待存储的用户数据共同作为记录数据保存在数据记录区域或备份域扇区;
72.2)若存储的数据记录区域对应的索引值小于最大值,则将记录数据保存到数据记录区域后,索引值加1继续执行该索引值指向的数据记录区域内的数据保存;
73.3)若存储的数据记录区域对应的索引值等于最大值,则将记录数据保存到最大索
引值指向的数据记录区域后,擦除备份域扇区的数据;
74.4)若存储的数据记录区域对应的索引值大于最大值,将该数据保存到备份域扇区,并擦除所有数据存储扇区内的记录数据,同时初始化索引值,并使备份域扇区的数据保存到该索引值指向的数据记录区域。
75.其中,记录数据包括用户数据和校验码,校验码的设置是为了保证存储用户数据的完整性,校验码可以通过不同的校验算法得到,包括但不限于常用的crc32、checksun(校验和)、异或校验等方法。
76.例如:以checksun为例,用户存储的数据是1,2,3,4,5,则用checksun方法得到的校验码为15(所有数据之和),存储时将用户数据(1,2,3,4,5)和校验码(15)作为一整条记录数据存储进去到flash的一个数据区域内;
77.(2)本发明,读取记录数据的具体过程如图4所示,包括:
78.1)根据索引指向数据记录区域对应相应的记录数据,根据记录数据内的用户数据和校验码进行数据校验;
79.2)如果校验失败,则返回错误信息;
80.3)如果校验通过,则继续下一组数据的校验。
81.其中,读取记录数据时,先将用户数据和校验码一起读取出来,并通过校验码判断数据完整性。
82.例如:对于记录过程的举例,通过校验码判断数据完整性时,先计算用户数据之和,这里就是把1,2,3,4,5累加起来,得到数值15,与读出的校验码15进行比较,如果是相等的,则说明该数据是完整的;如果读出来的用户数据是0,2,3,4,5,得到数值14,与读出来的校验码15进行比较,不相等,则说明该数据不完整。反之,如果校验码出现异常,如校验码由15变成16,读取的记录数据也会不通过。
83.如图2所示,本发明提供了一种嵌入式系统掉电数据恢复方法,包括步骤:
84.设备上电,初始化索引值,使索引指针指向第一个数据记录区域,并使索引值逐次加1,移动索引指针依次读取并校验各数据记录区域的记录数据;
85.(1)过程中,若所有数据记录区域的记录数据都校验成功,则将索引指针指向备份域扇区;
86.1)若备份域扇区的记录数据校验成功,说明在数据存储卷绕时掉电,具体为保存记录数据到备份域扇区之后,擦除前面数据记录区域的记录数据之前掉电,备份域扇区的记录数据即为用户正确的掉电保存数据;因此,擦除所有数据记录区域的记录数据,将备份域扇区的记录数据保存到初始化索引值对应的数据记录区域,以该记录数据完成掉电数据恢复;
87.2)若备份域扇区的记录数据校验失败,说明数据刚好保存到最后一个索引值指向的数据记录区域内,没有发生卷绕或者发生卷绕但把用户数据保存到备份域时掉电,导致备份域内的用户数据不完整,因此,索引指针指向的最后一个数据记录区域的记录数据即为用户正确的掉电保存数据,以该数据完成掉电数据恢复,并将索引指针指向备份域扇区;
88.(2)过程中,若任一数据记录区域的记录数据校验失败,则判断索引位置是否为初始化索引值;1)如果不是,说明掉电发生在没有数据存储卷绕的时候,则将索引指针指向该索引位置减1后的数据记录区域,该数据记录区域的记录数据即为用户正确的掉电保存数
据,以该数据记录区域的记录数据完成掉电数据恢复;
89.2)如果是,则将索引指针指向备份域扇区,读取并校验备份域扇区的记录数据;
90.①
若备份域扇区的记录数据校验成功,则设备掉电发生在卷绕的时候,具体的,掉电发生在擦除前面的数据记录区域的记录数据之后,由于数据存储扇扇区已经全部擦除,因此里面的数据都是不完整的。因此,备份域扇区的记录数据即为用户正确的掉电保存数据,将备份域扇区的记录数据保存到初始化索引值对应的数据记录区域,并以该记录数据完成掉电数据恢复;
91.②
若备份域扇区的记录数据校验失败,则设备为第一次上电运行,数据存储扇区和备份域扇区都是初始化状态,根据flash的特性,所有的数据都是0xff,相当于index为0指向的数据记录区域的位置内数据和备份区域内数据都是不完整的;此时,将默认数据加载到初始化索引值对应的数据记录区域内,以默认数据完成掉电数据恢复(设备初次上电)。
92.实施例:
93.在上述过程中掉电情况分为以下几种:
94.1、设备第一次上电运行,数据存储扇区和备份域扇区都是初始化状态,根据flash的特性,所有的数据都是0xff,相当于index为0指向的数据记录区域的位置内数据和备份区域内数据都是不完整的,此时设备采用默认参数,并且把默认参数保存到index为0指向的数据记录区域的位置内,保存完之后index+1,即index=1。
95.2、掉电发生在没有卷绕的时候,即掉电前0《index《max的情况,分为两种情况:一种是在数据存储过程中,另一种是在数据存储结束后;如当设备在存储第4条记录数据时掉电,此时index=0,1,2,3的数据校验码都是完整的,但是index=4的数据不完整,那么当设备掉电后再上电,设备会依次从index为0指向的数据记录区域位置开始读取数据,并且每从index指向的地址读取一条数据就进行完整性校验,如果校验通过则继续读取下一条数据,直到读到完整性不通过的数据,即index=4的时候,因此可以推断出设备上次掉电发生在储完第三条数据的时候,所以设备会把刚刚读取的index=3的数据作为用户正确的掉电保存数据,并且把index赋值为4,用于后续保存数据。如果当设备在存储完第4条记录数据时掉电,则当设备掉电后再上电,设备会将index=4指向的记录数据作为用户正确的掉电保存数据。
96.3、设备掉电发生在没有卷绕的时候,即掉电前index=max的情况,当设备再次上电后,依次从index=0指向的数据记录区域开始读取数据,直到index=max指向的数据记录都是完整的,然后再读取备份域扇区的数据,此时该数据完整性不通过,所以设备把index=max对应读取到的数据作为用户正确的掉电保存数据,并且把index指向备份地址用于后续保存数据。
97.4、如图5所示,设备掉电发生在卷绕的时候,因为卷绕是由一系列操作构成的,下面分别讨论每个环节掉电的情况
98.(1)掉电1#:
99.掉电发生在保存数据到备份扇区之后,擦除前面的数据存储扇区之前,此时由于数据存储扇区没有擦除,所以里面的数据都是完整的。当用户再次上电从index=0指向的数据依次读取后,所有数据都是完整的,并且备份域的数据也是完整的,此时设备只需擦除
前面的数据存储扇区内的所有数据,并把从备份域读取的数据保存到index=0指向的数据位置,相当于继续完成掉电前的卷绕工作。
100.(2)掉电2#:
101.掉电发生在擦除前面的数据存储扇区之后,将备份域数据保存到index=0的位置之前。由于数据存储扇扇区已经全部擦除,因此里面的数据都是不完整的。当设备再次上电从index=0指向的数据依次读取时发现index=0指向的数据是不完整的,然后去读取备份域的数据,并且备份域的数据是完整的,此时设备只需把从备份域读取的数据保存到index=0指向的数据记录区域位置,相当于继续完成掉电前的卷绕工作。
102.本发明的优点:
103.(1)通过将flash设置成若干个数据存储扇区和一个备份域扇区,每个数据存储扇区内设有多个数据记录区域,每个数据记录区域内可以存储一条记录数据,从而延迟了flash内擦除的时间周期,提高了使用寿命,并通过设置数据存储卷绕加备份的方法,使得在设备掉电重启后仍能恢复到掉电前的功能状态,确保产品的正常工作。
104.(2)本发明的掉电数据恢复方法逻辑清晰,在设备第一次启动或掉电重启时,能够精确获取正确的掉电保存数据,并使设备后续运行过程可正常保存数据。
105.以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1