一种基于硬拷贝的MCU模拟EEPROM的数据保护方法
文献发布时间:2023-06-19 10:16:30
技术领域
本发明涉及电子技术领域,具体涉及一种基于硬拷贝的MCU模拟EEPROM的数据保护方法。
背景技术
很多的MCU控制器不带有,但是我们有时候鉴于成本的考虑又不想外扩EEPROM,所以经常用Flash来模拟EEPROM存储,编程和擦除操作的灵活性使得它适合用于断电时必须保留的,以及在运行时需要单独更新的应用变量的数据存储。NVM所存储的数据中,很多关键数据是不能丢失的,比如电机控制中的转子初始位置,整车的零件号等重要信息,当NVM出现异常并不能进行自动修复时会导致MCU不能正常启动,这时我们需要对NVM进行擦写操作,擦写后NVM中的所有数据都丢失了,这时我们就有必要找出一种方法来保证在NVM出现异常后能恢复我们所需要的关键数据。
现有EEPROM的数据保护方法基本为以下两种:
1、外部EEPROM的数据保护方法:使用硬件手段对EEPROM的写操作进行了保护;通过使用户编程来启动或禁止软件控制的数据保护功能。
2、将外部EEPROM分为数据区和备份区,数据区损坏,使用备份区数据进行恢复,备份区损坏,使用CRC16算法与RAID5对备份区以及数据区的数据进行恢复。
基于上述情况,本发明提出了一种基于硬拷贝的MCU模拟EEPROM的数据保护方法,可有效解决以上问题。
发明内容
本发明的目的在于提供一种基于硬拷贝的MCU模拟EEPROM的数据保护方法。本发明的基于硬拷贝的MCU模拟EEPROM的数据保护方法通过NVM和FLASH的配合使用,实现了将NVM数据硬拷贝到FLASH上,保证了在NVM出现异常后能恢复所需要的关键数据。
本发明通过下述技术方案实现:
一种基于硬拷贝的MCU模拟EEPROM的数据保护方法,所述方法包括以下步骤:
步骤S1:在Flash定义一段内存区域用于NVM数据的硬拷贝;
步骤S2:上电初始化时先判断NVM的状态是否存在异常;若存在异常,则进入步骤S21;若不存在异常,则进入步骤S3;
步骤S21:判断NVM能否进行自恢复;若能进行自恢复,则进入步骤S3;若不能进行自恢复,则需要对NVM进行擦除操作;
步骤S3:判断NVM是否进行过写访问操作;若进行过写访问操作,则将NVM中的数据作为NVM的初始化数据;若没进行过写访问操作,则将硬拷贝Flash中的数据作为NVM的初始化数据;
步骤S4:判断NVM初始化数据和硬拷贝Flash数据是否一致;若一致,则进入步骤S5;若不一致,则进入步骤S41;
步骤S41:擦除硬拷贝Flash中的数据,并将NVM初始化数据拷贝到硬拷贝Flash中;
步骤S5:分别对NVM初始化数据和硬拷贝Flash数据进行CRC校验;若校验通过,则进行下一步;若校验不通过,则进入步骤S41。
本发明的目的在于提供一种基于硬拷贝的MCU模拟EEPROM的数据保护方法。本发明的基于硬拷贝的MCU模拟EEPROM的数据保护方法通过NVM和FLASH的配合使用,实现了将NVM数据硬拷贝到FLASH上,保证了在NVM出现异常后能恢复所需要的关键数据。
优选的,所述步骤S1中需要在Flash中开辟一段内存区域用于NVM数据的硬拷贝,该内存区域需具有可读、可擦、可写功能。
优选的,在程序运行过程中,当检测到NVM异常,不需要立即对NVM进行异常处理。
优选的,在下电过程中,满足下电条件时计时器开始计时,若NVM存储失败,则强制下电。
优选的,在使用BootLoader进行更新应用程序过程中,在进入刷写模式前判断NVM中的数据和硬拷贝Flash中的数据是否一致;若不一致,将NVM中的数据拷贝到硬拷贝Flash中并擦除NVM,待APP更新完成后,将硬拷贝Flash中的数据写入到NVM中。
优选的,当所述计时器计时小于10s且NVM数据存储完成,进行正常下电;当计时器计时大于等于10s时,若NVM数据存储仍未完成,则做强制下电处理。
本发明与现有技术相比,具有以下优点及有益效果:
本发明的基于硬拷贝的MCU模拟EEPROM的数据保护方法通过NVM和FLASH的配合使用,实现了将NVM数据硬拷贝到FLASH上,保证了在NVM出现异常后能恢复所需要的关键数据。
附图说明
图1为本发明上电初始化的流程图;
图2为本发明运行过程中NVM数据保护流程图;
图3为本发明程序刷写NVM数据保护流程图。
具体实施方式
为了使本领域的技术人员更好地理解本发明的技术方案,下面结合具体实施例对本发明的优选实施方案进行描述,但是应当理解,附图仅用于示例性说明,不能理解为对本专利的限制;为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。附图中描述位置关系仅用于示例性说明,不能理解为对本专利的限制。
实施例1:
如图1至3所示,一种基于硬拷贝的MCU模拟EEPROM的数据保护方法,所述方法包括以下步骤:
步骤S1:在Flash定义一段内存区域用于NVM数据的硬拷贝;
步骤S2:上电初始化时先判断NVM的状态是否存在异常;若存在异常,则进入步骤S21;若不存在异常,则进入步骤S3;
步骤S21:判断NVM能否进行自恢复;若能进行自恢复,则进入步骤S3;若不能进行自恢复,则需要对NVM进行擦除操作;
步骤S3:判断NVM是否进行过写访问操作;若进行过写访问操作,则将NVM中的数据作为NVM的初始化数据;若没进行过写访问操作,则将硬拷贝Flash中的数据作为NVM的初始化数据;
步骤S4:判断NVM初始化数据和硬拷贝Flash数据是否一致;若一致,则进入步骤S5;若不一致,则进入步骤S41;
步骤S41:擦除硬拷贝Flash中的数据,并将NVM初始化数据拷贝到硬拷贝Flash中;
步骤S5:分别对NVM初始化数据和硬拷贝Flash数据进行CRC校验;若校验通过,则进行下一步;若校验不通过,则进入步骤S41。分别对HardCopy_Flash和HardCopy_Flash_RAM进行CRC16校验。循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力的校验码。
实施例2:
如图1至3所示,一种基于硬拷贝的MCU模拟EEPROM的数据保护方法,所述方法包括以下步骤:
步骤S1:在Flash定义一段内存区域用于NVM数据的硬拷贝;使用参数HardCopy_Flash作为硬拷贝Flash中的数据,Flash为可重复擦写的程序存储器,NVM和EEPROM均为非易失性存储器。
步骤S2:上电初始化时先判断NVM的状态是否存在异常;若存在异常,则进入步骤S21;若不存在异常,则进入步骤S3;
步骤S21:判断NVM能否进行自恢复;若能进行自恢复,则进入步骤S3;若不能进行自恢复,则需要对NVM进行擦除操作;检测到NVM异常后进行自恢复,如果恢复失败,则擦除NVM异常所在的block。
步骤S3:判断NVM是否进行过写访问操作,使用NvM_ReadAll()读取NVM中的数据并将重要数据,如所读取到的数据均为初始值即0xFF,则NVM未进行过任何写访问操作;若进行过写访问操作,则将NVM中的数据作为NVM的初始化数据,将NVM的值赋给HardCopy_Flash_RAM,使用NVM中读出的值作为NVM的初始值;若没进行过写访问操作,则将硬拷贝Flash中的数据作为NVM的初始化数据,将HardCopy_Flash的值赋给HardCopy_Flash_RAM,使用硬拷贝Flash中的值作为NVM的初始值;
步骤S4:判断NVM初始化数据和硬拷贝Flash数据是否一致;若一致,则进入步骤S5;若不一致,则进入步骤S41;
步骤S41:擦除硬拷贝Flash中的数据,并将NVM初始化数据拷贝到硬拷贝Flash中;
步骤S5:分别对NVM初始化数据和硬拷贝Flash数据进行CRC校验;若校验通过,则进行下一步;若校验不通过,则进入步骤S41。分别对HardCopy_Flash和HardCopy_Flash_RAM进行CRC16校验。循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力的校验码。
进一步地,在另一个实施例中,所述步骤S1中的内存区域需具有可读、可擦、可写功能。
进一步地,在另一个实施例中,在程序运行过程中,当检测到NVM异常,不需要立即对NVM进行异常处理。
程序运行过程中,当出现NVM读写访问的需求时,NVM可能会出现异常,对NVM异常进行实时监测,如出现ECC错误、NVM中数据不能被识别等,只需要记录DTC不需要立即对NVM进行处理操作。
进一步地,在另一个实施例中,在下电过程中,满足下电条件时计时器开始计时,若NVM存储失败,则强制下电。
满足NVM存储条件时,使用NvM_WriteAll()函数进行下电存储操作。10s内,NVM存储完成则进入睡眠状态,否则强制休眠。
进一步地,在另一个实施例中,在使用BootLoader进行更新应用程序过程中,在进入刷写模式前判断NVM中的数据和硬拷贝Flash中的数据是否一致;若不一致,将NVM中的数据拷贝到硬拷贝Flash中并擦除NVM,待APP更新完成后,将硬拷贝Flash中的数据写入到NVM中。
使用BootLoader进行应用程序更新时,进入刷写模式前先进行刷写条件的判断。将HardCopy_Flash_RAM读取硬拷贝Flash中的数据并将其和NVM的值进行比较以判断是否需要进行硬拷贝。如果比较结果不一致,则需要进行硬拷贝。将NVM的值赋给HardCopy_Flash_RAM。对硬拷贝Flash进行擦除操作,擦除完成后,将HardCopy_Flash_RAM写入到硬拷贝Flash中。分别对HardCopy_Flash和HardCopy_Flash_RAM进行CRC16校验。对NVM进行擦除操作,擦除完成后,直接进入刷写模式进行应用程序刷写。应用程序更新完成后,将硬拷贝Flash中的数据写入到NVM中并进行校验。
进一步地,在另一个实施例中,当所述计时器计时小于10s且NVM数据存储完成,进行正常下电;当计时器计时大于等于10s时,若NVM数据存储仍未完成,则做强制下电处理。
依据本发明的描述及附图,本领域技术人员很容易制造或使用本发明的基于硬拷贝的MCU模拟EEPROM的数据保护方法,并且能够产生本发明所记载的积极效果。
如无特殊说明,本发明中,若有术语“长度”、“宽度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”、“顺时针”、“逆时针”、“轴向”、“径向”、“周向”等指示的方位或位置关系是基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此本发明中描述方位或位置关系的用语仅用于示例性说明,不能理解为对本专利的限制,对于本领域的普通技术人员而言,可以结合附图,并根据具体情况理解上述术语的具体含义。
除非另有明确的规定和限定,本发明中,若有术语“设置”、“相连”及“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。
- 一种基于硬拷贝的MCU模拟EEPROM的数据保护方法
- 一种EEPROM数据保护方法