CN114840449B - 基于MCU片内flash的数据存储方法、装置、设备及存储介质 - Google Patents

基于MCU片内flash的数据存储方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN114840449B
CN114840449B CN202210756642.9A CN202210756642A CN114840449B CN 114840449 B CN114840449 B CN 114840449B CN 202210756642 A CN202210756642 A CN 202210756642A CN 114840449 B CN114840449 B CN 114840449B
Authority
CN
China
Prior art keywords
data
area
address
active area
data block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210756642.9A
Other languages
English (en)
Other versions
CN114840449A (zh
Inventor
陈俊立
董文强
李�杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Wise Security Technology Co Ltd
Original Assignee
Guangzhou Wise Security Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Wise Security Technology Co Ltd filed Critical Guangzhou Wise Security Technology Co Ltd
Priority to CN202210756642.9A priority Critical patent/CN114840449B/zh
Publication of CN114840449A publication Critical patent/CN114840449A/zh
Application granted granted Critical
Publication of CN114840449B publication Critical patent/CN114840449B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

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

Description

基于MCU片内flash的数据存储方法、装置、设备及存储介质
技术领域
本申请涉及存储器技术领域,尤其涉及一种基于MCU片内flash的数据存储方法、装置、设备及存储介质。
背景技术
flash存储器是一种具备电子可擦除可编程性能,可快速读取数据,数据不因为断电而丢失的存储芯片。微控制器(MCU,Microcontroller Unit)片内设置有flash存储器,微控制器将各种数据快速保存至flash存储器中。
当flash存储器中某一数据发生变化时,微控制器可更新flash存储器中的数据。flash存储器的特点是数据比特只能从二进制1改写成0,当微控制器对flash存储器中的数据进行更新时,需要对数据对应存储的扇区执行擦除,再将更新后的数据写入扇区。如果微控制器频繁改写flash存储器的数据,则flash存储器需要频繁擦除和写入数据,导致数据写入效率较低,甚至会缩短flash存储器的使用寿命。
发明内容
本申请提供一种基于MCU片内flash的数据存储方法、装置、设备及存储介质,解决了现有技术中flash存储器中的数据更新时需要擦除对应扇区所有数据的问题,避免对flash存储器执行频繁的擦除和写入操作,提高数据写入效率,延长flash存储器的使用寿命。
第一方面,本申请提供了一种基于MCU片内flash的数据存储方法,包括:
将flash存储器划分成两个存储区,将两个存储区分别设置为激活区和非激活区,每个存储区中各个存储单元的地址为连续地址;
根据所述激活区中空白区域的起始地址,将各个待写入数据的数据块连续写入所述空白区域,所述数据块包括地址偏移量、数据标识和数据内容;
当所述空白区域的存储单元长度小于所述待写入数据对应的地址偏移量时,确定所述激活区中各个数据标识对应的最新写入数据块,并将所述最新写入数据块连续写入所述非激活区;
将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。
第二方面,本申请提供了一种基于MCU片内flash的数据存储装置,包括:
区域划分模块,被配置为将flash存储器划分成两个存储区,将两个存储区分别设置为激活区和非激活区,每个存储区中各个存储单元的地址为连续地址;
数据写入模块,被配置为根据所述激活区中空白区域的起始地址,将各个待写入数据的数据块连续写入所述空白区域,所述数据块包括地址偏移量、数据标识和数据内容;
数据转移模块,被配置为当所述空白区域的存储单元长度小于所述待写入数据对应的地址偏移量时,确定所述激活区中各个数据标识对应的最新写入数据块,并将所述最新写入数据块连续写入所述非激活区;
区域转换模块,被配置为将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。
第三方面,本申请提供了一种基于MCU片内flash的数据存储设备,包括:
一个或多个处理器;存储装置,存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的基于MCU片内flash的数据存储方法。
第四方面,本申请提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如第一方面所述的基于MCU片内flash的数据存储方法。
本申请通过将MCU片内的flash存储器划分成两个存储区,其中一个存储区作为激活区,另一个作为非激活区。当MCU将新生成的数据或者更新的数据写入flash存储器时,将数据的地址偏移量、数据标识和数据内容打包成数据块并按照地址顺序连续写入激活区的空白区域。当激活区的存储空间不足以写入新的数据块时,对激活区中存在重复数据标识的数据块进行去重清理,以保留各个数据标识对应的最新写入数据块。将最新写入数据块按照地址顺序连续写入非激活区,并在数据块完全写入后将旧的非激活区转换为新的激活区,以通过新的激活区继续写入新生成的数据或更新的数据,而旧的激活区则转换为新的非激活区并进行擦除所有数据,以等待下次的数据拷贝。通过上述技术手段,不管MCU当前写入flash存储器的数据为新生成的数据还是更新的数据,都会存放至激活区的空白区域,避免了因数据更新对flash存储器进行频繁擦除和写入的操作,有效提高了数据写入效率,延长flash存储器的使用寿命。通过清理一些重复过时的无效数据,以及时腾出flash存储器的存储空间,保证flash存储器能够持续写入数据。在激活区的最新写入数据块未完全写入非激活区之前,不会擦除激活区中的数据,因此即使再将激活区的最新写入数据块拷贝至非激活区时MCU出现掉电等意外不会导致数据丢失,降低数据丢失风险,提高了flash存储器的存储可靠性。
附图说明
图1是本申请实施例提供的一种基于MCU片内flash的数据存储方法的流程图;
图2是本申请实施例提供的设置激活区和非激活区的流程图;
图3是本申请实施例提供的待写入数据写入前后的激活区的示意图;
图4是本申请实施例提供的激活区中数据块地址的示意图;
图5是本申请实施例提供的将数据写入空白区域的流程图;
图6是本申请实施例提供的保留各个数据标识的最新写入数据块的流程图;
图7是本申请实施例提供的从激活区头部开始遍历各个数据块的起始地址的流程图;
图8是本申请实施例提供的flash存储器去重清理前后的示意图;
图9是本申请实施例提供的上电后对激活区进行去重清理的流程图;
图10是本申请实施例提供的读取激活区数据的流程图;
图11是本申请实施例提供的一种基于MCU片内flash的数据存储装置的结构示意图;
图12是本申请实施例提供的一种基于MCU片内flash的数据存储设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面结合附图对本申请具体实施例作进一步的详细描述。可以理解的是,此处所描述的具体实施例仅仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部内容。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
本实施例中提供的基于MCU片内flash的数据存储方法可以由基于MCU片内flash的数据存储设备执行,该基于MCU片内flash的数据存储设备可以通过软件和/或硬件的方式实现,该基于MCU片内flash的数据存储设备可以是两个或多个物理实体构成,也可以是一个物理实体构成。例如基于MCU片内flash的数据存储设备可以是MCU。MCU安装有可以执行基于MCU片内flash的数据存储方法的应用程序,因此基于MCU片内flash的数据存储设备也可以是应用程序本身。
为便于理解,本实施例以MCU为执行基于MCU片内flash的数据存储方法的主体为例,进行描述。
在一实施例中,当MCU将更新数据写入flash存储器时,需要读取出更新数据对应的原始数据所存储的扇区中所有数据,然后擦除该扇区,并将该扇区除原始数据以外的所有数据以及更新数据写入该扇区。由于读取扇区中所有数据并重新写入的操作较为复杂,导致更新数据写入flash存储器的窗口期较长,数据写入效率较低。当频繁写入更新数据时,flash存储器需要频繁擦除,会缩短flash存储器的使用寿命。为避免flash存储器出现的频繁擦除等问题,目前基于MCU片内flash的数据存储方法是将flash存储器的内容复制到内存,一定时间内数据发生多次修改后再写入flash存储器。这导致数据保存的窗口期更长,当出现微控制器出现意外断电或静电复位等突发状况时会导致数据丢失,基于MCU片内flash的数据存储的可靠性大大降低。对此,部分微控制器会放弃使用片内flash存储器存储数据,而通过外挂的带电可擦可编程只读存储器(EEPROM,Electrically ErasableProgrammable read only memory)存储数据。但外挂的EEPROM存储器成本较高,不适用于低成本的微控制器,适用性较低。
为解决上述问题,本实施例提供了一种基于MCU片内flash的数据存储方法,在不提高硬件成本的前提下,提高数据写入效率,延长flash存储器的使用寿命。
图1给出了本申请实施例提供的一种基于MCU片内flash的数据存储方法的流程图。参考图1,该基于MCU片内flash的数据存储方法具体包括:
S110、将flash存储器划分成两个存储区,将两个存储区分别设置为激活区和非激活区,每个存储区中各个存储单元的地址为连续地址。
示例性的,假设flash存储器中设置有N个扇区,每个扇区包括K个存储单元,每个扇区中的相邻存储单元的地址是连续的,相邻扇区的地址也是连续的。在该实施例中,将flash存储器均匀划分成两个存储区,一个存储区包括N/2个扇区,另一存储区也包括N/2个扇区,将前N/2个扇区作为第一存储区,将后N/2个扇区作为第二存储区,则第一存储区中存储单元的地址为0~(K* N/2-1),第二存储区中存储单元的地址为K* N/2~(K* N -1)。
在本实施例中,激活区可理解为flash存储器中用于读写数据的存储区。示例性的,MCU向flash存储器写入更新的数据或者新生成的数据时,会将该数据写入激活区中,MCU读取数据时从flash存储器的激活区中读取对应的数据内容。相反的,非激活区可理解为flash存储器中不用于读写数据的存储区,而作为激活区数据的缓存空间。示例性的,MCU可将两个存储区分别设置为激活区和非激活区,并将设置信息存储至RAM(Random AccessMemory,随机存取存储器)中,以便查询RAM中的设置信息即可得知激活区和非激活区的存储单元。当MCU对flash存储器执行读写操作时,查询RAM中设置信息确定激活区对应的存储单元,并对激活区的存储单元执行读写操作。
需说明的,MCU掉电后RAM(Random Access Memory,随机存取存储器)的内容会被清空,导致MCU在上电后无法确定激活区的存储单元。因此MCU上电后,可先设置flash存储器中的激活区和非激活区,进而对激活区进行读写操作。在一实施例中,图2是本申请实施例提供的设置激活区和非激活区的流程图。如图2所示,该设置激活区和非激活区的步骤具体包括S1101-S1102:
S1101、读取每一存储区的头部两个存储单元的内容,将头部两个存储单元存储有预设激活标识的存储区设置为激活区。
本实施例以flash存储器划分为第一存储区和第二存储区为例进行描述。读取第一存储区中地址为0和1的存储单元的内容,读取第二存储区中地址为K* N/2和K* N/2+1的存储单元的内容。如果第一存储区存储的内容为激活标识,则设置第一存储区为激活区;相反的,如果第二存储区存储的内容为激活标识,则设置第二存储区为激活区。在本实施例中,激活标识可随机设置,激活标识一般设置为0XE7E8。
S1102、当两个存储区的头部两个存储单元均未存储激活标识,则将预设的激活标识写入任一存储区的头部两个存储单元,以将对应存储区设置为激活区,并将另一存储区设置为非激活区。
示例性的,如果MCU是首次上电,第一存储区和第二存储区均未存储有内容,此时会检测出第一存储区和第二存储区均未存储激活标识。由于第一存储区和第二存储区只存在地址上的区别,这不会影响后续数据的读写操作,因此可将激活标识写入任一存储区的头部两个存储单元,以将存储有该激活标识的存储区作为激活区,而另外一个存储区则保持不变以设置为非激活区。例如,将激活标识写入地址为0和1的存储单元,以将第一存储区设置为激活区,而第二存储区自然而然成为了非激活区。
S120、根据激活区中空白区域的起始地址,将各个待写入数据的数据块连续写入空白区域,数据块包括地址偏移量、数据标识和数据内容。
在本实施例中,空白区域是指激活区中未写入内容的存储单元的组合,例如MCU首次上电后设置好的激活区,激活区的头部两个存储单元存储有激活标识,此时激活区中除了头部两个存储单元以外的存储单元均为空白区域。在本实施例中,待写入数据是指MCU当前要写入激活区的数据,待写入数据包括新生成的数据和更新的数据,其中新生成的数据可理解为激活区未存储有相同数据标识的数据,更新的数据可理解为激活区中存储有相同数据标识的数据。图3是本申请实施例提供的待写入数据写入前后的激活区的示意图。如图3所示,待写入数据的数据标识为ID1,待写入数据的数据块写入激活区前,激活区中从头部到尾部依次存储有数据标识为ID1、ID2和ID3对应的数据块。待写入数据的数据块写入激活区后,是第2次将ID1对应的数据块写入激活区中,待写入数据相当于激活区中的数据标识为ID1的数据块的更新数据。由于第2次写入ID1对应的数据块是写入激活区的空白区域,对于flash存储器来说,将数据写入未存储有内容的存储单元时,无需对整个扇区进行擦除处理。因此本实施例将更新数据写入空白区域时不会触发对flash存储器的擦除操作,解决了flash存储器因数据频繁更新而出现的频繁擦除问题,延长了flash存储器的使用寿命。除此之外,更新的数据写入空白区域所需的窗口期较短,提高了数据写入效率。
在本实施例中,待写入数据的数据标识可表征对应数据的身份信息,如数据ID。数据块可理解为待写入数据保存于激活区中的文件形式,地址偏移量是指数据块在激活区中占用的存储单元的长度,数据块的数据内容是指待写入数据的数据内容。数据块在激活区的存储单元的地址为连续地址,数据块对应的存储单元按照地址偏移量、数据标识和数据内容的顺序存储数据块。对于相邻写入空白区域的待写入数据,相邻的待写入数据的数据块的存储单元的地址也为连续地址。
在该实施例中,一个存储单元的长度为一个字节,地址偏移量所需的存储单元的长度为2个字节,数据标识所需的存储单元的长度为2个字节,数据内容所需的存储单元的长度为1-65535个字节,其在接收到待写入数据时可确定对应数据内容的长度。数据块的地址偏移量等于数据内容的长度加上4个字节。由于相邻的两个数据块的存储单元的地址是连续的,因此上一个数据块的地址偏移量加上数据块的初始地址等于下一数据块的初始地址,其中数据块的初始地址是指存储该数据块的第一个存储单元的地址。示例性的,图4是本申请实施例提供的激活区中数据块地址的示意图。如图4所示,假设第一存储区为激活区,数据块1和数据块2分别为第一个和第二个写入激活区的数据块,即数据块i对应为第i个写入激活区的数据块。地址为0和1的存储单元存储有激活标识,地址为2和3的存储单元存储有数据块0的地址偏移量k1,地址为4和5的存储单元存储有数据块1的数据标识,地址为6到k1+1的存储单元存储有数据块1的数据内容。其中数据块1的数据内容的长度为k1-4,数据块1的初始地址为2,数据块2的初始地址为k1+2。地址为k1+2和k1+3的存储单元存储有数据块2的地址偏移量,以此类推数据块2和数据块i的存储单元的地址。
在一实施例中,图5是本申请实施例提供的将数据写入空白区域的流程图。如图5所示,该数据写入空白区域的步骤具体包括S1201-S1204:
S1201、将激活区中各个数据块的地址偏移量和激活区的第三个存储单元的地址累加,得到空白区域的起始地址。
示例性的,从激活区的第三个存储单元中读取到第一个数据块的地址偏移量,将该地址偏移量和激活区的第三个存储单元的地址累加,得到第二个数据块的初始地址,并从该初始地址以及初始地址加一的存储单元中读取到第二个数据块的地址偏移量,根据该地址偏移量和第二数据块的初始地址,可确定第三个数据块的初始地址。归纳总结,假设数据块i的地址偏移量为ki,第一个数据块的初始地址为p,则数据块i+1的初始地址为p+(k1+k2+…ki)。基于该计算公式可得到激活区中各个数据块的地址偏移量和初始地址。进一步的,如果数据块i+1的初始地址以及初始地址加一的存储单元未读取到内容,则可确定数据块i为激活区中最后一个数据块,并将数据块i+1的初始地址作为第一空白区的初始地址。
参考图4,从地址为2的存储单元中读取到数据块1的地址偏移量k1,则可确定出数据块2的初始地址为k1+2,并从地址为k1+2和k1+3的存储单元中读取数据块2的地址偏移量k2,可确定出数据块3的初始地址为k1+k2+2。依次类推,假设数据块i的偏移量为ki,数据块i为激活区的最后一个数据块,则空白区域的初始地址为2+(k1+k2+…ki)。相反的,如果第二存储区为激活区,则对应第一个数据块的起始地址为K* N/2+2,空白区域的初始地址为K* N/2+2+(k1+k2+…ki)。因此无论哪一存储区为激活区,都可根据当前激活区的第一个数据块的起始地址以及各个数据块的地址偏移量,确定出空白区域的初始地址。
S1202、根据待写入数据的数据内容的长度,确定待写入数据的数据块的地址偏移量。
示例性的,MCU接收到待写入数据时,可确定对应数据内容的长度,将数据内容的长度加上地址偏移量的长度和数据标识的长度,可得到地址偏移量。假设数据内容的长度为L个字节,地址偏移量的长度为2个字节,数据标识的长度为2个字节,则地址偏移量为L+4。
S1203、将地址偏移量以及待写入数据的数据标识和数据内容,依次写入空白区域的起始地址以及地址偏移量对应的后续多个连续地址的存储单元,得到待写入数据的数据块。
参考图4,空白区域的起始地址为(k1+k2+…ki)-i,则将地址偏移量L+4写入地址为(k1+k2+…ki)-i和(k1+k2+…ki)-i+1的存储单元中,将数据ID写入地址为(k1+k2+…ki)-i+2和(k1+k2+…ki)-i+3的存储单元中,将数据内容写入地址为(k1+k2+…ki)-i+4到(k1+k2+…ki)-i+L+3的存储单元中。
S1204、根据空白区域的起始地址和地址偏移量,更新空白区域的起始地址。
示例性的,激活区写入新数据块后,空白区域相应更新,当前的空白区域的起始地址更新为上一时刻的空白区域的起始地址与该新数据块的地址偏移量的总和。在将地址偏移量为L+4的数据块i+1写入空白区域后,空白区域的起始地址更新为(k1+k2+…ki)-i+L+4。
在该实施例中,将当前空白区域的起始地址存储至RAM中,以便MCU对激活区进行写操作时,只用从RAM中读取空白区域的起始地址,而无需重新推算空白区域的起始地址,有效缩短数据的写入窗口期。需说明的,在MCU掉电后,RAM中的信息会被清除,因此MCU上电确定激活区后,可先根据激活区中第一个数据块的起始地址和各个数据块的地址偏移量,确定出空白区域的起始地址,并将该起始地址存储至RAM中。
S130、当空白区域的存储单元长度小于待写入数据对应的地址偏移量时,确定激活区中各个数据标识对应的最新写入数据块,并将最新写入数据块连续写入非激活区。
其中,空白区域的存储单元长度可理解为激活区的剩余存储空间的大小。如果空白区域的存储单元长度小于待写入数据的数据块的地址偏移量,则表明激活区不足以存储该待写入数据的数据块,因此可对激活区中相同数据标识的数据块进行去重清理,以腾出激活区的存储空间以缓存更多的数据。相反的,如果空白区域的存储单元长度大于或等于待写入数据的数据块的地址偏移量,则表明激活区足以存储该待写入数据的数据块,因此可将待写入数据的数据块写入空白区域。
在一实施例中,当空白区域的起始地址与待写入数据对应的地址偏移量的累加值大于激活区尾部的存储单元的地址减一时,可确定空白区域的存储单元长度小于所述待写入数据的地址偏移量。示例性的,当前时刻的空白区域的起始地址与待写入数据的数据块的地址偏移量的累加值为下一时刻空白区域的起始地址,该累加值减一为该待写入数据的数据块的结束地址,如果数据块的结束地址超过激活区的结束地址,则表明激活区不能完全存放该数据块。其中,数据块的结束地址为存储数据块的最后一个存储单元的地址,激活区的结束地址即为激活区尾部的存储单元的地址。在另一实施例中,将激活区的结束地址减去空白区域的起始地址,即可得到空白区域的存储单元长度,如果空白区域的存储单元长度小于数据块的地址偏移量,则可确定激活区不能完全存放该数据块。
参考图3,激活区中同一数据标识可对应多个数据块,而最新写入数据块中的数据内容才是对应数据标识的准确数据内容,MCU读取数据时也是读取对应数据标识的最新写入数据块的数据内容,因此前面写入的数据块已变成了无效数据。为腾出激活区的存储空间,可借助MCU其他存储器以及非激活区对各个数据标识的无效数据进行清理,并保留各个数据标识的最新写入数据块。在该实施例中,图6是本申请实施例提供的保留各个数据标识的最新写入数据块的流程图。如图6所示,该保留各个数据标识的最新写入数据块的步骤具体包括S1301-S1303:
S1301、从激活区头部开始遍历各个数据块的起始地址,根据各个数据块的起始地址确定各个数据块的数据标识。
由上述内容可知,数据块的起始地址和起始地址加一的存储单元存储有对应数据块的地址偏移量,起始地址加二和起始地址加三的存储单元存储有对应数据块的数据标识,起始地址加四和起始地址加该地址偏移量再减一的存储单元存储有对应数据块的数据内容。而激活区的第一个数据块的起始地址是已知的,因此从激活区头部可获取到第一个数据块的地址偏移量,并根据该地址偏移量推算出后续数据块的初始地址以及地址偏移量,进而可根据各个数据块的初始地址读取各个数据块的数据标识和数据内容。
在该实施例中,图7是本申请实施例提供的从激活区头部开始遍历各个数据块的起始地址的流程图。如图7所示,该从激活区头部开始遍历各个数据块的起始地址的步骤具体包括S13011-S13012:
S13011、确定激活区的第三个存储单元的地址为首个数据块的起始地址,并从第三个存储单元中读取首个数据块的地址偏移量。
示例性的,若激活区为第一存储区,则确定首个数据块的起始地址为2,并从地址为2和3的存储单元中读取到首个数据块的地址偏移量。若激活区为第二存储区,则确定首个数据块的起始地址为K* N/2+2,并从地址为K* N/2+3的存储单元中读取到首个数据块的地址偏移量。
S13012、根据上一数据块的地址偏移量和起始地址,对应确定下一数据块的起始地址,并从下一数据块的起始地址对应的存储单元中获取对应的地址偏移量。
本实施例以激活区为第一存储区为例进行描述。参考图4,从地址为2和3的存储单元中读取到数据块1的地址偏移量k1后,确定出数据块2的起始地址为k1+2,并从地址为k1+2和k1+3的存储单元中读取到数据块2的地址偏移量k2。以此类推,可确定出激活区中各个数据块的起始地址。
S1302、根据同一数据标识对应的数据块的起始地址,确定最靠近激活区尾部的数据块为对应数据标识的最新写入数据块。
参考图3,对于数据标识相同的数据块,新数据块的起始地址大于旧数据块的起始地址,因此可比较数据标识相同的数据块的起始地址,确定起始地址最大的数据块为对应数据标识的最新写入数据块。
在该实施例中,从激活区头部开始依次读取各个数据标识对应的数据块的数据内容,当读取到重复数据标识的数据块的数据内容时,将该数据内容覆盖先前读取到的对应数据标识的数据内容,直至读取到最后一个数据块的数据内容。例如,读取数据标识为ID1的数据块1的数据内容后,读取到数据标识为ID1的数据块i的数据内容后,将数据块i的数据内容覆盖数据块1的数据内容。
S1303、将各个数据标识的最新写入数据块,依次写入非激活区的头部第三个存储单元以及后续连续的存储单元。
以非激活区为第二存储区为例进行描述。根据读取到的各个数据标识的数据内容,按照数据块的文件格式连续写入地址为K* N/2+2~K* N-1的存储单元中。
在该实施例中,将各个数据标识从小到大进行排序,按照数据标识从小到大的顺序依次将各个数据标识对应的最新写入数据块写入K* N/2+2~K* N-1的存储单元中。示例性的,图8是本申请实施例提供的flash存储器去重清理前后的示意图。如图8所示,flash存储器的第一存储区为激活区,第二存储区为非激活区。去重清理前,第一存储区从头部到尾部依次存储有数据块1到数据块6,数据块1到数据块6的数据标识依次为ID1、ID3、ID1、ID2、ID1、ID2。去重清理后,第二存储区从头部到尾部依次存储有数据块5、数据块6和数据块2。
S140、将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。
示例性的,将各个数据标识的最新写入数据块写入非激活区后,非激活区具有充足的存储空间以支持写入新的数据,而且存储有各个数据标识的最新数据内容以支持读取数据,即此时非激活区具备了激活区的功能。因此可将激活标识写入旧的非激活区的头部两个存储单元,以将旧的非激活区设置为新的激活区,以便后续对新的激活区进行读写操作。进一步的,擦除旧的激活区中的激活标识以及数据块,以将旧的激活区设置为新的非激活区,以便后续通过新的非激活区转移各个数据标识的最新写入数据块。在本实施例中,如果在去重清理过程中MCU出现断电,断电复位后旧激活区的数据也不会丢失,可擦除非激活区后再重新执行去重清理过程,实现激活区和非激活区转换,保证数据存储的可靠性。
在一实施例中,在MCU上电确定激活区和空白区域后,可先确定检查激活区的剩余存储空间。如果剩余存储空间足够大则可以对该激活区进行读写操作,如果剩余存储空间较小则可以对激活区中相同数据标识的数据块进行去重清理,以保证上电后的激活区有充足的存储空间缓存数据。在该实施例中,图9是本申请实施例提供的上电后对激活区进行去重清理的流程图。如图9所示,该上电后对激活区进行去重清理的步骤具体包括S210-S240:
S210、根据空白区域的起始地址和激活区尾部的存储单元的地址,确定空白区域的存储单元长度。
示例性的,空白区域可看作激活区的剩余存储空间,将激活区尾部的存储单元的地址减去空白区域的起始地址,得到空白区域的存储单元长度,即得到激活区的剩余存储空间的大小。
S220、根据空白区域的存储单元长度,确定空白区域的空间占比,并将空间占比与预设的占比阈值进行比较。
示例性的,将空白区域的存储单元长度比上激活区的存储单元长度,得到空白区域的空间占比,即得到激活区的剩余存储空间与总存储空间的占比。
S230、当空间占比小于或等于预设的占比阈值时,确定激活区中各个数据标识对应的最新写入数据块,并将最新写入数据块连续写入非激活区。
示例性的,占比阈值可看作激活区的剩余存储空间不足时的占比。当空间占比小于或等于该占比阈值时,表明激活区的剩余存储空间不足,因此MCU要对激活区进行去重清理。相反的,当空间占比大于该占比阈值时,表明激活区的剩余存储空间还充足,因此MCU无需对激活区进行去重清理,而等到激活区存满数据块时再对其进行去重清理。在该实施例中,对激活区中相同数据标识的数据块进行去重清理的步骤具体可参考步骤S130。
S240、将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。
示例性的,该步骤具体可参考步骤S140。
在一实施例中,由于MCU会将部分数据的旧内容和新内容均写入激活区中,因此激活区中同一数据ID对应多个数据块中的数据内容不同。当MCU对激活区进行读操作时,读取激活区中对应数据ID的最新写入数据块的数据内容,以保证数据读取的准确性。在该实施例中,图10是本申请实施例提供的读取激活区数据的流程图。如图10所示,该读取激活区数据的步骤具体包括S310-S330:
S310、获取待读取数据的目标数据标识,从激活区头部开始遍历各个数据块的起始地址。
在本实施例中,待读取数据可理解为MCU准备从激活区中读取的目标数据标识的最新数据内容,目标数据标识即为该数据的ID。在该实施例中,从激活区头部遍历各个数据块的起始地址的步骤可参考步骤S13011-S13012。
S320、根据各个数据块的起始地址确定各个数据块的数据标识,并确定出数据标识与目标数据标识相同的候选数据块。
由上述内容可知,从数据块的起始地址加二和起始地址加三的存储单元中读取对应数据块的数据标识,将各个数据块的数据标识与目标数据标识进行比较,确定出候选数据块。
S330、根据候选数据块的起始地址,读取起始地址最大的候选数据块的数据内容。
由上述内容可知,起始地址最大的数据块为对应数据标识的最新写入数据块,最新写入数据块的数据内容为对应数据标识的最新数据内容。因此读取起始地址最大的候选数据块的数据内容即可得到目标数据标识的最新数据内容。
在该实施例中,从激活区头部开始依次读取各个数据块的数据标识,如果从数据块中读取到与目标数据标识相同的数据标识,则读取并保存该数据块的数据内容,并继续读取下一数据块的数据标识。当又一次从数据块中读取到与目标数据标识相同的数据标识,则读取该数据块的数据内容以覆盖上一次保存的数据内容。当遇到空白区域,可确定当前保存的数据内容为目标数据标识的最新数据内容,并将该最新数据内容返回。
综上,本申请实施例提供的基于MCU片内flash的数据存储方法,通过将MCU片内的flash存储器划分成两个存储区,其中一个存储区作为激活区,另一个作为非激活区。当MCU将新生成的数据或者更新的数据写入flash存储器时,将数据的地址偏移量、数据标识和数据内容打包成数据块并按照地址顺序连续写入激活区的空白区域。当激活区的存储空间不足以写入新的数据块时,对激活区中存在重复数据标识的数据块进行去重清理,以保留各个数据标识对应的最新写入数据块。将最新写入数据块按照地址顺序连续写入非激活区,并在数据块完全写入后将旧的非激活区转换为新的激活区,以通过新的激活区继续写入新生成的数据或更新的数据,而旧的激活区则转换为新的非激活区并进行擦除所有数据,以等待下次的数据拷贝。通过上述技术手段,不管MCU当前写入flash存储器的数据为新生成的数据还是更新的数据,都会存放至激活区的空白区域,避免了因数据更新对flash存储器进行频繁擦除和写入的操作,有效提高了数据写入效率,延长flash存储器的使用寿命。通过清理一些重复过时的无效数据,以及时腾出flash存储器的存储空间,保证flash存储器能够持续写入数据。在激活区的最新写入数据块未完全写入非激活区之前,不会擦除激活区中的数据,因此即使再将激活区的最新写入数据块拷贝至非激活区时MCU出现掉电等意外不会导致数据丢失,降低数据丢失风险,提高了flash存储器的存储可靠性。
在上述实施例的基础上,图11为本申请实施例提供的一种基于MCU片内flash的数据存储装置的结构示意图。参考图11,本实施例提供的基于MCU片内flash的数据存储装置具体包括:区域划分模块41、数据写入模块42、数据转移模块43和区域转换模块44。
其中,区域划分模块,被配置为将flash存储器划分成两个存储区,将两个存储区分别设置为激活区和非激活区,每个存储区中各个存储单元的地址为连续地址;
数据写入模块,被配置为根据激活区中空白区域的起始地址,将各个待写入数据的数据块连续写入空白区域,数据块包括地址偏移量、数据标识和数据内容;
数据转移模块,被配置为当空白区域的存储单元长度小于待写入数据对应的地址偏移量时,确定激活区中各个数据标识对应的最新写入数据块,并将最新写入数据块连续写入非激活区;
区域转换模块,被配置为将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。
在上述实施例的基础上,区域划分模块包括:第一划分单元,被配置为读取每一存储区的头部两个存储单元的内容,将头部两个存储单元存储有预设激活标识的存储区设置为激活区;第二划分单元,被配置为当两个存储区的头部两个存储单元均未存储激活标识,则将预设的激活标识写入任一存储区的头部两个存储单元,以将对应存储区设置为激活区,并将另一存储区设置为非激活区。
在上述实施例的基础上,数据写入模块包括:空白区域确定单元,被配置为将激活区中各个数据块的地址偏移量和激活区的第三个存储单元的地址累加,得到空白区域的起始地址;地址偏移量确定单元,被配置为根据待写入数据的数据内容的长度,确定待写入数据的数据块的地址偏移量;数据块写入单元,被配置为将地址偏移量以及待写入数据的数据标识和数据内容,依次写入空白区域的起始地址以及地址偏移量对应的后续多个连续地址的存储单元,得到待写入数据的数据块;空白区域更新模块,被配置为根据空白区域的起始地址和地址偏移量,更新空白区域的起始地址。
在上述实施例的基础上,空白区域的存储单元长度小于待写入数据对应的地址偏移量,包括:
空白区域的起始地址加上待写入数据对应的地址偏移量再减一的值大于激活区尾部的存储单元的地址;或,
激活区尾部的存储单元的地址与空白区域的起始地址的差值小于待写入数据对应的地址偏移量。
在上述实施例的基础上,数据存储装置还包括:剩余空间确定模块,被配置为根据空白区域的起始地址和激活区尾部的存储单元的地址,确定空白区域的存储单元长度;空间比较模块,被配置为根据空白区域的存储单元长度,确定空白区域的空间占比,并将空间占比与预设的占比阈值进行比较;初始数据转移模块,被配置为当空间占比小于或等于预设的占比阈值时,确定激活区中各个数据标识对应的最新写入数据块,并将最新写入数据块连续写入非激活区;初始区域转换模块,被配置为将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。
在上述实施例的基础上,数据存储装置还包括:目标数据标识获取模块,被配置为获取待读取数据的目标数据标识,从激活区头部开始遍历各个数据块的起始地址;候选数据块确定模块,被配置为根据各个数据块的起始地址确定各个数据块的数据标识,并确定出数据标识与目标数据标识相同的候选数据块;数据内容读取模块,被配置为根据候选数据块的起始地址,读取起始地址最大的候选数据块的数据内容。
在上述实施例的基础上,数据转移模块包括:数据块遍历单元,被配置为从激活区头部开始遍历各个数据块的起始地址,根据各个数据块的起始地址确定各个数据块的数据标识;最新数据块确定单元,被配置为根据同一数据标识对应的数据块的起始地址,确定起始地址最大的数据块为对应数据标识的最新写入数据块;最新数据块写入单元,被配置为将各个数据标识的最新写入数据块,依次写入非激活区的头部第三个存储单元以及后续连续的存储单元。
在上述实施例的基础上,数据块遍历单元包括:首个数据块确定子单元,被配置为确定激活区的第三个存储单元的地址为首个数据块的起始地址,并从第三个存储单元中读取首个数据块的地址偏移量;数据块确定子单元,被配置为根据上一数据块的地址偏移量和起始地址,对应确定下一数据块的起始地址,并从下一数据块的起始地址对应的存储单元中获取对应的地址偏移量。
在上述实施例的基础上,区域转换模块包括:第一转换单元,被配置为将激活标识写入旧的非激活区的头部两个存储单元,以将旧的非激活区设置为新的激活区;第二转换单元,被配置为擦除旧的激活区中的激活标识以及数据块,以将旧的新激活区设置为新的非激活区。
上述,本申请实施例提供的基于MCU片内flash的数据存储装置,通过将MCU片内的flash存储器划分成两个存储区,其中一个存储区作为激活区,另一个作为非激活区。当MCU将新生成的数据或者更新的数据写入flash存储器时,将数据的地址偏移量、数据标识和数据内容打包成数据块并按照地址顺序连续写入激活区的空白区域。当激活区的存储空间不足以写入新的数据块时,对激活区中存在重复数据标识的数据块进行去重清理,以保留各个数据标识对应的最新写入数据块。将最新写入数据块按照地址顺序连续写入非激活区,并在数据块完全写入后将旧的非激活区转换为新的激活区,以通过新的激活区继续写入新生成的数据或更新的数据,而旧的激活区则转换为新的非激活区并进行擦除所有数据,以等待下次的数据拷贝。通过上述技术手段,不管MCU当前写入flash存储器的数据为新生成的数据还是更新的数据,都会存放至激活区的空白区域,避免了因数据更新对flash存储器进行频繁擦除和写入的操作,有效提高了数据写入效率,延长flash存储器的使用寿命。通过清理一些重复过时的无效数据,以及时腾出flash存储器的存储空间,保证flash存储器能够持续写入数据。在激活区的最新写入数据块未完全写入非激活区之前,不会擦除激活区中的数据,因此即使再将激活区的最新写入数据块拷贝至非激活区时MCU出现掉电等意外不会导致数据丢失,降低数据丢失风险,提高了flash存储器的存储可靠性。
本申请实施例提供的基于MCU片内flash的数据存储装置可以用于执行上述实施例提供的基于MCU片内flash的数据存储方法,具备相应的功能和有益效果。
图12是本申请实施例提供的一种基于MCU片内flash的数据存储设备的结构示意图,参考图12,该基于MCU片内flash的数据存储设备包括:处理器51、存储器52、通信装置53、输入装置54及输出装置55。该基于MCU片内flash的数据存储设备中处理器51的数量可以是一个或者多个,该基于MCU片内flash的数据存储设备中的存储器52的数量可以是一个或者多个。该基于MCU片内flash的数据存储设备的处理器51、存储器52、通信装置53、输入装置54及输出装置55可以通过总线或者其他方式连接。
存储器52作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本申请任意实施例的基于MCU片内flash的数据存储方法对应的程序指令/模块(例如,基于MCU片内flash的数据存储装置中的区域划分模块41、数据写入模块42、数据转移模块43和区域转换模块44)。存储器52可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等。此外,存储器52可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
通信装置53用于进行数据传输。
处理器51通过运行存储在存储器52中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的基于MCU片内flash的数据存储方法。
输入装置54可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置55可包括显示屏等显示设备。
上述提供的基于MCU片内flash的数据存储设备可用于执行上述实施例提供的基于MCU片内flash的数据存储方法,具备相应的功能和有益效果。
本申请实施例还提供一种包含计算机可执行指令的存储介质,计算机可执行指令在由计算机处理器执行时用于执行一种基于MCU片内flash的数据存储方法,该基于MCU片内flash的数据存储方法包括:将flash存储器划分成两个存储区,将两个存储区分别设置为激活区和非激活区,每个存储区中各个存储单元的地址为连续地址;根据激活区中空白区域的起始地址,将各个待写入数据的数据块连续写入空白区域,数据块包括地址偏移量、数据标识和数据内容;当空白区域的存储单元长度小于待写入数据对应的地址偏移量时,确定激活区中各个数据标识对应的最新写入数据块,并将最新写入数据块连续写入非激活区;将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。
存储介质——任何的各种类型的存储器设备或存储设备。术语“存储介质”旨在包括:安装介质,例如CD-ROM、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如DRAM、DDR RAM、SRAM、EDO RAM,兰巴斯(Rambus)RAM等;非易失性存储器,诸如磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等。存储介质可以还包括其它类型的存储器或其组合。另外,存储介质可以位于程序在其中被执行的第一计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到第一计算机系统。第二计算机系统可以提供程序指令给第一计算机用于执行。术语“存储介质”可以包括驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。
当然,本申请实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上的基于MCU片内flash的数据存储方法,还可以执行本申请任意实施例所提供的基于MCU片内flash的数据存储方法中的相关操作。
上述实施例中提供的基于MCU片内flash的数据存储装置、存储介质及设备可执行本申请任意实施例所提供的基于MCU片内flash的数据存储方法,未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的基于MCU片内flash的数据存储方法。
上述仅为本申请的较佳实施例及所运用的技术原理。本申请不限于这里的特定实施例,对本领域技术人员来说能够进行的各种明显变化、重新调整及替代均不会脱离本申请的保护范围。因此,虽然通过以上实施例对本申请进行了较为详细的说明,但是本申请不仅仅限于以上实施例,在不脱离本申请构思的情况下,还可以包括更多其他等效实施例,而本申请的范围由权利要求的范围决定。

Claims (11)

1.一种基于MCU片内flash的数据存储方法,其特征在于,包括:
将flash存储器划分成两个存储区,将两个存储区分别设置为激活区和非激活区,每个存储区中各个存储单元的地址为连续地址;
根据所述激活区中空白区域的起始地址,将各个待写入数据的数据块连续写入所述空白区域,所述数据块包括地址偏移量、数据标识和数据内容,所述地址偏移量是指数据块在激活区中占用的存储单元的长度;其中,一个存储单元的长度为一个字节;
当所述空白区域的存储单元长度小于所述待写入数据对应的地址偏移量时,确定所述激活区中各个数据标识对应的最新写入数据块,并将所述最新写入数据块连续写入所述非激活区;或者,根据所述空白区域的起始地址和所述激活区尾部的存储单元的地址,确定所述空白区域的存储单元长度;根据所述空白区域的存储单元长度,确定所述空白区域的空间占比,并将所述空间占比与预设的占比阈值进行比较;当空间占比小于或等于预设的占比阈值时,确定激活区中各个数据标识对应的最新写入数据块,并将最新写入数据块连续写入非激活区;
将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。
2.根据权利要求1所述的基于MCU片内flash的数据存储方法,其特征在于,所述将两个存储区分别设置为激活区和非激活区,包括:
读取每一所述存储区的头部两个存储单元的内容,将头部两个存储单元存储有预设激活标识的存储区设置为所述激活区;
当两个所述存储区的头部两个存储单元均未存储所述激活标识,则将预设的激活标识写入任一存储区的头部两个存储单元,以将对应存储区设置为所述激活区,并将另一存储区设置为所述非激活区。
3.根据权利要求2所述的基于MCU片内flash的数据存储方法,其特征在于,所述根据所述激活区中空白区域的起始地址,将各个待写入数据连续写入所述空白区域,包括:
将所述激活区中各个数据块的地址偏移量和所述激活区的头部第三个存储单元的地址累加,得到所述空白区域的起始地址;
根据所述待写入数据的数据内容的长度,确定所述待写入数据的数据块的地址偏移量;
将所述地址偏移量以及所述待写入数据的数据标识和数据内容,依次写入所述空白区域的起始地址以及所述地址偏移量对应的后续多个连续地址的存储单元,得到所述待写入数据的数据块;
根据所述空白区域的起始地址和所述地址偏移量,更新所述空白区域的起始地址。
4.根据权利要求1所述的基于MCU片内flash的数据存储方法,其特征在于,所述空白区域的存储单元长度小于所述待写入数据对应的地址偏移量,包括:
所述空白区域的起始地址加上所述待写入数据对应的地址偏移量再减一的值大于所述激活区尾部的存储单元的地址;或,
所述激活区尾部的存储单元的地址与所述空白区域的起始地址的差值小于所述待写入数据对应的地址偏移量。
5.根据权利要求3所述的基于MCU片内flash的数据存储方法,其特征在于,所述方法还包括:
获取待读取数据的目标数据标识,从所述激活区头部开始遍历各个数据块的起始地址;
根据各个数据块的起始地址确定各个数据块的数据标识,并确定出数据标识与所述目标数据标识相同的候选数据块;
根据所述候选数据块的起始地址,读取起始地址最大的候选数据块的数据内容。
6.根据权利要求3-5任一所述的基于MCU片内flash的数据存储方法,其特征在于,所述确定所述激活区中同一数据标识对应的最新写入数据块,并将所述最新写入数据块连续写入所述非激活区,包括:
从所述激活区头部开始遍历各个数据块的起始地址,根据各个数据块的起始地址确定各个数据块的数据标识;
根据同一数据标识对应的数据块的起始地址,确定起始地址最大的数据块为对应数据标识的最新写入数据块;
将各个数据标识的最新写入数据块,依次写入所述非激活区的头部第三个存储单元以及后续连续的存储单元。
7.根据权利要求6所述的基于MCU片内flash的数据存储方法,其特征在于,所述从所述激活区头部开始遍历各个数据块的起始地址,包括:
确定所述激活区的头部第三个存储单元的地址为首个数据块的起始地址,并从所述头部第三个存储单元中读取首个数据块的地址偏移量;
根据上一数据块的地址偏移量和起始地址,对应确定下一数据块的起始地址,并从下一数据块的起始地址对应的存储单元中获取对应的地址偏移量。
8.根据权利要求6所述的基于MCU片内flash的数据存储方法,其特征在于,所述将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据,包括:
将激活标识写入旧的非激活区的头部两个存储单元,以将旧的非激活区设置为新的激活区;
擦除旧的激活区中的激活标识以及数据块,以将旧的新激活区设置为新的非激活区。
9.一种基于MCU片内flash的数据存储装置,其特征在于,包括:
区域划分模块,被配置为将flash存储器划分成两个存储区,将两个存储区分别设置为激活区和非激活区,每个存储区中各个存储单元的地址为连续地址;
数据写入模块,被配置为根据所述激活区中空白区域的起始地址,将各个待写入数据的数据块连续写入所述空白区域,所述数据块包括地址偏移量、数据标识和数据内容,所述地址偏移量是指数据块在激活区中占用的存储单元的长度;其中,一个存储单元的长度为一个字节;
数据转移模块,被配置为当所述空白区域的存储单元长度小于所述待写入数据对应的地址偏移量时,或当所述空白区域的空间占比小于或等于预设的占比阈值时,确定所述激活区中各个数据标识对应的最新写入数据块,并将所述最新写入数据块连续写入所述非激活区;或者,根据所述空白区域的起始地址和所述激活区尾部的存储单元的地址,确定所述空白区域的存储单元长度;根据所述空白区域的存储单元长度,确定所述空白区域的空间占比,并将所述空间占比与预设的占比阈值进行比较;当空间占比小于或等于预设的占比阈值时,确定激活区中各个数据标识对应的最新写入数据块,并将最新写入数据块连续写入非激活区;
区域转换模块,被配置为将旧的非激活区设置为新的激活区,将旧的激活区设置为新的非激活区,并擦除新的非激活区的数据。
10.一种基于MCU片内flash的数据存储设备,其特征在于,包括:一个或多个处理器;存储装置,存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8任一所述的基于MCU片内flash的数据存储方法。
11.一种包含计算机可执行指令的存储介质,其特征在于,所述计算机可执行指令在由计算机处理器执行时用于执行如权利要求1-8任一所述的基于MCU片内flash的数据存储方法。
CN202210756642.9A 2022-06-30 2022-06-30 基于MCU片内flash的数据存储方法、装置、设备及存储介质 Active CN114840449B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210756642.9A CN114840449B (zh) 2022-06-30 2022-06-30 基于MCU片内flash的数据存储方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210756642.9A CN114840449B (zh) 2022-06-30 2022-06-30 基于MCU片内flash的数据存储方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN114840449A CN114840449A (zh) 2022-08-02
CN114840449B true CN114840449B (zh) 2022-10-18

Family

ID=82573984

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210756642.9A Active CN114840449B (zh) 2022-06-30 2022-06-30 基于MCU片内flash的数据存储方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN114840449B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116896606B (zh) * 2022-12-31 2024-02-06 苏州精源创智能科技有限公司 一种嵌入式应用场景中的图片的压缩和读取方法
CN117742588B (zh) * 2023-11-30 2024-06-04 武汉芯必达微电子有限公司 使用Flash模拟EEPROM的数据存储方法及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112632069A (zh) * 2020-12-22 2021-04-09 中科驭数(北京)科技有限公司 哈希表数据存储管理方法、装置、介质和电子设备

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101382918B (zh) * 2008-07-26 2011-06-22 深圳市硅格半导体有限公司 一种基于数据交换区的NAND Flash闪存优化管理方法
CN103440205B (zh) * 2013-08-21 2016-12-28 深圳市九洲电器有限公司 一种机顶盒数据存储方法及装置
CN108763099B (zh) * 2018-04-18 2020-05-08 华为技术有限公司 系统的启动方法、装置、电子设备和存储介质
US11030089B2 (en) * 2018-09-28 2021-06-08 Micron Technology, Inc. Zone based reconstruction of logical to physical address translation map
JP7232062B2 (ja) * 2019-01-28 2023-03-02 日立Astemo株式会社 電子制御装置及びプログラム更新方法
JP7128763B2 (ja) * 2019-03-18 2022-08-31 日立Astemo株式会社 電子制御装置及び制御データの設定方法
US11734175B2 (en) * 2019-08-22 2023-08-22 SK Hynix Inc. Storage device and method of operating the same
KR20220005111A (ko) * 2020-07-06 2022-01-13 에스케이하이닉스 주식회사 메모리 시스템, 메모리 컨트롤러 및 메모리 시스템의 동작 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112632069A (zh) * 2020-12-22 2021-04-09 中科驭数(北京)科技有限公司 哈希表数据存储管理方法、装置、介质和电子设备

Also Published As

Publication number Publication date
CN114840449A (zh) 2022-08-02

Similar Documents

Publication Publication Date Title
CN114840449B (zh) 基于MCU片内flash的数据存储方法、装置、设备及存储介质
US10642729B2 (en) Data storage device and operating method thereof wherein update to physical-to-logical mapping of destination block is restarted when closing active block
US6571312B1 (en) Data storage method and data processing device using an erasure block buffer and write buffer for writing and erasing data in memory
US6571326B2 (en) Space allocation for data in a nonvolatile memory
KR100453053B1 (ko) 플래쉬 메모리용 파일 시스템
EP3376394B1 (en) Method and device for processing access request, and computer system
US8595413B2 (en) Memory control method and device, memory access control method, computer program, and recording medium
US20090049229A1 (en) Nonvolatile memory device, method of writing data,and method of reading out data
JP2007280428A (ja) メモリ管理
EP3752905B1 (en) Append only streams for storing data on a solid state device
CN113377695B (zh) 读写分离的固态存储设备的数据分布方法
CN109558335B (zh) 一种基于Nor Flash存储器的嵌入式系统的文件存储格式
CN109669889B (zh) 一种轻量型Nor Flash闪存控制方法和装置
TW201727472A (zh) 資料儲存方法及其系統
CN113655955A (zh) 缓存管理方法、固态硬盘控制器及固态硬盘
WO2022100064A1 (zh) 数据回滚更新方法、装置、计算机设备和存储介质
JP4130808B2 (ja) フォーマット方法
KR101077901B1 (ko) 로그 블록 단위 매핑 기법을 이용한 플래시 메모리 관리 장치 및 방법
CN110795282B (zh) 一种数据回滚方法、装置、设备及存储介质
CN110286848B (zh) 数据处理方法及装置
KR101676175B1 (ko) 전원 손실 이후 데이터 손실을 방지하기 위한 메모리 저장 장치 및 방법
CN111597066A (zh) Ssd修复方法、装置、计算机设备及存储介质
CN115994101A (zh) 闪存设备及其数据管理方法
CN112395260B (zh) 一种数据存储方法及介质
CN107025062B (zh) 数据储存方法及其系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant