CN117420962B - 数据存取管理方法、单片机产品及存储介质 - Google Patents
数据存取管理方法、单片机产品及存储介质 Download PDFInfo
- Publication number
- CN117420962B CN117420962B CN202311714455.5A CN202311714455A CN117420962B CN 117420962 B CN117420962 B CN 117420962B CN 202311714455 A CN202311714455 A CN 202311714455A CN 117420962 B CN117420962 B CN 117420962B
- Authority
- CN
- China
- Prior art keywords
- data
- serial number
- content
- last
- 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
Links
- 238000003860 storage Methods 0.000 title claims abstract description 78
- 238000007726 management method Methods 0.000 title claims abstract description 20
- 238000000034 method Methods 0.000 claims abstract description 37
- 238000012795 verification Methods 0.000 claims description 11
- 239000003990 capacitor Substances 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 5
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000013500 data storage Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000005070 sampling Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000010248 power generation Methods 0.000 description 2
- 230000002035 prolonged effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 1
- 238000004146 energy storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明实施例公开了一种数据存取管理方法、单片机产品及存储介质,其中方法包括:在Flash中预设掉电保护数据的存储区域,该存储区域包括至少两个扇区,每个扇区被划分成多个数据块,每个数据块用于存储一次掉电的写入数据;微控制器上电后,当检测到输入电压达到预设的启动电压时,确定出本次写入数据对应的数据块,若该数据块为存储区域中任一扇区的第一个数据块,则擦除该扇区;接收到掉电信号时,获取本次写入数据,将本次写入数据存储到对应的数据块中。本发明的方法,将耗时长的擦除操作放到上电启动时,在进入停机前只执行耗时短的数据写入操作,能确保掉电时数据不会丢失。
Description
技术领域
本发明涉及单片机数据存取技术领域,特别是涉及一种数据存取管理方法、单片机产品及存储介质。
背景技术
单片机产品常有数据存储需求,比如光伏发电控制器,存储累计发电量数据;便携储能电源,存储放电量数据等。MCU(Microcontroller Unit,微控制器)上电时读取掉电保护数据,运行时基于掉电保护数据计算,停机时再存储下来新数据。因EEPROM(Electrically Erasable Programmable read only memory,带电可擦可编程只读存储器)存储寿命较长,能达100k或1000K写入次数,通讯方便,只需2线的I2C总线通信(400K或1M波特率),MCU多外挂EEPROM进行数据存储,如图1所示。
MCU启动时将掉电保护数据从EEPROM读到RAM(Random Access Memory,随机存取存储器)中,并在RAM中时时更新,再适时写回EEPROM。但有时设备不是由单片机控制主动断电,被动断电时,容易丢失数据。原因是MCU向外部EEPROM写入数据时,数据传输需要时间,EEPROM收完数据后从缓存写入也需要时间。自写周期通常为5ms,EEPROM由多个页组成,如果一次写入数据小于一页,一个自写周期就可完成。如果数据量大于一页,则每多一页,写入时间就增加一个自写周期。EEPROM的存储时间由通信传输时间和自写入时间组成,当数据量较大时,容易丢失数据。
为了减少因被动断电而损失数据,通常的做法有:1)定期存储,每隔一定时间间隔,存储一次数据:2)数据变化一定阈值,存储一次数据;3)前两种方法结合。但这些方法,两次存储间隔内的数据,还是会丢失,对写入寿命也有压力。因此,需要一个更好的方法,解决被动掉电时数据容易丢失和存储器寿命低的问题。
发明内容
本发明实施例旨在提供一种数据存取管理方法、单片机产品及存储介质,以解决现有技术中被动掉电时数据容易丢失和存储器寿命低的问题。
为解决上述技术问题,本发明实施例提供以下技术方案:
根据本发明的一方面,提供一种数据存取管理方法,应用于单片机产品,所述方法包括:
在Flash中预设掉电保护数据的存储区域,所述存储区域包括至少两个扇区,每个扇区被划分成多个数据块,每个数据块用于存储一次掉电的写入数据,所述写入数据包括掉电保护数据;
微控制器上电后,当检测到输入电压达到预设的启动电压时,在所述存储区域中确定出本次写入数据对应的数据块,判断所述本次写入数据对应的数据块是否为所述存储区域中任一扇区的第一个数据块,若是,则擦除所述扇区;
接收到掉电信号时,获取本次写入数据,将所述本次写入数据存储到所述对应的数据块中。
可选地,所述微控制器分别连接至第一电源电压和第二电源电压,所述第一电源电压为外部电源的电压,所述第二电源电压为所述外部电源经二极管和电容之后的电压,所述方法还包括:
微控制器上电后,检测所述第二电源电压;
若所述第二电源电压达到所述启动电压,则判断检测到的输入电压达到所述启动电压;
定期检测所述第一电源电压,若所述第一电源电压小于预设的掉电电压,则判断接收到掉电信号。
可选地,各数据块按其所在位置排序后对应一位置序号,所述写入数据还包括内容序号,所述内容序号用于循环记录所述写入数据的写入次数,所述方法还包括:
在所述存储区域中确定出本次写入数据对应的本次位置序号和本次内容序号。
可选地,所述在所述存储区域中确定出本次写入数据对应的本次位置序号和本次内容序号的步骤之前,还包括:
依次遍历各数据块中的内容,确定出最大的内容序号;
若所述最大的内容序号为有效,则根据所述最大的内容序号在所述存储区域中确定出上次写入数据对应的上次位置序号和上次内容序号,并读取所述上次位置序号对应的数据块中的内容;
若所述最大的内容序号为无效,则将所述上次位置序号设置为位置序号最大值,将所述上次内容序号设置为预设的内容序号最大值。
可选地,所述根据所述最大的内容序号在所述存储区域中确定出所述上次位置序号和所述上次内容序号的步骤包括:
若所述最大的内容序号为所述内容序号最大值,则重新查找小于所述位置序号最大值的最大内容序号,若存在,则将找到的内容序号作为所述上次内容序号,若不存在,则将所述内容序号最大值作为所述上次内容序号;
若所述最大的内容序号小于所述内容序号最大值,则将所述最大的内容序号作为所述上次内容序号;
将查找到所述上次内容序号的数据块对应的位置序号作为所述上次位置序号。
可选地,所述在所述存储区域中确定出本次写入数据对应的本次位置序号和本次内容序号的步骤包括:
判断所述上次位置序号加1后的值是否大于所述位置序号最大值,若是,则将所述本次位置序号设置为所述位置序号的起始值,若否,则将所述本次位置序号设置为所述上次位置序号加1后的值;
判断所述上次内容序号加1后的值是否大于所述内容序号最大值,若是,则将所述本次内容序号设置为所述内容序号的起始值,若否,则将所述本次内容序号设置为所述上次内容序号加1后的值。
可选地,所述方法还包括:
将双份的所述本次写入数据存储到所述本次写入数据对应的数据块中。
可选地,所述写入数据还包括校验数据,所述读取所述上次位置序号对应的数据块中的内容的步骤包括:
读取所述上次位置序号对应的数据块中的第一份写入数据,对所述第一份写入数据进行校验,若校验通过,则获取所述第一份写入数据中的掉电保护数据用于后续使用;
若校验不通过,则读取所述上次位置序号对应的数据块中的第二份写入数据,对所述第二份写入数据进行校验,若校验通过,则获取所述第二份写入数据中的掉电保护数据用于后续使用,若校验不通过,则判断上次掉电保护数据存储失败
根据本发明的另一方面,提供一种单片机产品,包括存储器、处理器及存储在存储器上运行的计算机程序,所述处理器执行所述程序时实现上述任一项所述的数据存取管理方法的步骤。
根据本发明的再一方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被处理器执行时,所述处理器执行上述任一项所述的数据存取管理方法的步骤。
本发明实施例的有益效果是:区别于现有技术的情况,本发明实施例中,提供了一种应用于单片机产品的数据存取管理方法,在Flash中预设掉电保护数据的存储区域,该存储区域包括至少两个扇区,每个扇区被划分成多个数据块,每个数据块用于存储一次掉电的写入数据;微控制器上电后,检测到输入电压达到预设的启动电压时,确定出本次写入数据对应的数据块,若该数据块为存储区域中任一扇区的第一个数据块,则擦除该扇区;接收到掉电信号时,获取本次写入数据,将本次写入数据存储到所述本次写入数据对应的数据块中。本发明的方法,将耗时长的擦除操作放到上电启动时,在进入停机前只执行耗时短的数据写入操作,能确保掉电时数据不会丢失。此外,Flash分块写入数据的方法大大降低了存储器的擦写频率,提高了存储器的使用寿命。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是本发明实施例提供的一种常规单片机产品的结构框图;
图2是本发明实施例提供的一种改进后单片机产品的结构框图;
图3是本发明实施例提供的一种数据存取管理方法的流程图;
图4是本发明实施例提供的Flash中预设的存储区域的内部结构示意图;
图5是本发明实施例提供的一种查找上次写入数据的流程图;
图6是本发明实施例提供的一种单片机产品的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本发明提供一种数据存取管理方法,可应用于单片机产品。本发明实施例中,MCU在接收到掉电信号时,通过电容延长掉电时间,将数据存储到MCU的内部Flash中,解决了现有技术中被动掉电时数据容易丢失的问题。一方面,由于Flash位于微控制器内部,可省去外部通信传输时间;另一方面,Flash的写入时间相比EEPROM要快得多。因此,Flash更适合存储掉电过程中的数据。
为了延长掉电时间,需对图1中的常规单片机产品进行改进。如图2所示,为本发明实施例提供的一种改进后单片机产品的结构框图。在MCU电源处增加二极管D,并在二级管前后增加采样线路L1、L2,即第一电源电压V1经外部采样线路L1连到MCU内部AD(Analog toDigital Converter,模数转换器)模块。第二电源电压V2经外部采样线路L2或内部线路L3也连接到AD模块。由于二极管的单向导电性,外部电源掉电时,电容C储存的电能不会被其他设备吸走,它能使MCU继续工作一段时间,时间长短由电容C的容值大小调整,容值越大,时间越长。在电容C维持MCU工作的这段时间,将数据写入至Flash中,再进入停机模式。当MCU再次启动时,先通过AD检测第二电源电压V2,当第二电源电压V2达到预设的启动电压时,必要时执行扇区擦除操作,并将上次写入的掉电保护数据从Flash中读入到RAM中,之后进入正常应用程序。
实施例一
请参阅图3,为本发明实施例提供的一种数据存取管理方法的流程图。所述方法可适应于图2中所示的单片机产品或通过其他方式可使得掉电时间延长的单片机产品,所述方法包括:
步骤S301,在Flash中预设掉电保护数据的存储区域,所述存储区域包括至少两个扇区,每个扇区被划分成多个数据块,每个数据块用于存储一次掉电的写入数据,所述写入数据包括掉电保护数据。
Flash的擦除和写入可以分开独立操作,由此可以将一个扇区分为N块 ,每次写入一个块位置,下次写入下一个块位置,写满N块时,再擦除整个扇区,通过擦写分时分块操作,可将存储次数提高到Flash寿命的N倍。该N值可根据扇区的大小和写入数据的大小来确定。
为了数据可靠安全,希望即使在Flash擦扇区时,Flash中仍存有上次写入的有效数据。这样至少需要两个扇区,这时存储次数也提高到了Flash寿命的2N倍以上。如图4所示,预设的存储区域包括2个扇区,每个扇区被划分成N个数据块,sector1中数据块对应为Block1~BlockN,sector2中数据块对应为BlockN+1~Block2N。
在本发明的一种实施例中,写入数据在整个存储区域的各数据块中依次存储。具体的,将存储区域中所有数据块根据其所在位置依次排序,得到各数据块的位置序号。数据存储时,按照数据块的位置序号依次存储。如图4中,各数据块的位置序号范围为1~2N,数据存储时,先存入Block1,下次再存入Block2。
为了区分各写入数据,并能表示写入次序,所述写入数据还包括内容序号和校验数据。具体的,写入数据的数据结构定义如下:
其中,DataIndex为写入数据的内容序号,用于循环记录所述写入数据的写入次数。Flash擦除时,将扇区内所有数据置位为1,以两字节宽度为例,即每个地址的数据均为0xFFFF。DataIndex也以两字节宽度为例,其有效范围为0~0xFFFE(除0xFFFF外)。因此,内容序号最大值可设为0xFFFE。每存储一次写入数据,DataIndex增加1,当写完0xFFFE时,下次再写入数据时DataIndex回绕到0值。
Data[N]为要存储的实际数据,即掉电保护数据。
DataCrc为DataIndex和Data[N]数据的校验和。
在其他实施例中,写入数据在整个存储区域的不同的扇区之间轮流交替存储。如图4中,先存入第一个扇区的Block1,下次再存入第二个扇区的BlockN+1,然后再存入第一个扇区的Block2。
步骤S302,微控制器上电后,当检测到输入电压达到预设的启动电压时,在所述存储区域中确定出本次写入数据(本次上电后掉电时的写入数据)对应的数据块,判断所述本次写入数据对应的数据块是否为所述存储区域中任一扇区的第一个数据块,若是,则擦除所述扇区。
在一种实施例中,如图2所示,微控制器分别连接至第一电源电压和第二电源电压,所述第一电源电压为外部电源的电压,所述第二电源电压为所述外部电源经二极管和电容之后的电压。微控制器上电后,检测所述第二电源电压,若所述第二电源电压达到所述启动电压,则表示检测到的输入电压达到启动电压。
Flash擦除扇区耗时较长,多为几十ms,但是数据写入较快,多为几十us。MCU上电启动多是主动预期开机的,停机除主动停止外,还可能被动下电。因此,本发明将耗时长的擦除操作放到上电启动时,再进入停机前只执行少时短的数据写入操作。
在本发明的一个实施例中,在存储区域中确定出本次写入数据对应的数据块之前,还用于在所述存储区域中查找上次写入数据对应的数据块,若存在,则读取该数据块中的内容到RAM中。基于不同的存储策略,查找上次写入数据的方法不同。本发明实施例中,利用前述定义的数据结构在存储区域的各数据块中进行查找,确定出最大的内容序号,并根据该最大的内容序号确定出上次写入数据对应的上次位置序号和上次内容序号。具体步骤详见后面描述。
基于上次写入数据对应的上次位置序号和上次内容序号,可确定出本次写入数据对应的本次位置序号和本次内容序号。在一种实施例中,将上次位置序号加1,判断加1后的值是否大于位置序号最大值,若是,则将本次位置序号设置为位置序号的起始值(例如为1),若否,则将本次位置序号设置为上次位置序号加1后的值。同样的,将上次内容序号加1,判断加1后的值是否大于内容序号最大值,若是,则将本次内容序号设置为内容序号的起始值(例如为0),若否,则将本次内容序号设置为所述上次内容序号加1后的值。
根据本次位置序号可确定出本次写入数据对应的数据块,判断该数据块是否为该存储区域中任一扇区的第一个数据块,若是,则擦除所述扇区。例如,本次位置序号对应的数据块为Block1或BlockN+1时,则对该数据块所在扇区sector1或sector2执行擦除操作。
在一示例中,在确定本次位置序号之前,还包括对上次写入数据是否存储成功进行检测,若上次写入数据存储失败,则报错。
检测的方法为:a.同一扇区存储区域中相邻的数据块中的内容序号都存在,则判断相邻数据块中的内容序号是否有序,如有序,则继续遍历,遍历完该扇区的所有数据块至情况b或遍历至情况c;如无序,则上次数据存储失败。b.已有数据存入多个扇区,某扇区的尾部数据块和相邻扇区的头部数据块中的内容序号或某扇区的头部数据块和最后一个扇区的尾部数据块中的内容序号至少有一对是有序的,如都无序,则上次写入数据存储失败。c.相邻数据块中较后的数据块的内容序号不存在,则对较后的数据块是否为空进行排查,如较后的数据块的Data[N](要存储的实际数据)或DataCrc(校验和)有部分数据存在,则上次写入内容序号不成功,上次数据存储失败;如较后的数据块的Data[N](要存储的实际数据)和DataCrc(校验和)均为空,则上次写入数据存储成功。
其中,有序是指:若当前数据块的内容序号为内容序号最大值,则下一数据块的内容序号为0;若当前数据块的内容序号不为内容序号最大值,则下一数据块的内容序号为当前数据块的内容序号加一后的值。
步骤S303,接收到掉电信号时,获取本次写入数据,将所述本次写入数据存储到所述对应的数据块中。
微控制器定期检测输入到AD的第一电源电压,若第一电源电压小于预设的掉电电压,则获取需要存储的本次写入数据,将所述写入数据写入到步骤S302中确定出的本次写入数据对应的数据块中,随后进入停机程序。
为了进一步增加数据可靠性,存储时还可以做双备份。具体的,将将双份的所述本次写入数据存储到所述本次写入数据对应的数据块中,其在数据块中的存储结构如下:
上电读取时,选取校验和正确的使用。具体的,读取上次位置序号对应的数据块中的第一份写入数据,对所述第一份写入数据进行校验,若校验通过,则获取所述第一份写入数据中的掉电保护数据用于后续使用;若校验不通过,则读取上次位置序号对应的数据块中的第二份写入数据,对所述第二份写入数据进行校验,若校验通过,则获取所述第二份写入数据中的掉电保护数据用于后续使用,若校验不通过,则判断上次掉电保护数据存储失败。
下面对上次写入数据的查找方法进行详细描述,所述写入数据依次存储于整个存储区域的各数据块中,其数据结构如前述定义。
首先,依次遍历各数据块中的内容,确定出最大的内容序号;然后,判断所述最大的内容序号是否有效,若有效(例如为0~0xFFFE时),则根据所述最大的内容序号在存储区域中确定出上次写入数据对应的上次位置序号和上次内容序号,并读取所述上次位置序号对应的数据块中的内容;若无效(例如为0xFFFF),则将上次位置序号设置为位置序号最大值,将上次内容序号设置为预设的内容序号最大值,以使得本次位置序号回绕到存储区域的第一个数据块,本次写入数据,本次内容序号回绕到0。
其中,根据最大的内容序号在存储区域中确定出上次写入数据对应的上次位置序号和上次内容序号包括:先判断最大的内容序号是否为内容序号最大值(例如为0xFFFE),若是,则重新查找小于位置序号最大值的最大内容序号,若找到,则将找到的内容序号作为上次内容序号,否则,将所述内容序号最大值作为所述上次内容序号;若否,则将所述最大的内容序号作为上次内容序号;然后将查找到上次内容序号的数据块对应的位置序号作为上次位置序号。
如图5所示,为本发明实施例提供的一种查找上次写入数据的流程图。其中,位置序号的取值范围为1~2N,内容序号的取值范围为0~0xFFFE。所述步骤具体包括:
步骤S501,MCU启动后,当第二电源电压V2≥启动电压V_start时,开始查找上次写入数据。
启动电压V_startk可设置为Flash能完成擦写操作一次的电压。
步骤S502,使用当前位置序号变量StoreIndex在数据块Block1~Block2N中移动,读取StoreIndex所指向数据块中的内容,查找出最大的内容序号DataIndex。
需要说明的是,内容序号最大值Max需大于或等于位置序号的最大值2N,从而保证存储区域中每个数据块对应不同的DataIndex。
步骤S503,判断最大的内容序号DataIndex是否无效,若否,则进入步骤S504,若是,则进入步骤S509。
步骤S504,判断最大的内容序号DataIndex是否为内容序号最大值Max,若是,则进入步骤S505,若否,则进入步骤S507。
步骤S505,StoreIndex重新在数据块Block1~Block2N中移动,查找小于位置序号最大值2N的最大的内容序号DataIndex(0~2N-1)。
当最大的内容序号DataIndex为内容序号最大值Max时,存储区域的数据可能已经发生了回绕,因此,需要确定是否发生回绕,如果发生了回绕,则确定出回绕后的最大内容序号。可以理解的是,回绕后的最大内容序号的取值范围为0~(2N-1)。
步骤S506,若找到,则将找到的内容序号DataIndex作为上次内容序号LastDataIndex;否则,则将内容序号最大值Max作为上次内容序号LastDataIndex,并将StoreIndex恢复到DataIndex=Max的位置。
步骤S507,将最大的内容序号DataIndex作为上次内容序号LastDataIndex。
步骤S508,将查找到上次内容序号LastDataIdex的数据块对应的位置序号StoreIndex作为上次位置序号LastStoreIndex,读取上次位置序号LastStoreIndex对应的数据块中的内容。
步骤S509,将上次位置序号LastStoreIndex设置为位置序号最大值2N,将上次内容序号LastDataIndex设置为内容序号最大值Max。
本发明实施例提供的数据存取管理方法,在Flash中预设掉电保护数据的存储区域,该存储区域包括至少两个扇区,每个扇区被划分成多个数据块,每个数据块用于存储一次掉电的写入数据;微控制器上电后,检测到输入电压达到预设的启动电压时,确定出本次写入数据对应的数据块,若该数据块为存储区域中任一扇区的第一个数据块,则擦除该扇区;接收到掉电信号时,获取本次写入数据,将本次写入数据存储到所述本次写入数据对应的数据块中。本发明的方法,将耗时长的擦除操作放到上电启动时,在进入停机前只执行耗时短的数据写入操作,能确保掉电时数据不会丢失。此外,Flash分块写入数据的方法大大降低了存储器的擦写频率,提高了存储器的使用寿命。
实施例二
根据本发明实施例,提供一种单片机产品,如图6所示,本发明实施例提供的一种单片机产品的结构示意图,该单片机产品60包括处理单元601、数据存储器602(即RAM)、程序存储器 603(即Flash)、输入输出接口604和通信总线605,其中,处理单元601、数据存储器602、程序存储器 603和输入输出接口604通过通信总线605完成相互间的通信。处理单元601可以调用程序存储器603中的逻辑指令和其他写入数据(例如掉电保护数据),更新数据存储器602的状态,以执行实施例一中的数据存取管理方法,该方法包括:在Flash中预设掉电保护数据的存储区域,所述存储区域包括至少两个扇区,每个扇区被划分成多个数据块,每个数据块用于存储一次掉电的写入数据,所述写入数据包括掉电保护数据;微控制器上电后,当检测到输入电压达到预设的启动电压时,在所述存储区域中确定出本次写入数据对应的数据块,判断所述本次写入数据对应的数据块是否为所述存储区域中任一扇区的第一个数据块,若是,则擦除所述扇区;接收到掉电信号时,获取本次写入数据,将所述本次写入数据存储到所述对应的数据块中。
此外,上述程序存储器603中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在几个计算机可读存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,计算机软件产品存储于一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器或者网络设备等)执行本发明实施例一中任一所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
上述产品可执行实施例一中任一所述的数据存取管理方法,具备方法相应的功能模块和有益效果,未在本实施例中详尽描述的技术细节,可参见本发明实施例一提供的数据存取管理方法。
实施例三
根据本发明实施例,提供一种计算机可读存储介质,其类型如实施例二中所述,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被处理器执行时,所述处理器执行实施例一中所述的数据存取管理方法的步骤。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用直至得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (9)
1.一种数据存取管理方法,其特征在于,应用于单片机产品,所述方法包括:
在Flash中预设掉电保护数据的存储区域,所述存储区域包括至少两个扇区,每个扇区被划分成多个数据块,每个数据块用于存储一次掉电的写入数据,所述写入数据包括掉电保护数据和内容序号,所述内容序号用于循环记录所述写入数据的写入次数,各数据块按其所在位置排序后对应一位置序号;
微控制器上电后,当检测到输入电压达到预设的启动电压时,在所述存储区域中确定出本次写入数据对应的数据块,判断所述本次写入数据对应的数据块是否为所述存储区域中任一扇区的第一个数据块,若是,则擦除所述扇区;
接收到掉电信号时,获取本次写入数据,将所述本次写入数据存储到所述对应的数据块中;
所述方法还包括:
依次遍历各数据块中的内容,确定出最大的内容序号;
根据所述最大的内容序号确定出上次写入数据对应的上次位置序号和上次内容序号;
根据所述上次位置序号和所述上次内容序号在所述存储区域中确定出本次写入数据对应的本次位置序号和本次内容序号。
2.根据权利要求1所述的方法,其特征在于,所述微控制器分别连接至第一电源电压和第二电源电压,所述第一电源电压为外部电源的电压,所述第二电源电压为所述外部电源经二极管和电容之后的电压,所述方法还包括:
微控制器上电后,检测所述第二电源电压;
若所述第二电源电压达到所述启动电压,则判断检测到的输入电压达到所述启动电压;
定期检测所述第一电源电压,若所述第一电源电压小于预设的掉电电压,则判断接收到掉电信号。
3.根据权利要求1所述的方法,其特征在于,所述在所述存储区域中确定出本次写入数据对应的本次位置序号和本次内容序号的步骤之前,还包括:
根据内容序号对上次写入数据是否存储成功进行检测;
若上次写入数据失败,则报错;
若上次写入数据成功,则判断所述最大的内容序号是否为有效,若所述最大的内容序号为有效,则根据所述最大的内容序号在所述存储区域中确定出上次写入数据对应的上次位置序号和上次内容序号,并读取所述上次位置序号对应的数据块中的内容;
若所述最大的内容序号为无效,则将所述上次位置序号设置为位置序号最大值,将所述上次内容序号设置为预设的内容序号最大值;
所述根据内容序号对上次写入数据是否存储成功进行检测包括:
a.同一扇区存储区域中相邻的数据块中的内容序号都存在时,判断相邻数据块中的内容序号是否有序,如有序,则继续遍历,遍历完该扇区的所有数据块至情况b或遍历至情况c;如无序,则上次写入数据存储失败;
b. 写入数据已存入多个扇区时,若当前扇区的尾部数据块和相邻扇区的头部数据块中的内容序号为无序且当前扇区的头部数据块和最后一个扇区的尾部数据块中的内容序号也为无序,则上次写入数据存储失败;
c .同一扇区存储区域中相邻数据块中较后的数据块的内容序号不存在时,判断较后的数据块是否为空,若是,则上次写入数据存储成功,若否,则上次写入数据存储失败。
4.根据权利要求3所述的方法,其特征在于,所述根据所述最大的内容序号在所述存储区域中确定出所述上次位置序号和所述上次内容序号的步骤包括:
若所述最大的内容序号为所述内容序号最大值,则重新查找小于所述位置序号最大值的最大内容序号,若存在,则将找到的内容序号作为所述上次内容序号,若不存在,则将所述内容序号最大值作为所述上次内容序号;
若所述最大的内容序号小于所述内容序号最大值,则将所述最大的内容序号作为所述上次内容序号;
将查找到所述上次内容序号的数据块对应的位置序号作为所述上次位置序号。
5.根据权利要求3所述的方法,其特征在于,所述在所述存储区域中确定出本次写入数据对应的本次位置序号和本次内容序号的步骤包括:
判断所述上次位置序号加1后的值是否大于所述位置序号最大值,若是,则将所述本次位置序号设置为所述位置序号的起始值,若否,则将所述本次位置序号设置为所述上次位置序号加1后的值;
判断所述上次内容序号加1后的值是否大于所述内容序号最大值,若是,则将所述本次内容序号设置为所述内容序号的起始值,若否,则将所述本次内容序号设置为所述上次内容序号加1后的值。
6.根据权利要求3至5任一项所述的方法,其特征在于,所述方法还包括:
将双份的所述本次写入数据存储到所述本次写入数据对应的数据块中。
7.根据权利要求6所述的方法,其特征在于,所述写入数据还包括校验数据,所述读取所述上次位置序号对应的数据块中的内容的步骤包括:
读取所述上次位置序号对应的数据块中的第一份写入数据,对所述第一份写入数据进行校验,若校验通过,则获取所述第一份写入数据中的掉电保护数据用于后续使用;
若校验不通过,则读取所述上次位置序号对应的数据块中的第二份写入数据,对所述第二份写入数据进行校验,若校验通过,则获取所述第二份写入数据中的掉电保护数据用于后续使用,若校验不通过,则判断上次掉电保护数据存储失败。
8.一种单片机产品,包括存储器、处理器及存储在存储器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-7任一项所述的数据存取管理方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被处理器执行时,所述处理器执行如权利要求1-7任一项所述的数据存取管理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311714455.5A CN117420962B (zh) | 2023-12-14 | 2023-12-14 | 数据存取管理方法、单片机产品及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311714455.5A CN117420962B (zh) | 2023-12-14 | 2023-12-14 | 数据存取管理方法、单片机产品及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117420962A CN117420962A (zh) | 2024-01-19 |
CN117420962B true CN117420962B (zh) | 2024-05-14 |
Family
ID=89530507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311714455.5A Active CN117420962B (zh) | 2023-12-14 | 2023-12-14 | 数据存取管理方法、单片机产品及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117420962B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309940A (zh) * | 2013-05-03 | 2013-09-18 | 上海证券交易所 | 一种对乱序数据流排序的方法 |
WO2017054487A1 (zh) * | 2015-09-30 | 2017-04-06 | 中兴通讯股份有限公司 | 一种掉电保护的方法、装置和电子设备 |
CN111966287A (zh) * | 2020-08-07 | 2020-11-20 | 深圳移航通信技术有限公司 | 数据存储方法、电子设备及存储介质 |
CN112817527A (zh) * | 2021-01-21 | 2021-05-18 | 深圳市显控科技股份有限公司 | 掉电数据存储方法、单片机及计算机可读存储介质 |
CN113220239A (zh) * | 2021-05-24 | 2021-08-06 | 厦门四信通信科技有限公司 | 一种flash存储的擦写方法、装置、设备及可读存储介质 |
CN114780041A (zh) * | 2022-05-06 | 2022-07-22 | 佛山市顺德区卓晶电子科技有限公司 | 一种掉电记忆存储方法和装置 |
CN115292266A (zh) * | 2022-05-30 | 2022-11-04 | 中国电子科技集团公司第五十二研究所 | 一种基于存储器的高可靠日志存储方法 |
-
2023
- 2023-12-14 CN CN202311714455.5A patent/CN117420962B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309940A (zh) * | 2013-05-03 | 2013-09-18 | 上海证券交易所 | 一种对乱序数据流排序的方法 |
WO2017054487A1 (zh) * | 2015-09-30 | 2017-04-06 | 中兴通讯股份有限公司 | 一种掉电保护的方法、装置和电子设备 |
CN111966287A (zh) * | 2020-08-07 | 2020-11-20 | 深圳移航通信技术有限公司 | 数据存储方法、电子设备及存储介质 |
CN112817527A (zh) * | 2021-01-21 | 2021-05-18 | 深圳市显控科技股份有限公司 | 掉电数据存储方法、单片机及计算机可读存储介质 |
CN113220239A (zh) * | 2021-05-24 | 2021-08-06 | 厦门四信通信科技有限公司 | 一种flash存储的擦写方法、装置、设备及可读存储介质 |
CN114780041A (zh) * | 2022-05-06 | 2022-07-22 | 佛山市顺德区卓晶电子科技有限公司 | 一种掉电记忆存储方法和装置 |
CN115292266A (zh) * | 2022-05-30 | 2022-11-04 | 中国电子科技集团公司第五十二研究所 | 一种基于存储器的高可靠日志存储方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117420962A (zh) | 2024-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9003108B2 (en) | Relocating data based on matching address sequences | |
US20220148659A1 (en) | Data Storage Systems and Methods for Improved Recovery After a Write Abort Event | |
US8228753B2 (en) | System and method of maintaining data integrity in a flash storage device | |
CN108804045B (zh) | 一种坏块表建立方法及相关装置 | |
US20140258587A1 (en) | Self recovery in a solid state drive | |
WO2012044766A1 (en) | System and method of data encoding | |
CN106021002B (zh) | 一种嵌入式设备数据读写方法及装置 | |
CN101901169B (zh) | 扫描装置及方法 | |
US11816015B2 (en) | Management of event log information of a memory sub-system | |
US11526395B2 (en) | Write buffer management | |
CN105843700B (zh) | 一种控制器 | |
CN112632643A (zh) | 防止闪存数据丢失的方法、固态硬盘控制器、固态硬盘 | |
CN108089892B (zh) | 一种系统安全启动的方法、装置、机顶盒及存储介质 | |
CN117420962B (zh) | 数据存取管理方法、单片机产品及存储介质 | |
KR20170086840A (ko) | 데이터 저장 장치 및 그것의 동작 방법 | |
US20210055878A1 (en) | Data compaction within the same plane of a memory component | |
CN102541677A (zh) | 提高nandflash存储设备对照表加载速度的实现方法 | |
CN111258498B (zh) | 一种flash存储器管理方法 | |
US20170308448A1 (en) | Terminal apparatus and failure response control method | |
CN109558080B (zh) | 一种电力采集设备的NandFlash数据管理方法 | |
CN103092730B (zh) | 一种信息存储与读取方法 | |
JP5398795B2 (ja) | 情報処理装置及び情報処理プログラム | |
CN114303125A (zh) | 在低电池电量状态期间存储器子系统中的垃圾收集 | |
US11720681B2 (en) | Firmware execution profiling and verification | |
CN112540723B (zh) | 一种NOR Flash坏点补偿的方法 |
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 |