一种FLASH存储器管理方法与流程

专利2022-06-29  136


本发明涉及存储器技术领域,尤其是涉及一种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存储器,再进行写入数据时更新读逻辑地址,最后进行读取数据时提示读取状态。

技术总结
一种FLASH存储器管理方法,包括以下过程:初始化FLASH存储器;写入数据时更新读逻辑地址;读取数据时提示读取状态。S101:从定义的FLASH存储区逻辑地址0开始,依次向后查找是否存在STATUS标记为空的存储单元,若是进行S102,若否进行S103;S102:从当前逻辑地址依次向前查找是否存在通过CRC16校验的存储单元,若是进行S104,若否进行S103;S103:擦除整个FLASH存储器的存储区,设置定义FLASH存储器的存储区最大逻辑地址为读逻辑地址,初始化结束;S104:设置当前存储单元逻辑地址为读逻辑地址,初始化结束。本发明能够简化应用的复杂程度,实现存储器均衡磨损和随机掉电数据不丢失,同时使用CRC校验,保证数据的完整性和正确性。

技术研发人员:王永
受保护的技术使用者:浙江零跑科技有限公司
技术研发日:2019.12.06
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-30287.html

最新回复(0)