基于MCU片内flash的数据存储方法、装置、设备及存储介质制造方法及图纸

技术编号:34411256 阅读:49 留言:0更新日期:2022-08-03 22:03
本申请公开了一种基于MCU片内flash的数据存储方法、装置、设备及存储介质。本申请通过将MCU片内的flash存储器划分成激活区和非激活区。当MCU将新生成数据或更新数据写入flash存储器,将数据的地址偏移量、数据标识和数据内容打包成数据块并按照地址顺序连续写入激活区的空白区域。当空白区域的存储单元长度不足以写入新数据块,对激活区中数据标识相同的数据块进行去重清理,保留各个数据标识对应的最新写入数据块。将最新写入数据块按照地址顺序连续写入非激活区,并在数据块完全写入后将旧非激活区转换为新激活区,通过新激活区继续写入新生成数据或更新数据,而旧激活区转换为新非激活区并进行擦除所有数据,以等待下次的数据拷贝。数据拷贝。数据拷贝。

【技术实现步骤摘要】
基于MCU片内flash的数据存储方法、装置、设备及存储介质


[0001]本申请涉及存储器
,尤其涉及一种基于MCU片内flash的数据存储方法、装置、设备及存储介质。

技术介绍

[0002]flash存储器是一种具备电子可擦除可编程性能,可快速读取数据,数据不因为断电而丢失的存储芯片。微控制器(MCU,Microcontroller Unit)片内设置有flash存储器,微控制器将各种数据快速保存至flash存储器中。
[0003]当flash存储器中某一数据发生变化时,微控制器可更新flash存储器中的数据。flash存储器的特点是数据比特只能从二进制1改写成0,当微控制器对flash存储器中的数据进行更新时,需要对数据对应存储的扇区执行擦除,再将更新后的数据写入扇区。如果微控制器频繁改写flash存储器的数据,则flash存储器需要频繁擦除和写入数据,导致数据写入效率较低,甚至会缩短flash存储器的使用寿命。

技术实现思路

[0004]本申请提供一种基于MCU片内flash的数据存储方法、装置、设备及存储介质,解决了现有技术中flash存储器中的数据更新时需要擦除对应扇区所有数据的问题,避免对flash存储器执行频繁的擦除和写入操作,提高数据写入效率,延长flash存储器的使用寿命。
[0005]第一方面,本申请提供了一种基于MCU片内flash的数据存储方法,包括:将flash存储器划分成两个存储区,将两个存储区分别设置为激活区和非激活区,每个存储区中各个存储单元的地址为连续地址;根据所述激活区中空白区域的起始地址,将各个待写入数据的数据块连续写入所述空白区域,所述数据块包括地址偏移量、数据标识和数据内容;当所述空白区域的存储单元长度小于所述待写入数据对应的地址偏移量时,确定所述激活区中各个数据标识对应的最新写入数据块,并将所述最新写入数据块连续写入所述非激活区;将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。
[0006]第二方面,本申请提供了一种基于MCU片内flash的数据存储装置,包括:区域划分模块,被配置为将flash存储器划分成两个存储区,将两个存储区分别设置为激活区和非激活区,每个存储区中各个存储单元的地址为连续地址;数据写入模块,被配置为根据所述激活区中空白区域的起始地址,将各个待写入数据的数据块连续写入所述空白区域,所述数据块包括地址偏移量、数据标识和数据内容;数据转移模块,被配置为当所述空白区域的存储单元长度小于所述待写入数据对应的地址偏移量时,确定所述激活区中各个数据标识对应的最新写入数据块,并将所述最
新写入数据块连续写入所述非激活区;区域转换模块,被配置为将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。
[0007]第三方面,本申请提供了一种基于MCU片内flash的数据存储设备,包括:一个或多个处理器;存储装置,存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的基于MCU片内flash的数据存储方法。
[0008]第四方面,本申请提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如第一方面所述的基于MCU片内flash的数据存储方法。
[0009]本申请通过将MCU片内的flash存储器划分成两个存储区,其中一个存储区作为激活区,另一个作为非激活区。当MCU将新生成的数据或者更新的数据写入flash存储器时,将数据的地址偏移量、数据标识和数据内容打包成数据块并按照地址顺序连续写入激活区的空白区域。当激活区的存储空间不足以写入新的数据块时,对激活区中存在重复数据标识的数据块进行去重清理,以保留各个数据标识对应的最新写入数据块。将最新写入数据块按照地址顺序连续写入非激活区,并在数据块完全写入后将旧的非激活区转换为新的激活区,以通过新的激活区继续写入新生成的数据或更新的数据,而旧的激活区则转换为新的非激活区并进行擦除所有数据,以等待下次的数据拷贝。通过上述技术手段,不管MCU当前写入flash存储器的数据为新生成的数据还是更新的数据,都会存放至激活区的空白区域,避免了因数据更新对flash存储器进行频繁擦除和写入的操作,有效提高了数据写入效率,延长flash存储器的使用寿命。通过清理一些重复过时的无效数据,以及时腾出flash存储器的存储空间,保证flash存储器能够持续写入数据。在激活区的最新写入数据块未完全写入非激活区之前,不会擦除激活区中的数据,因此即使再将激活区的最新写入数据块拷贝至非激活区时MCU出现掉电等意外不会导致数据丢失,降低数据丢失风险,提高了flash存储器的存储可靠性。
附图说明
[0010]图1是本申请实施例提供的一种基于MCU片内flash的数据存储方法的流程图;图2是本申请实施例提供的设置激活区和非激活区的流程图;图3是本申请实施例提供的待写入数据写入前后的激活区的示意图;图4是本申请实施例提供的激活区中数据块地址的示意图;图5是本申请实施例提供的将数据写入空白区域的流程图;图6是本申请实施例提供的保留各个数据标识的最新写入数据块的流程图;图7是本申请实施例提供的从激活区头部开始遍历各个数据块的起始地址的流程图;图8是本申请实施例提供的flash存储器去重清理前后的示意图;图9是本申请实施例提供的上电后对激活区进行去重清理的流程图;图10是本申请实施例提供的读取激活区数据的流程图;图11是本申请实施例提供的一种基于MCU片内flash的数据存储装置的结构示意
图;图12是本申请实施例提供的一种基于MCU片内flash的数据存储设备的结构示意图。
具体实施方式
[0011]为了使本申请的目的、技术方案和优点更加清楚,下面结合附图对本申请具体实施例作进一步的详细描述。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部内容。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
[0012]本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于MCU片内flash的数据存储方法,其特征在于,包括:将flash存储器划分成两个存储区,将两个存储区分别设置为激活区和非激活区,每个存储区中各个存储单元的地址为连续地址;根据所述激活区中空白区域的起始地址,将各个待写入数据的数据块连续写入所述空白区域,所述数据块包括地址偏移量、数据标识和数据内容;当所述空白区域的存储单元长度小于所述待写入数据对应的地址偏移量时,确定所述激活区中各个数据标识对应的最新写入数据块,并将所述最新写入数据块连续写入所述非激活区;将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。2.根据权利要求1所述的基于MCU片内flash的数据存储方法,其特征在于,所述将两个存储区分别设置为激活区和非激活区,包括:读取每一所述存储区的头部两个存储单元的内容,将头部两个存储单元存储有预设激活标识的存储区设置为所述激活区;当两个所述存储区的头部两个存储单元均未存储所述激活标识,则将预设的激活标识写入任一存储区的头部两个存储单元,以将对应存储区设置为所述激活区,并将另一存储区设置为所述非激活区。3.根据权利要求1所述的基于MCU片内flash的数据存储方法,其特征在于,所述根据所述激活区中空白区域的起始地址,将各个待写入数据连续写入所述空白区域,包括:将所述激活区中各个数据块的地址偏移量和所述激活区的第三个存储单元的地址累加,得到所述空白区域的起始地址;根据所述待写入数据的数据内容的长度,确定所述待写入数据的数据块的地址偏移量;将所述地址偏移量以及所述待写入数据的数据标识和数据内容,依次写入所述空白区域的起始地址以及所述地址偏移量对应的后续多个连续地址的存储单元,得到所述待写入数据的数据块;根据所述空白区域的起始地址和所述地址偏移量,更新所述空白区域的起始地址。4.根据权利要求1所述的基于MCU片内flash的数据存储方法,其特征在于,所述空白区域的存储单元长度小于所述待写入数据对应的地址偏移量,包括:所述空白区域的起始地址加上所述待写入数据对应的地址偏移量再减一的值大于所述激活区尾部的存储单元的地址;或,所述激活区尾部的存储单元的地址与所述空白区域的起始地址的差值小于所述待写入数据对应的地址偏移量。5.根据权利要求3所述的基于MCU片内flash的数据存储方法,其特征在于,所述方法还包括:根据所述空白区域的起始地址和所述激活区尾部的存储单元的地址,确定所述空白区域的存储单元长度;根据所述空白区域的存储单元长度,确定所述空白区域的空间占比,并将所述空间占比与预设的占比阈值进行比较;
当所述空间占比小于或等于预设的占比阈值时,确定所述激活区中各个数据标识对应的最新写入数据块,并将所述最新写入数据块连续写入所述非激活区;将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。6.根据权利要求3所述的基于MCU片内flash的数据存储方法,其特征在于,所述方法还包括:获取待读取数据的目标数据标识,从所述激活区头部开始遍历...

【专利技术属性】
技术研发人员:陈俊立董文强李杰
申请(专利权)人:广州万协通信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1