掌桥专利:专业的专利平台
掌桥专利
首页

一种掉电记忆存储方法和装置

文献发布时间:2023-06-19 16:06:26



技术领域

本发明属于数据存储技术领域,具体涉及一种掉电记忆存储方法和装置。

背景技术

电器产品存在断电后数据丢失的风险,相关电器产品通常设置备用电源,以保证在断电后有足够的时间存储数据以防止数据丢失,但是备用电源所占空间较大。

目前的掉电记忆方法通常为:在MCU(Microcontroller Unit,微控制单元或单片机)掉电时,MCU通过掉电检测电路检测掉电信号,并利用储能电容延长MCU电平下降时间,在此期间MCU存储工作参数,直至储能电容不能维持MCU继续工作。在MCU存储工作参数时,首先需要将待存储写入的存储芯片擦除干净,然后再将数据写入存储片区中。由于成本和体积的限制,大多数储能电容通常小于500uF,其可维持MCU工作的时间较短,仅能维持几十毫秒,甚至几毫秒,而擦除储存芯片中一片扇区的时间通常不少于5ms。当需要存储的数据量较大时,由于芯片擦除时间较长,写入芯片中的时间被大量占用,在掉电时间内存储的数据量较少,且存在写入数据不完整或缺失的问题,稳定性较差。

发明内容

本发明的目的是要解决上述的技术问题,提供一种掉电记忆存储方法和装置,解决了现有技术中掉电时间内存储的数据量较少、稳定性较差的问题。

为了解决上述问题,本发明按以下技术方案予以实现的:

第一方面,本发明提供了一种掉电记忆存储方法,包括:

当MCU上电时,擦除第一数据存储区的数据,并将MCU当前工作数据写入第一数据存储区;

擦除第二数据存储区的数据;所述第一数据存储区和第二数据存储区为MCU内设有的可独立擦除的存储区;

当MCU接收到掉电信号时,将MCU当前工作数据写入第二数据存储区。

结合第一方面,本发明还提供了第一方面的第1种实施方式,在擦除第一数据存储区的数据前,还包括:

识别第一数据存储区和第二数据存储区中的有效数据;

读取第一数据存储区和第二数据存储区中的有效数据作为MCU当前工作数据。

结合第一方面,本发明还提供了第一方面的第2种实施方式,识别第一数据存储区和第二数据存储区中的有效数据,具体包括:

将第一数据存储区和第二数据存储区所存储的数据与预设数据范围进行对比,以识别有效数据。

结合第一方面,本发明还提供了第一方面的第3种实施方式,读取第一数据存储区和第二数据存储区中的有效数据作为MCU当前工作数据,具体包括:

读取第二数据存储区的数据作为当前工作数据;

若第二数据存储区的数据存在失效字节,则读取失效字节的存储地址,并以第一数据存储区的相同存储地址的有效字节替换失效字节写入当前工作数据;

若第一数据存储区的相同存储地址的数据为无效数据,则以该数据的出厂默认值写入当前工作数据。

结合第一方面,本发明还提供了第一方面的第4种实施方式,当MCU接收到掉电信号时,将MCU当前工作数据写入第二数据存储区,具体包括:

若检测出MCU的供电电压小于或等于MCU掉电检测电平阈值,则将MCU当前工作数据写入第二数据存储区。

第二方面,本发明提供了一种掉电记忆存储装置,包括:

第一擦除模块,所述第一擦除模块用于当MCU上电时,擦除第一数据存储区的数据,并将MCU当前工作数据写入第一数据存储区;

第二擦除模块,所述第二擦除模块用于擦除第二数据存储区的数据;所述第一数据存储区和第二数据存储区为MCU内设有的可独立擦除的存储区;

掉电数据写入模块,所述掉电数据写入模块用于当MCU接收到掉电信号时,将MCU当前工作数据写入第二数据存储区。

结合第二方面,本发明还提供了第二方面的第1种实施方式,还包括:

识别模块,所述识别模块用于识别第一数据存储区和第二数据存储区中的有效数据;

读取模块,所述读取模块用于读取第一数据存储区和第二数据存储区中的有效数据作为MCU当前工作数据。

结合第二方面,本发明还提供了第二方面的第2种实施方式,所述识别模块运行时,具体执行:

将第一数据存储区和第二数据存储区所存储的数据与预设数据范围进行对比,以识别有效数据。

结合第二方面,本发明还提供了第二方面的第3种实施方式,所述读取模块运行时,具体执行:

读取第二数据存储区的数据作为当前工作数据;

若第二数据存储区的数据存在失效字节,则读取失效字节的存储地址,并以第一数据存储区的相同存储地址的有效字节替换失效字节写入当前工作数据;

若第一数据存储区的相同存储地址的数据为无效数据,则以该数据的出厂默认值写入当前工作数据。

结合第二方面,本发明还提供了第二方面的第4种实施方式,所述掉电数据写入模块运行时,具体执行:

若检测出MCU的供电电压小于或等于MCU掉电检测电平阈值,则将MCU当前工作数据写入第二数据存储区。

与现有技术相比,本发明的有益效果是:

本申请实施例中,通过在MCU内部提供可独立擦除的第一数据存储区和第二数据存储区,在MCU上电时,就擦除第一数据存储区的数据,并将MCU的当前工作参数写入第一数据存储区中,即可保存当前有效的工作参数,并在写入第一数据存储区完成后,将第二数据存储区的数据进行擦除,当接收到掉电信号时,可直接将MCU的当前数据写入已擦除完毕的第二数据存储区中,避免擦除第二数据存储区的扇区占用写入数据的时间,在掉电时只进行数据写入,而数据写入时间很短,故可实现大数据量掉电记忆。即使第二数据存储区所存储的数据不完整,第一数据存储区也完整保存有上一次有效的MCU工作参数,稳定性较好。

附图说明

下面结合附图对本发明的具体实施方式作进一步详细的说明,其中:

图1是本发明的掉电记忆存储方法的应用框图;

图2是本发明的掉电记忆存储方法的流程示意图;

图3是本发明的掉电记忆存储装置的结构示意图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。

在测量和控制等领域,通常采用掉电记忆方法将MCU内部数据和外部数据进行保存,常要求MCU内部和外部RAM中的数据在电源掉电时不丢失,重新加电时,RAM(RandomAccess Memory,随机存取存储器)中的数据能够保存完好,这就要求对MCU加接掉电保护电路。掉电保护通常可采用以下三种方法:一是加接不间断电源,让整个系统在掉电时继续工作,二是采用备份电源或储能电容短时间维持MCU的电平,在此期间对工作参数进行存储;三是采用EEPROM(Electrically Erasable Programmable read only memory,带电可擦可编程只读存储器)来保存数据。由于不间断加电源和设置备用电源占用的体积大、成本高,对单片机系统来说,不宜采用。第三种方法中,EEPROM既具有ROM(Read-Only Memory,只读存储器)掉电不丢失数据的特点,又有RAM随机读写的特点,但由于其读写速度与读写次数的限制,使得EEPROM不能完全代替RAM。

目前的掉电记忆方法通常为:在MCU掉电时,MCU通过掉电检测电路检测掉电信号,并利用储能电容延长MCU电平下降时间,在此期间MCU存储工作参数,直至储能电容不能维持MCU继续工作。

在MCU存储工作参数时,首先需要将待存储写入的存储芯片擦除干净,然后再将数据写入存储片区中。由于成本和体积的限制,多数储能电容的大小通常为100~470uF,而掉电电流的大小通常为10~50mA,储能电容可维持MCU工作的时间较短,仅可维持MCU持续工作几十毫秒,甚至几毫秒。而擦除储存芯片中一片扇区的时间通常不少于5ms,对于大数据量的MCU来说,由于芯片擦除时间较长,写入芯片中的时间被大量占用,在掉电时间内存储的数据量较少,且存在写入数据不完整或缺失的问题,稳定性较差。此外,还由于储能电容的容量随着存放和使用会一定程度的下降,在设置储能电容时要预留一倍以上的裕量,而在储能电容容量有限的前提下,擦除时间是一个不可忽略的长时间段,对掉电时间内数据写入量有较大的影响。例如,储能电容的容量为470uF,掉电电流大小为5mA,当MCU从3V掉电至2V时,则依据公式t=(u-u

如图1所示,本实施例通过在MCU内部设置可独立擦除的第一数据存储区和第二数据存储区,并通过掉电检测模块检测MCU是否掉电,在MCU外设有储能电容,通过储能电容给掉电后的MCU供能,以维持MCU将工作参数写入第二数据存储区中。

实施例1

如图2所示,本发明提供一种掉电记忆存储方法,包括以下步骤:

步骤S1:当MCU上电时,擦除第一数据存储区的数据,并将MCU当前工作数据写入第一数据存储区;

步骤S2:擦除第二数据存储区的数据;所述第一数据存储区和第二数据存储区为MCU内设有的可独立擦除的存储区;

步骤S3:当MCU接收到掉电信号时,将MCU当前工作数据写入第二数据存储区。

本申请实施例中,通过在MCU内部提供可独立擦除的第一数据存储区和第二数据存储区,在MCU上电时,就擦除第一数据存储区的数据,并将MCU的当前工作参数写入第一数据存储区中,即可保存当前有效的工作参数,并在写入第一数据存储区完成后,将第二数据存储区的数据进行擦除,当接收到掉电信号时,可直接将MCU的当前数据写入已擦除完毕的第二数据存储区中,避免擦除第二数据存储区的扇区占用写入数据的时间,在掉电时只进行数据写入,而数据写入时间很短,故可实现大数据量掉电记忆。即使第二数据存储区所存储的数据不完整,第一数据存储区也完整保存有上一次有效的MCU工作参数,稳定性较好。

步骤S1:当MCU上电时,擦除第一数据存储区的数据,并将MCU当前工作数据写入第一数据存储区。

在MCU接通电源后,MCU调用保存完整且有效的运行参数,由于第二数据存储区所存储数据的保存时间通常晚于第一数据存储区所存储数据的保存时间,通常调用第二数据存储区存储的数据作为最新的运行参数。并在成功运行后,擦除第一数据存储区的数据,使第一数据存储区的扇区被擦除干净,并将当前运行参数写入第一数据存储区内作为备份数据。

步骤S2:擦除第二数据存储区的数据;所述第一数据存储区和第二数据存储区为MCU内设有的可独立擦除的存储区。

当保存完毕第一数据存储区的数据后,擦除第二数据存储区的数据,使第二数据存储区成为可随时写入数据的状态,便于接收到断电信号时,直接写入当前MCU的工作参数数据,避免擦除第二数据存储区的扇区占用写入数据的时间。

第一数据存储区和第二数据存储区作为MCU内设有的可独立擦除的存储区,其写入速度和擦除速度均优于外部存储RAM和EEPROM,可在接收到掉电时间段内,写入更多的数据,以保证数据的完整性和稳定性。

步骤S3:当MCU接收到掉电信号时,将MCU当前工作数据写入第二数据存储区。

通过储能电容给MCU进行供电,以维持MCU将工作数据写入第二数据存储区,可减少成本和占用空间。在MCU掉电过程中,存在瞬间电压不稳定的现象,本实施例中掉电检测模块采用MCU内部可编程电压检测器进行电压检测,具体为:若检测出MCU的供电电压小于或等于MCU掉电检测电平阈值,则将MCU当前工作数据写入第二数据存储区。

可编程电压检测器设有若干等级,每一等级的掉电检测电平阈值不相同,可根据MCU的实际工作情况设定掉电检测电平阈值。例如,MCU的稳定供电电压为2.1~5.5V,通常掉电检测电平阈值比掉电复位电压高1V左右,即小于或等于复位电压2.1V时会产生掉电复位,则可将掉电检测电平阈值设定为3V,这样即可在MCU掉电时,能够快速检测到MCU出现掉电,并且也可避免轻微电压波动干扰下误触发掉电信号。

在一优选实施例中,在掉电信号中加入静态变量标记,当MCU接收到有静态变量标记的掉电信号时,才向第二数据存储区写入数据。由于在MCU掉电瞬间电压波动较大,存在反复触发掉电信号的问题,造成MCU反复向第二数据存储区写入工作参数数据,而从第二次写入数据时,由于第二数据存储区未被擦除,容易造成数据紊乱。静态变量标记在MCU中仅有一个副本,有且仅有初次生成的掉电信号中存在该静态变量标记副本,之后的掉电信号中不存在静态变量标记副本,即可避免在波动电压下反复向MCU中写入工作参数数据的问题,并在MCU再次通电后,在MCU中创建该静态变量标记副本。

在擦除第一数据存储区的数据前,还包括:

步骤S4:识别第一数据存储区和第二数据存储区中的有效数据。

在步骤S4中,将第一数据存储区和第二数据存储区所存储的数据与预设数据范围进行对比,以识别有效数据。例如,开关机数据只有0和1两个数值,若出现其他数值,则该数据为无效数据。再例如,温度数据的有效数据范围为30~50,若出现在这个范围外的数据,均为无效数据。

步骤S5:读取第一数据存储区和第二数据存储区中的有效数据作为MCU当前工作数据。

步骤S5具体包括:

步骤S501:读取第二数据存储区的数据作为当前工作数据。

步骤S502:若第二数据存储区的数据存在失效字节,则读取失效字节的存储地址,并以第一数据存储区的相同存储地址的有效字节替换失效字节写入当前工作数据。

步骤S503:若第一数据存储区的相同存储地址的数据为无效数据,则以该数据的出厂默认值写入当前工作数据。

在步骤S501~S503中,按照数据的存储地址顺序,先读取第二数据存储区的第一条数据A,并识别第一条数据A是否为有效数据,若该条数据为有效数据,则以该条数据作为当前数据写入MCU中,并读取和识别下一条数据,直至全部数据写入MCU中。若第一条数据A存在失效字节,则读取第一条数据A的存储地址,并在第一数据存储区寻找相同存储地址的数据A

综上所述,本发明方法执行时,一方面,在MCU上电时,就擦除第一数据存储区的数据,将MCU的当前工作参数写入第一数据存储区中,并擦除第二数据存储区的数据,使第二数据存储区成为可随时写入数据的状态,便于接收到断电信号时,直接写入当前MCU的工作参数数据,避免擦除第二数据存储区的扇区占用写入数据的时间,在掉电时只进行数据写入,而数据写入时间很短,故可实现大数据量掉电记忆;另一方面,由于各个工作参数是独立备份和恢复的,任何工作参数的错误都不会影响其他工作参数的恢复,且任何一个工作参数,只有在两个存储区的相应位置都无效时,才恢复出厂默认值,这种情况在MCU首次上电后几乎不存在,故数据恢复非常可靠。

本实施例所述掉电记忆存储方法的其它步骤参见现有技术。

实施例2

如图3所示,第二方面,本发明公开了一种掉电记忆存储装置,包括第一擦除模块M1、第二擦除模块M2、和掉电数据写入模块M3。

第一擦除模块M1用于当MCU上电时,擦除第一数据存储区的数据,并将MCU当前工作数据写入第一数据存储区;

第二擦除模块M2用于擦除第二数据存储区的数据;所述第一数据存储区和第二数据存储区为MCU内设有的可独立擦除的存储区;

掉电数据写入模块M3用于当MCU接收到掉电信号时,将MCU当前工作数据写入第二数据存储区。

针对第二方面,还包括第1种优选实施,还包括识别模块M4和读取模块M5。

识别模块M4用于识别第一数据存储区和第二数据存储区中的有效数据;

读取模块M5用于读取第一数据存储区和第二数据存储区中的有效数据作为MCU当前工作数据。

针对第二方面,还包括第2种优选实施,所述识别模块M4运行时,具体执行:

将第一数据存储区和第二数据存储区所存储的数据与预设数据范围进行对比,以识别有效数据。

针对第二方面,还包括第3种优选实施,所述读取模块M5运行时,具体执行:

读取第二数据存储区的数据作为当前工作数据;

若第二数据存储区的数据存在失效字节,则读取失效字节的存储地址,并以第一数据存储区的相同存储地址的有效字节替换失效字节写入当前工作数据;

若第一数据存储区的相同存储地址的数据为无效数据,则以所述存储地址的出厂默认数据写入当前工作数据。

针对第二方面,还包括第4种优选实施,所述掉电数据写入模块M3运行时,具体执行:

若检测出MCU的供电电压小于或等于MCU掉电检测电平阈值,则将MCU当前工作数据写入第二数据存储区。

综上所述,本实施例所述装置在运行时,能实现实施例1中所述的掉电记忆存储方法的全部步骤,以实现实施例1中所达到的技术效果。

本实施例所述的掉电记忆存储装置的其它结构参见现有技术。

实施例3

本发明还公开一种电子设备,包括至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,所述至少一个处理器执行指令时,具体实现以下的步骤:

当MCU上电时,擦除第一数据存储区的数据,并将MCU当前工作数据写入第一数据存储区;

擦除第二数据存储区的数据;所述第一数据存储区和第二数据存储区为MCU内设有的可独立擦除的存储区;

当MCU接收到掉电信号时,将MCU当前工作数据写入第二数据存储区。

实施例4

本发明还公开一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时,具体实现以下步骤:

当MCU上电时,擦除第一数据存储区的数据,并将MCU当前工作数据写入第一数据存储区;

擦除第二数据存储区的数据;所述第一数据存储区和第二数据存储区为MCU内设有的可独立擦除的存储区;

当MCU接收到掉电信号时,将MCU当前工作数据写入第二数据存储区。

本公开可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,上述编程语言包括面向对象的编程语言—诸如Smalltalk、C++、Java等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。以上已经描述了本公开的各实施方式,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施方式。在不偏离所说明的各实施方式的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施方式的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文披露的各实施方式。

技术分类

06120114702943