一种基于mcu的flash不丢失更新存储方法

文档序号:6543539阅读:138来源:国知局
一种基于mcu的flash不丢失更新存储方法
【专利摘要】本发明公开了一种基于MCU的FLASH不丢失更新存储方法,通过将同一数据分别存储在FLASH的主存储区和备份存储区,在更新数据时先擦除并更新主存储区,然后更新擦除备份存储区。如果在擦除主存储区时发生掉电等异常情况,导致MCU的RAM和FLASH主存储区数据丢失,则备份存储区不受影响,数据完整,保持更新前的值,如果在擦除备份存储区时发生掉电等异常情况,导致MCU的RAM和FLASH备份存储区数据丢失,则主存储区不受影响,数据完整,保持更新后的值。因此能在发生意外的情况下保持数据的完整性,保证光模块的正常运行。
【专利说明】—种基于MCU的FLASH不丢失更新存储方法
【技术领域】
[0001]本发明涉及光模块数据储存领域,尤其涉及一种基于MCU的FLASH不丢失更新存储方法。
【背景技术】
[0002]在光模块中需要EEPROM存储空间以便存储模块本身的特性参数和用户或厂商的识别信息,其中用户或厂商信息可能由用户改写。光模块在使用中需要确保其参数的正确性,因此对光模块的任何EEPROM信息改写不能造成信息的错误。当前,由于EEPR0M,写入时间很长,写入很慢,EEPROM不能用来存程序,通常单片机的指令寻址不能到这个区域,因此现在EEPROM只在低端设备上使用。大部分光模块均使用FLASH代替EEPROM作为存储空间,FLASH对芯片提供大块或整块的擦除,这就降低了设计的复杂性,它可以不要EEPROM单元里那个多余的Tansister,所以可以做到高集成度,大容量,另FLASH的浮栅工艺上也不同,写入速度更快。
[0003]光通信用光收发模块中使用FLASH作为存储空间,MCU需要模拟EEPROM功能,主机能够通过I2C接口对FLASH进行读写操作,并要求能够实现写入后即能保存功能。当需要进行更新时,模块内部MCU会读出当前字节对应页的内容,并将对应字节更改,然后擦除对应FLASH页,再将RAM中对应内容写入FLASH页,至此完成整个动作。如果在模块擦除FLASH页的时候模块掉电或者被用户拔出则会造成当前FLASH页的数据丢失,影响模块性能。
[0004]如图1所示为现有的基于MCU的FLASH更新储存方法的基本流程方法。该方法主要有读出对应页数据至MCU的RAM中并更新对应字节,擦除MCU对应页,将对应RAM数据写入对应页中几大步骤。由于MCU的FLASH擦除以页为最小单位,因此在更新某一个或者几个FLASH地址的值时,需要先将整页的FLASH数据读出至RAM中并修改需要更新的字节,然后擦除当前页,在将当RAM内更新后的页的数据写入至FLASH中,完成FLASH更新操作。
[0005]在现有技术的下,因插拔皆有人为操作,无法判定模块中的FLASH中的数据是否更新完成,因此在某一时刻拔下模块(具有随机性和不确定性当前是否有数据写入),如果模块内的MCU正在进行FLASH更新操作,则会出现以下情况:MCU将FLASH数据已经读出至RAM中,MCU已经将对应FLASH擦除,此时MCU掉电,MCU中的RAM数据丢失,FLASH数据丢失。当模块再次上电时将无法从对应FLASH地址读出正确的数据,这将造成该模块无法正常使用。

【发明内容】

[0006]本发明针对现有技术的弊端,针对上述问题,提供一种基于MCU的FLASH不丢失更新存储方法,本发明通过将储存器分为主储存区和备份储存区,数据同时存入主储存区和备份储存区,在更新数据时先擦除并更新主存储区,然后更新擦除备份存储区。如果在擦除主存储区时掉电,则备份存储区不受影响,数据完整,保持更新前的值,如果在擦除备份存储区时掉电,则主存储区不受影响,保持更新后的值,因此可保证FLASH数据任何时候不丢失,模块能正常运行。并且通过增设一种简明的鉴别机制及在主储存区每页末尾写入一定长度的字节数作为本页有效性鉴别标志。当上电才初始化时,MCU对有效性鉴别标志进行判断,如果存在,说明更新成功,MCU复制主存储区数据至备份存储区;若有效性鉴别标志不存在,说明更新不成功,MCU复制备份存储区数据至主存储区,保证数据的完整性。
[0007]本发明的技术方案为:
[0008]一种基于MCU的FLASH不丢失更新存储方法,其中包括以下步骤:
[0009]步骤一、将MCU的FLASH划分为主存储区和备份存储区,所述主存储区具有多个对应页,且所述备份存储区具有等数的相应对应页,将待存储的数据的所有字节依次分别存储到所述主存储区的一个对应页和所述备份储存区的相应对应页,并且在主存储区的该对应页存储完所述数据的最后一个字节时,添加一个预定的有效性鉴别标志;
[0010]步骤二、更新主存储区的对应页上的数据时,MCU读出该对应页上的数据至MCU的RAM中并更新待修改的字节,然后MCU擦除中主存储区中该对应页上存储的数据,然后将RAM中更新后的数据的所有字节依次写入主存储区中该对应页上,
[0011]如果写完最后一个字节时,则在主存储区中该对应页上再写入该预定的有效性鉴别标志数据,之后MCU擦除备份存储区的相应对应页上的数据,再将RAM中更新后的数据的所有字节依次写入备份储区中该对应页上,如果写完最后一个字节时,则再写入该预定的有效性鉴别标志数据;
[0012]如果未写完所有字节,则不在主存储区中该对应页上写入该预定的有效性鉴别标志数据;
[0013]步骤三、MCU执行上电初始化操作,即MCU检测主存储区的对应页上是否存在所述预定的有效性鉴别标志,如果存在,MCU将读取主存储区的该对应页上存储的数据至RAM,然后删除备份存储区数据,再将RAM内数据写入备份存储区;如果不存在,则MCU读出备份储存区的相应对应页上存储的数据至RAM,然后删除主存储区上的数据,再将RAM内的数据写入到相应的主存储区的对应页上。
[0014]优选的所述的基于MCU的FLASH不丢失更新存储方法,其中,在所述步骤三中,如果不存在,则显示数据未更新成功。
[0015]优选的所述的基于MCU的FLASH不丢失更新存储方法,其中,所述预定的有效性鉴别标志写入在对应页的特定位置处,所述MCU至所述特定位置处查找所述预定的有效性鉴别标志是否存在。
[0016]优选的所述的基于MCU的FLASH不丢失更新存储方法,其中,所述特定位置为对应页末端的最后4个字节位置。
[0017]优选的所述的基于MCU的FLASH不丢失更新存储方法,其中,所述预定的有效性鉴别标志为非0X00和非OXFF的特定数据。
[0018]优选的所述的基于MCU的FLASH不丢失更新存储方法,所述主存储区和备份存储区的划分方式为:在MCU中程序代码需要占用部分FLASH空间,剩余部分可作为数据储存区域模拟EEPR0M,主存储区和对应的备份存储区大小一致,且以MCU —页数据大小为基本单位,最小为一个单位及一页数据的主存储区和一页数据的备份存储区,主存储区和备份存储区的起始地址可以在非程序代码区域任意指定,主存储区和备份存储区不能有重复区域,该起始地址一经指定即固化于程序代码中不可更改,程序代码通过读写对应的起始地址以区分主存储区和备份存储区。
[0019]优选的所述的基于MCU的FLASH不丢失更新存储方法,所述步骤三发生异常情况包括:删除主存储区对应页数据后,或者在写入对应页数据且未写入有效性鉴别标志数据前发生异常情况导致数据丢失后,此时进行的步骤二具体方式为:在系统上电初始化时MCU检测主存储区的有效性鉴别标志是否存在,由于有效性鉴别标志被删除,MCU自动读取备份储存区对应页数据至RAM中并将RAM内数据写入到主储存区对应页,此时保存的数据为更新前数据;
[0020]当异常情况为主存储区更新完毕,MCU删除备份存储区对应页数据或者在将RAM内数据写入至备份存储区对应页且未完成时候发生异常情况导致数据丢失,此时进行的步骤二具体方式为:在系统上电初始化时MCU检测主存储区的有效性鉴别标志是否存在,检测为存在,MCU自动读取主储存区对应页数据至RAM中并将RAM内数据写入到备份储存区对应页此时保存的数据为更新后数据。
[0021]本发明具有以下有益效果:本发明通过将储存器分为主储存区和备份储存区,数据同时存入主储存区和备份储存区,在更新数据时先擦除并更新主存储区,然后更新擦除备份存储区。如果在更新主存储区时掉电等异常情况,则备份存储区不受影响,数据完整,保持更新前的值,如果在更新备份存储区时掉电等异常情况,则主存储区不受影响,保持更新后的值,因此可保证FLASH数据任何时候不丢失,模块能正常运行。并且通过增设一种简明的鉴别机制以鉴别主储存区和备份存储区的数据有效性,当及在主储存区每页末尾写入一定长度的字节数作为本页有效性鉴别标志,在页擦除时该有效性鉴别标志数据被擦除,在写入数据时先写入用户数据,最后写入有效性鉴别标志数据,如果上电初始化时候,有效性鉴别标志判定为有效,则可以证明用户数据更新成功,如果有效性鉴别标志判定为无效,则MCU会复制备份存储区数据至主存储区,保证数据的完整。
【专利附图】

【附图说明】:
[0022]图1现有基于MCU的FLASH更新储存方法
[0023]图2 —种基于MCU的FLASH不丢失更新存储方法
[0024]图3 —种基于MCU的FLASH不丢失更新存储方法的上电初始化
[0025]图4 一种基于MCU的FLASH不丢失更新存储方法的数据更新方法
[0026]图5FLASH主存储区和备份存储区的设定和区分
【具体实施方式】:
[0027]下面结合附图2-5对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
[0028]如图5所示,在MCU中程序代码需要占用部分FLASH空间,剩余部分可作为数据储存区域模拟EEPR0M。图5给出了主存储区和备份存储区的设定和区分方法。主存储区和对应的备份存储区大小应该一致,且以MCU—页数据大小为基本单位,最小为一个单位及一页数据的主存储区和一页数据的备份存储区。主存储区和备份存储区的起始地址可以在非程序代码区域任意指定,但主存储区和备份存储区不能有重复区域,该起始地址一经指定即固化于程序代码中不可更改,程序代码通过读写对应的起始地址以区分主存储区和备份存储区。将主存储区域每页的末端4个字节作为数据有效性的标志位,对应的备份存储区每页末端4个字节数据为保留数据(由于算法保障此处作为数据有效性已无实际意义)。数据有效性标志以非OXOO和OXFF的特定数据作为标志代码固化于程序代码中并且不可更改(如{Oxaa, 0x55, Oxaa, 0x55})。
[0029]如图2所示,一般情况下一种基于MCU的FLASH不丢失更新存储方法,包括开始,上电初始化,更新FLASH,结束这几步。其具体的原理如图4所示,将MCU的FLASH划分为主存储区和备份存储区,同一数据分别存储到主存储区和备份储存区的对应页,其中,在主存储区对应页页末地址,提供一定长度的字节数如非OXFF和非0X00作为本页有效性鉴别标志。
[0030]更新存储数据时,主机读出MCU中flash主存储区需更新存储对应页数据至MCU的RAM中并更新对应字节,然后擦除MCU中flash主存储区对应页数据,此时由于FLASH自身设计,擦除后主存储区中的有效性鉴别标志数据将变为OXFF或者0X00数据,然后将RAM内更新后的对应数据写入flash主存储区对应页,然后在页末地址写入有效性鉴别标志非OXFF和非0X00数据;若一切正常时擦除flash备份储存区对应页数据,将对应RAM数据写入flash备份存储区对应页,有效性鉴别标志作为保留数据写入末页地址。
[0031]当MCU对FLASH主存储区进行擦除数据后或者将RAM数据写入主储存区时,如果此时发生掉电等异常情况,RAM内数据将会丢失,此时擦除的MCU中flash主存储区对应页数据丢失,页末的有效性鉴别标志非OXFF和非0X00数据被擦除,变为OXFF或者0X00,MCU判定主存储区数据为无效;如果将有效性鉴别标志写入主存储区时发生掉电等异常情况,则RAM内数据将会丢失,页末的有效性鉴别标志由于还未写入,仍然为OXFF或者0X00,MCU判定主存储区数据为无效;如图3所示在系统上电初始化时MCU对主存储区对应页有效性进行判断,由于有效性鉴别标志不存在,有效性判断为无效,MCU自动复制备份储存区对应页数据至RAM内并将RAM内数据写入到主储存区对应页,从而保证上电后主储存区和备份储存区的数据一致性,避免读取FLASH数据时对主储存区和备份储存区的区别,此时保存的数据为更新前数据。
[0032]当在擦除flash备份储存区对应页数据后发生掉电等异常情况,RAM内数据丢失,flash备份储存区对应页数据丢失;如图3所示在系统上电初始化时MCU对主存储区有效性进行判断,由于有效性鉴别标志不存在,有效性判断为有效,MCU自动复制主储存区对应页数据到RAM内并从RAM内写入到备份储存区对应页,从而保证上电后主储存区和备份储存区的数据一致性,避免读取FLASH数据时对主储存区和备份储存区的区别,此时保存的数据为更新后数据。
[0033]实施例:当进行上电初始化时候,如下代码所示,宏定义的主存储区开始地址为XFP_A0_TAB1_R0M,有效性鉴别数据校验字节区域为XFP_A0_TAB1_R0M宏定义的主存储区开始地址偏移Oxlfb,有效性鉴别标志数据为Oxaa, 0x55,Oxaa, 0x55,如下代码所示:
[0034]
【权利要求】
1.一种基于MCU的FLASH不丢失更新存储方法,其特征在于包括以下步骤: 步骤一、将MCU的FLASH划分为主存储区和备份存储区,所述主存储区具有多个对应页,且所述备份存储区具有等数的相应对应页,将待存储的数据的所有字节依次分别存储到所述主存储区的一个对应页和所述备份储存区的相应对应页,并且在主存储区的该对应页存储完所述数据的最后一个字节时,添加一个预定的有效性鉴别标志; 步骤二、更新主存储区的对应页上的数据时,MCU读出该对应页上的数据至MCU的RAM中并更新待修改的字节,然后MCU擦除中主存储区中该对应页上存储的数据,然后将RAM中更新后的数据的所有字节依次写入主存储区中该对应页上; 如果写完最后一个字节时,则在主存储区中该对应页上再写入该预定的有效性鉴别标志数据,之后MCU擦除备份存储区的相应对应页上的数据,再将RAM中更新后的数据的所有字节依次写入备份储区中该对应页上,如果写完最后一个字节时,则再写入该预定的有效性鉴别标志数据; 如果未写完所有字节,则不在主存储区中该对应页上写入该预定的有效性鉴别标志数据; 步骤三、MCU执 行上电初始化操作,即MCU检测主存储区的对应页上是否存在所述预定的有效性鉴别标志,如果存在,MCU将读取主存储区的该对应页上存储的数据至RAM,然后删除备份存储区数据,再将RAM内数据写入备份存储区;如果不存在,则MCU读出备份储存区的相应对应页上存储的数据至RAM,然后删除主存储区上的数据,再将RAM内的数据写入到相应的主存储区的对应页上。
2.如权利要求1所述的基于MCU的FLASH不丢失更新存储方法,其特征在于,在所述步骤三中,如果不存在,则显示数据未更新成功。
3.如权利要求1所述的基于MCU的FLASH不丢失更新存储方法,其特征在于,所述预定的有效性鉴别标志写入在对应页的特定位置处,所述MCU至所述特定位置处查找所述预定的有效性鉴别标志是否存在。
4.如权利要求3所述的基于MCU的FLASH不丢失更新存储方法,其特征在于,所述特定位置为对应页末端的最后4个字节位置。
5.如权利要求4所述的基于MCU的FLASH不丢失更新存储方法,其特征在于,所述预定的有效性鉴别标志为非OXOO和非OXFF的特定数据。
6.根据权利要求1所述的基于MCU的FLASH不丢失更新存储方法,其特征在于,所述主存储区和备份存储区的划分方式为:在MCU中程序代码需要占用部分FLASH空间,剩余部分可作为数据储存区域模拟EEPROM,主存储区和对应的备份存储区大小一致,且以MCU —页数据大小为基本单位,最小为一个单位及一页数据的主存储区和一页数据的备份存储区,主存储区和备份存储区的起始地址可以在非程序代码区域任意指定,主存储区和备份存储区不能有重复区域,该起始地址一经指定即固化于程序代码中不可更改,程序代码通过读写对应的起始地址以区分主存储区和备份存储区。
7.根据权利要求1所述的基于MCU的FLASH不丢失更新存储方法,其特征在于,所述步骤三发生异常情况包括:删除主存储区对应页数据后,或者在写入对应页数据且未写入有效性鉴别标志数据前发生异常情况导致数据丢失后,此时进行的步骤二具体方式为:在系统上电初始化时MCU检测主存储区的有效性鉴别标志是否存在,由于有效性鉴别标志被删除,MCU自动读取备份储存区对应页数据至RAM中并将RAM内数据写入到主储存区对应页,此时保存的数据为更新前数据; 当异常情况为主存储区更新完毕,MCU删除备份存储区对应页数据或者在将RAM内数据写入至备份存储区对应页且未完成时候发生异常情况导致数据丢失,此时进行的步骤二具体方式为:在系统上电初始化时MCU检测主存储区的有效性鉴别标志是否存在,检测为存在,MCU自动读取主储存区对应页数据至RAM中并将RAM内数据写入到备份储存区对应页此时保存的数据为更新后数据。
【文档编号】G06F12/02GK103914393SQ201410146020
【公开日】2014年7月9日 申请日期:2014年4月11日 优先权日:2014年4月11日
【发明者】范巍, 陈气超 申请人:四川华拓光通信股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1