本发明涉及存储器技术领域,尤其是涉及一种flash存储器管理方法。
背景技术:
一般高级的单片机系统中,直接使用emmc、ufs或其他带控制器管理的存储方案,且上层使用文件系统,比如手机、平板等,对于微单片机系统来说,考虑成本及系统复杂度的原因,大多直接采用mcu内部或片外的flash作为数据存储器,虽然硬件方案简单,但是如果直接通过固定地址存储对flash进行读写不能保证磨损均衡,影响flash使用寿命,而且如果系统随机掉电可能会导致数据丢失。若直接使用双页备份,每次写入需要都要擦除一页,对于数据量不大的情况下,存储密度和效率都比较低而且对flash寿命影响较大。
技术实现要素:
本发明解决了flash存储器在擦除时磨损不均衡和系统随机掉电时数据丢失的问题,提出了一种flash存储器管理方法,能够简化应用的复杂程度,实现存储器均衡磨损和随机掉电数据不丢失,同时使用crc校验,保证数据的完整性和正确性。
为实现上述目的,本发明提供以下的技术方案:
一种flash存储器管理方法,包括以下过程:初始化flash存储器;写入数据时更新读逻辑地址;读取数据时提示读取状态。
初始化flash存储器的作用是找出存有最新有效数据的读逻辑地址,系统随机断电时,flash存储器无法调用,同时其读逻辑地址存有最新有效数据不会丢失;写入数据时更新读逻辑地址作用是保护数据,而写入数据时不断的更新读逻辑地址,将新的读逻辑地址内存有新的数据,同时此时系统发生随机断电,新的读逻辑地址已经存到flash存储器,数据不会发生丢失;同时在更新读逻辑地址还有判断flash存储器的存储页逻辑地址的环节,每次写入需要判断当前逻辑地址是否为存储页最后一条逻辑地址,若是才擦除下一页,比现有技术中每次写入都要擦除一页更加方便,简化了写入数据的过程。写入数据时更新读逻辑地址还有一个作用是,通过不断变更读逻辑地址存储对flash进行读写,flash存储器内部擦除区域不定,使得flash存储器均衡磨损,延长flash使用寿命。
作为优选,所述初始化flash存储器具体包括以下步骤:
s101:从定义的flash存储区逻辑地址0开始,依次向后查找是否存在status标记为空的存储单元,若是进行s102,若否进行s103;
s102:从当前逻辑地址依次向前查找是否存在通过crc16校验的存储单元,若是进行s104,若否进行s103;
s103:擦除整个flash存储器的存储区,设置定义flash存储器的存储区最大逻辑地址为读逻辑地址,初始化结束;
s104:设置当前存储单元逻辑地址为读逻辑地址,初始化结束。
作为优选,所述写入数据时更新读逻辑地址的具体过程包括以下步骤:
s201:判断写入数据与flash存储器内部读出的应用数据是否一致,若是直接结束,不写入flash存储器,若否进行s202;
s202:计算写入逻辑地址;
s203:判断写入逻辑地址是否为存储页page的最后一个,若是则擦除下一存储页page的数据,再进行s204;
s204:计算、校验、打包数据,写入flash存储器,并将写入逻辑地址作为新的读逻辑地址。
作为优选,在步骤s202中,计算写入逻辑地址公式为:
写入逻辑地址=(读逻辑地址 1)%总逻辑地址数。
作为优选,所述读取数据时提示读取状态的具体过程包括以下步骤:
s301:从当前读逻辑地址读取数据;
s302:判断数据是否存在通过crc16校验,若是则提示读取成功,若否则提示读取失败。
作为优选,在所述写入数据时更新读逻辑地址前先进行初始化flash存储器;在所述读取数据时提示读取状态前先进行初始化flash存储器。
作为优选,先进行初始化flash存储器,再进行写入数据时更新读逻辑地址,最后进行读取数据时提示读取状态。
本发明有以下有益效果:通过写入数据时更新读逻辑地址,保证系统随机断电数据不会丢失;判断写入逻辑地址是否为存储页page的最后一个,若是则擦除下一存储页page的数据,简化了写入数据的过程;通过不断变更读逻辑地址存储对flash进行读写,flash存储器内部擦除区域不定,使得flash存储器均衡磨损,延长flash使用寿命。
附图说明
图1是实施例中flash存储器的结构图。
图2是实施例中初始化flash存储器的流程图。
图3是实施例中写入数据时更新读逻辑地址的流程图。
图4是实施例中读取数据时提示读取状态的流程图。
其中:1、存储区2、存储页page3、最小存储读写单元pack。
具体实施方式
实施例:
本实施例提出一种flash存储器管理方法,包括以下过程:初始化flash存储器;写入数据时更新读逻辑地址;读取数据时提示读取状态。为方便说明,本实施例采用的flash存储器结构如下,参考图1,flash存储器的存储区1由m个存储页page2构成,其中m大于等于2,存储页page2由n个逻辑地址、n个最小存储读写单元pack3及字节不足最小存储读写单元pack3的dummy2部分,其中最小存储读写单元pack3包括集成的特殊标记部ststus、数据存储部data、校核部crc16和长度余数部dummy1。
存储页page2是flash存储器的最小擦除单元;当特殊标记部ststus定长为1个字节,当其标记为空时,最小存储读写单元pack3无存储数据;数据存储部data用于存储需要存储的数据,其字节不定长,根据需要进行配置;校核部crc16,定长两个字节,对数据进行crc16校核,通过crc16校核的数据为有效数据,反之为无效数据,crc16校核为本领域技术的常用技术,在此可以直接使用;长度余数部dummy1是存储区1最小编程长度余数,即status data crc16 dummy1必须为存储区1最小编程长度整数倍;dummy2部分为字节不足最小存储读写单元pack3的部分;最小编程长度为单次写入的字节数,本实施例中单次写入的字节数为一个字节;本实施例中n个逻辑地址标志逻辑地址0到逻辑地址n-1,对应n个最小存储读写单元pack3。
参考图,2,初始化flash存储器具体包括以下步骤:
s101:从定义的flash存储区1的逻辑地址0开始,依次向后查找是否存在status标记为空的最小存储读写单元pack3,若是进行s102,若否进行s103;
s102:从当前逻辑地址依次向前查找是否存在通过crc16校验的最小存储读写单元pack3,若是进行s104,若否进行s103;
s103:擦除整个flash存储器的存储区1,设置定义flash存储器的存储区1最大逻辑地址为读逻辑地址,初始化结束,所述读逻辑地址为最新数据存储的最小存储读写单元pack3所对应的逻辑地址;
s104:设置当前最小存储读写单元pack3逻辑地址为读逻辑地址,初始化结束。
参考图3,写入数据时更新读逻辑地址的具体过程包括以下步骤:
s201:判断写入数据与flash存储器内部读出的应用数据是否一致,若是直接结束,不写入flash存储器,若否进行s202;
s202:计算写入逻辑地址,计算写入逻辑地址公式为:
写入逻辑地址=(读逻辑地址 1)%总逻辑地址数;
s203:判断写入逻辑地址是否为存储页page的最后一个,若是则擦除下一存储页page2的数据,再进行s204;
s204:计算、校验、打包数据,写入flash存储器,并将写入逻辑地址作为新的读逻辑地址。
参考图4,读取数据时提示读取状态的具体过程包括以下步骤:
s301:从当前读逻辑地址读取数据;
s302:判断数据是否存在通过crc16校验,若是则提示读取成功,若否则提示读取失败。
本方法有两种工作状态:
a,在写入数据时更新读逻辑地址前先进行初始化flash存储器;在读取数据时提示读取状态前先进行初始化flash存储器。
b,先进行初始化flash存储器,再进行写入数据时更新读逻辑地址,最后进行读取数据时提示读取状态。
初始化flash存储器的作用是找出存有最新有效数据的读逻辑地址,系统随机断电时,flash存储器无法调用,同时其读逻辑地址存有最新有效数据不会丢失;写入数据时更新读逻辑地址作用是保护数据,而写入数据时不断的更新读逻辑地址,将新的读逻辑地址内存有新的数据,同时此时系统发生随机断电,新的读逻辑地址已经存到flash存储器,数据不会发生丢失;同时在更新读逻辑地址还有判断flash存储器的存储页逻辑地址的环节,每次写入需要判断当前逻辑地址是否为存储页最后一条逻辑地址,若是才擦除下一页,比现有技术中每次写入都要擦除一页更加方便,简化了写入数据的过程。写入数据时更新读逻辑地址还有一个作用是,通过不断变更读逻辑地址存储对flash进行读写,flash存储器内部擦除区域不定,使得flash存储器均衡磨损,延长flash使用寿命。
本发明有以下有益效果:通过写入数据时更新读逻辑地址,保证系统随机断电数据不会丢失;判断写入逻辑地址是否为存储页page的最后一个,若是则擦除下一存储页page的数据,简化了写入数据的过程;通过不断变更读逻辑地址存储对flash进行读写,flash存储器内部擦除区域不定,使得flash存储器均衡磨损,延长flash使用寿命。
1.一种flash存储器管理方法,其特征是,包括以下过程:初始化flash存储器;写入数据时更新读逻辑地址;读取数据时提示读取状态。
2.根据权利要求1所述的一种flash存储器管理方法,其特征是,所述初始化flash存储器具体包括以下步骤:
s101:从定义的flash存储区逻辑地址0开始,依次向后查找是否存在status标记为空的存储单元,若是进行s102,若否进行s103;
s102:从当前逻辑地址依次向前查找是否存在通过crc16校验的存储单元,若是进行s104,若否进行s103;
s103:擦除整个flash存储器的存储区,设置定义flash存储器的存储区最大逻辑地址为读逻辑地址,初始化结束;
s104:设置当前存储单元逻辑地址为读逻辑地址,初始化结束。
3.根据权利要求2所述的一种flash存储器管理方法,其特征是,所述写入数据时更新读逻辑地址的具体过程包括以下步骤:
s201:判断写入数据与flash存储器内部读出的应用数据是否一致,若是直接结束,不写入flash存储器,若否进行s202;
s202:计算写入逻辑地址;
s203:判断写入逻辑地址是否为存储页page的最后一个,若是则擦除下一存储页page的数据,再进行s204;
s204:计算、校验、打包数据,写入flash存储器,并将写入逻辑地址作为新的读逻辑地址。
4.根据权利要求3所述的一种flash存储器管理方法,其特征是,在步骤s202中,计算写入逻辑地址公式为:
写入逻辑地址=(读逻辑地址 1)%总逻辑地址数。
5.根据权利要求2所述的一种flash存储器管理方法,其特征是,所述读取数据时提示读取状态的具体过程包括以下步骤:
s301:从当前读逻辑地址读取数据;
s302:判断数据是否存在通过crc16校验,若是则提示读取成功,若否则提示读取失败。
6.根据权利要求1-5任一项所述的一种flash存储器管理方法,其特征是,在所述写入数据时更新读逻辑地址前先进行初始化flash存储器;在所述读取数据时提示读取状态前先进行初始化flash存储器。
7.根据权利要求1-5任一项所述的一种flash存储器管理方法,其特征是,先进行初始化flash存储器,再进行写入数据时更新读逻辑地址,最后进行读取数据时提示读取状态。
技术总结