一种利用MCU内部数据FLASH存储非易失性数据的方法.pdf

上传人:Y94****206 文档编号:4059150 上传时间:2018-08-13 格式:PDF 页数:9 大小:415.89KB
返回 下载 相关 举报
摘要
申请专利号:

CN201210074452.5

申请日:

2012.03.20

公开号:

CN102662852A

公开日:

2012.09.12

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 12/06申请日:20120320|||公开

IPC分类号:

G06F12/06

主分类号:

G06F12/06

申请人:

山东省科学院自动化研究所

发明人:

马建辉; 王知学; 刘源杨; 李研强

地址:

250014 山东省济南市历下区科院路19号

优先权:

专利代理机构:

济南圣达知识产权代理有限公司 37221

代理人:

张勇

PDF下载: PDF下载
内容摘要

本发明公开了一种利用MCU内部数据Flash存储非易失性数据的方法,不仅操作方便,应用接口简单,而且可以尽量避免扇区擦除操作,提高存储效率,同时提高MCU内部数据Flash的使用寿命。它将所有非易失性数据条目组织在一个分区中,将数据Flash的若干扇区划分为多个数据分区,不同数据分区存储数据在不同历史时间的拷贝;当前数据分区存储最新的数据拷贝;在数据读操作进行时,计算最新数据拷贝的Flash存储位置,直接读取该地址;在数据写操作进行时,判断数据写入位置是否已经被擦除,如果写入位置未擦除,将数据写入下一个分区,同时将当前分区中的其他数据复制到下一个分区;如果写入位置已经擦除,直接将数据写入当前分区中。

权利要求书

1.一种利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:将所有非易失性数据条目组织在一个分区中,将数据Flash的若干扇区划分为多个数据分区,不同数据分区存储数据在不同历史时间的拷贝;当前数据分区存储最新的数据拷贝;在数据读操作进行时,计算最新数据拷贝的Flash存储位置,直接读取该地址;在数据写操作进行时,判断数据写入位置是否已经被擦除,如果写入位置未擦除,将数据写入下一个分区,同时将当前分区中的其他数据复制到下一个分区;如果写入位置已经擦除,直接将数据写入当前分区中。2.如权利要求1所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:所述数据分区大小和个数取值均为2的幂次方,且分区个数不大于256,分区大小*分区个数等于扇区大小*扇区个数,扇区个数至少为2,以满足实现掉电恢复功能的需要。3.如权利要求1所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:所述数据分区设置有状态字,大小为单字节,位置在分区起始地址,标识分区数据的存储历史时间;数据分区状态字在每次分区擦除后执行的第一次写入操作后更新,依次递增且不等于0xff,当递增到0xff时,设置状态字为0。4.如权利要求3所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:当存在取值为0的分区状态字时,小于分区数的最大状态字代表的分区为最新数据分区,当不存在取值为0的分区状态字时,最大状态字代表的分区为最新数据分区。5.如权利要求1所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:将所有非易失性数据条目组织在一个分区中是指数据分区中数据条目的组织是以固定序列的形式进行的,每个数据条目都有固定的偏移地址,数据条目地址=分区起始地址+偏移地址。6.如权利要求1或5所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:所述的数据条目格式为data id+data,data id,它为单字节大小,唯一标识该数据,data为数据内容,长度由所表示的含义决定。7.如权利要求6所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:所述数据条目中的data id,其取值区间为[0,254]的整型数据,不仅标识数据,同时其地址做为数据条目的状态字存储地址,表示该数据条目在当前分区中的地址是否已经被擦除。8.如权利要求1所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:所述数据写入位置是否已经被擦除是通过数据条目中的数据状态字进行判断的,首先读取该数据条目的状态字,如果状态字等于0xff,则数据写入地址已经被擦除,如果不等于0xff,则数据写入地址未被擦除。

说明书

一种利用MCU内部数据Flash存储非易失性数据的方法

 

技术领域

本发明属于嵌入式系统技术领域,更具体的说是一种利用MCU内部数据Flash存储非易失性数据的方法。

背景技术

在嵌入式系统设计中,经常需要存储一些非易失性的数据,如果采用支持对字节读写的EEPROM实现数据存储,操作起来和RAM一样简单方便,但同时会在大批量产品的生产中带来成本问题和维护问题。在有数据Flash的MCU中,采用数据Flash代替EEPROM实现非易失性的存储,便可以节约成本且无需维护。

用Flash存储数据的传统方式是为每个数据分配固定的存储地址,由于Flash在进行写操作时需要先擦除数据所在的整个扇区,对一个数据进行写操作便会造成对扇区内其他数据的擦除,由于擦除操作耗时较长,不仅效率低,影响嵌入式系统的实时性,而且为了避免丢失其他数据需要相当复杂的处理,对MCU的RAM空间也有一定的要求。如果写入数据失败,会造成所写入数据的丢失,如果在擦除扇区后发生掉电,便会造成扇区内所有数据的丢失。不仅如此,由于每次写入操作都需要先擦除扇区,以擦除次数表征的Flash使用寿命也无法满足产品生命周期的要求。

发明内容

本发明的目的就是为解决上述问题,提供一种利用MCU内部数据Flash存储非易失性数据的方法,它不仅操作方便,应用接口简单,而且可以尽量避免扇区擦除操作,提高存储效率,同时提高MCU内部数据Flash的使用寿命。

为实现上述目的,本发明采用如下技术方案:

一种利用MCU内部数据Flash存储非易失性数据的方法,将所有非易失性数据条目组织在一个分区中,将数据Flash的若干扇区划分为多个数据分区,不同数据分区存储数据在不同历史时间的拷贝;当前数据分区存储最新的数据拷贝;在数据读操作进行时,计算最新数据拷贝的Flash存储位置,直接读取该地址;在数据写操作进行时,判断数据写入位置是否已经被擦除,如果写入位置未擦除,进行分区拷贝操作,即将数据写入下一个分区,同时将当前分区中的其他数据依次复制到下一个分区;如果写入位置已经擦除,直接将数据写入当前分区中,其他数据保持不变。

本发明数据分区的存储结构为分区状态字+data id 1+data 1+data id 2+data 2…,每个数据都可以很方便地进行寻址。按照存储历史时间,数据均匀地存储在多个数据分区上,而不是固定的存储地址,单个数据的频繁存储操作不会造成对固定扇区的反复擦除,这样便可以提高Flash的使用寿命,以满足产品生命周期的要求。

所述数据分区大小和个数取值均为2的幂次方,且分区个数不大于256,分区大小*分区个数等于扇区大小*扇区个数。扇区个数至少为2,这样当存在分区拷贝操作需要擦除分区所在的扇区时,仍能保留至少一个扇区的历史数据,这样可以避免分区拷贝操作期间发生掉电而造成所有数据的丢失,以满足实现掉电恢复功能的需要。

所述数据分区设置有状态字,大小为单字节,位置在分区起始地址,标识分区数据的存储历史时间,最新数据分区状态字代表的分区为最新数据分区。数据分区状态字在分区擦除后执行完第一次写操作后更新,之后本分区内的写操作不影响分区状态字。当发生分区拷贝时,最新数据分区状态字递增且不等于0xff,当递增到0xff时,设置状态字为0。通过在写操作完成后进行分区状态字的更新,保证了即使在分区拷贝期间发生掉电,上电时查找到的最新数据仍为掉电之前备份的那个分区,这样便实现了掉电恢复功能。

当存在取值为0的分区状态字时,小于分区数的最大状态字代表的分区为最新数据分区,当不存在取值为0的分区状态字时,最大状态字代表的分区为最新数据分区。

将所有非易失性数据条目组织在一个分区中是指数据分区中数据条目的组织是以固定序列的形式进行的,每个数据条目都有固定的偏移地址,数据条目地址=分区起始地址+偏移地址。

所述的数据条目格式为data id+data,data id,它为单字节大小,唯一标识该数据,data为数据内容,长度由所表示的含义决定。

所述数据条目中的data id,其取值区间为[0,254]的整型数据,不仅唯一标识数据,同时将其地址作为数据条目状态字的存储地址。由于Flash擦除后其数据为0xff,通过限定data id的取值范围不等于255即0xff,则可以用于判断该数据条目在当前分区中的地址是否已经被擦除。

所述数据写入位置是否已经被擦除是通过数据条目中的数据状态字进行判断的,首先读取该数据条目的状态字,如果状态字等于0xff,则数据写入地址已经被擦除,可以进行写操作,如果不等于0xff,则数据写入地址未被擦除,不能直接进行写操作。通过为每个数据建立专属的状态字表示该数据在当前分区的存储位置是否已擦除,保证了各个数据的存储操作互不影响,不会每次只要有数据的写操作都会造成所有的数据在分区之间的搬移,不仅提高了写操作的效率,而且会进一步提高Flash的使用寿命 。

本发明是通过在MCU数据Flash上建立多个数据分区,存储数据的多个拷贝,避免对Flash固定地址的反复擦除,提高Flash的使用寿命。同时通过数据读写方法的设计和数据分区的管理,避免对Flash扇区的不必要擦除,并最终实现和EEPROM读写很类似的应用接口。

本发明的有益效果是:

1、对于需要进行多个独立数据存储的嵌入式系统应用,通过建立数据分区这样一种存储结构,使得对某个数据的寻址非常简单。

2、对于单个数据的频繁存储操作,因为数据可以存储在多个数据分区上,而不是固定的存储地址,所以不会每次存储操作都造成对固定扇区的擦除,这样便可以提高Flash的使用寿命,以满足产品生命周期的要求。

3、其次,为每个数据都建立了状态字来表示是否已经在当前分区上进行了存储操作,这样数据1的存储操作不会影响数据2的存储,数据2仍然能够在当前分区上进行存储,而不会每次只要有数据的写操作都会造成所有的数据在分区之间的搬移,这样不仅提高了写操作的效率,而且会进一步提高Flash的使用寿命。

4、掉电保护。通过分区状态字表明数据分区的历史时间,而且状态字更新是在数据存储操作完成后进行,这样如果发生了掉电,上电时查找到的最新数据是掉电之前备份的那个分区。

5、不仅操作方便,应用接口简单,而且可以尽量避免扇区擦除操作,提高存储效率,同时提高MCU内部数据Flash的使用寿命。 

附图说明

图1为本发明方法的软件设计流程图;

图2为采用本发明方法进行写操作的流程图;

图3为采用本发明方法进行掉电恢复操作的流程图。

具体实施方式

下面结合附图与实施例对本发明做进一步说明。

图1中,本发明首先根据嵌入式系统的应用需求和MCU内部数据Flash的扇区大小,合理设置数据分区大小和个数,其取值均为2的n次幂,分区以0,1,2…进行编号,个数不大于256。分区大小和个数的设置和数据Flash的扇区长度匹配起来,即分区大小*分区个数=扇区大小*扇区个数。

在每个数据分区的起始地址设置分区状态字,反映数据分区的存储历史时间,在分区擦除后的第一次写操作完成后更新。更新算法见数据的写操作流程。

然后设置数据条目的格式为data id+data,data id 取值区间为【0,254】,为每个数据条目的data id和data分配偏移地址,建立数据序列,组织数据分区,数据分区的格式为:

分区状态字+data id 1+data 1+data id 2+data 2…,将数据条目的data id存储地址同时做为数据状态字的存储地址,在写操作时通过数据状态字判断该数据条目地址是否执行过擦除操作,从而避免不必要的分区拷贝和扇区擦除操作。降低数据写操作代价,也可以进一步提高MCU内部数据Flash的使用寿命。

数据的读取操作在最新数据分区上进行,首先通过数据条目的data id进行偏移地址查表,然后进行地址计算,计算公式如下:

地址=0号分区首地址+(最新数据分区号*分区大小)+偏移地址;和EEPROM的读取方式一样,直接读取该地址便可以得到数据。读取操作不会改变最新数据分区。

图2中数据的写操作流程如下:

首先读取数据状态字,判断该数据在当前最新数据分区的写入地址是否已经被擦除,如果数据状态字等于0xff,表明写入地址已经被擦除,按照Flash的写操作命令序列在data id地址处写入data id,在data地址处写入data。如果数据状态字不等于0xff, 表明写入地址未被擦除,需要进行分区拷贝操作。写操作完成后更新最新分区状态字。

下面结合附图2说明一下分区拷贝操作和最新分区状态字更新算法。分区拷贝操作:

首先备份当前最新分区状态字和最新数据分区编号,同时最新数据分区编号++,如果最新数据分区号等于分区个数,设置最新数据分区号为0。查看最新数据分区首地址是否是Flash扇区首地址,如果是,首先擦除这个扇区,然后按照Flash的写操作命令序列在当前最新数据分区的data id地址处写入data id,在data地址处写入data,然后将备份数据分区内的其他数据复制到当前最新数据分区中。

最新分区状态字更新算法:判断所备份最新分区状态字是否等于0xfe,如果等于0xfe,设置最新分区状态字为0,否则最新分区状态字++,然后将最新分区状态字写入当前最新数据分区状态字地址。

如果嵌入式系统在写操作期间掉电,由于在发生掉电时最新数据分区状态字还没有更新,再次上电时查找到的最新数据分区仍然是写操作进行前的那个数据分区,通过在写入操作完成后更新状态字的方式保证了即使发生了掉电,数据仍能恢复为原来的数据分区中的数据。

上电时通过分区状态字查找最新数据分区的算法如下:

当存在取值为0的分区状态字时,小于分区数的最大状态字代表的分区为最新数据分区;

当不存在取值为0的分区状态字时,最大状态字代表的分区为最新数据分区;该算法实现流程如附图3所示,上电后经过该算法处理后,可以得到最新数据分区编号和最新数据分区状态字。

一种利用MCU内部数据FLASH存储非易失性数据的方法.pdf_第1页
第1页 / 共9页
一种利用MCU内部数据FLASH存储非易失性数据的方法.pdf_第2页
第2页 / 共9页
一种利用MCU内部数据FLASH存储非易失性数据的方法.pdf_第3页
第3页 / 共9页
点击查看更多>>
资源描述

《一种利用MCU内部数据FLASH存储非易失性数据的方法.pdf》由会员分享,可在线阅读,更多相关《一种利用MCU内部数据FLASH存储非易失性数据的方法.pdf(9页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 102662852 A(43)申请公布日 2012.09.12CN102662852A*CN102662852A*(21)申请号 201210074452.5(22)申请日 2012.03.20G06F 12/06(2006.01)(71)申请人山东省科学院自动化研究所地址 250014 山东省济南市历下区科院路19号(72)发明人马建辉 王知学 刘源杨 李研强(74)专利代理机构济南圣达知识产权代理有限公司 37221代理人张勇(54) 发明名称一种利用MCU内部数据Flash存储非易失性数据的方法(57) 摘要本发明公开了一种利用MCU内部数据Flash存储非易失。

2、性数据的方法,不仅操作方便,应用接口简单,而且可以尽量避免扇区擦除操作,提高存储效率,同时提高MCU内部数据Flash的使用寿命。它将所有非易失性数据条目组织在一个分区中,将数据Flash的若干扇区划分为多个数据分区,不同数据分区存储数据在不同历史时间的拷贝;当前数据分区存储最新的数据拷贝;在数据读操作进行时,计算最新数据拷贝的Flash存储位置,直接读取该地址;在数据写操作进行时,判断数据写入位置是否已经被擦除,如果写入位置未擦除,将数据写入下一个分区,同时将当前分区中的其他数据复制到下一个分区;如果写入位置已经擦除,直接将数据写入当前分区中。(51)Int.Cl.权利要求书1页 说明书4页。

3、 附图3页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书 1 页 说明书 4 页 附图 3 页1/1页21.一种利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:将所有非易失性数据条目组织在一个分区中,将数据Flash的若干扇区划分为多个数据分区,不同数据分区存储数据在不同历史时间的拷贝;当前数据分区存储最新的数据拷贝;在数据读操作进行时,计算最新数据拷贝的Flash存储位置,直接读取该地址;在数据写操作进行时,判断数据写入位置是否已经被擦除,如果写入位置未擦除,将数据写入下一个分区,同时将当前分区中的其他数据复制到下一个分区;如果写入位置已经擦除,直接将数据。

4、写入当前分区中。2.如权利要求1所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:所述数据分区大小和个数取值均为2的幂次方,且分区个数不大于256,分区大小*分区个数等于扇区大小*扇区个数,扇区个数至少为2,以满足实现掉电恢复功能的需要。3.如权利要求1所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:所述数据分区设置有状态字,大小为单字节,位置在分区起始地址,标识分区数据的存储历史时间;数据分区状态字在每次分区擦除后执行的第一次写入操作后更新,依次递增且不等于0xff,当递增到0xff时,设置状态字为0。4.如权利要求3所述的利用MCU内部数据Flas。

5、h存储非易失性数据的方法,其特征在于:当存在取值为0的分区状态字时,小于分区数的最大状态字代表的分区为最新数据分区,当不存在取值为0的分区状态字时,最大状态字代表的分区为最新数据分区。5.如权利要求1所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:将所有非易失性数据条目组织在一个分区中是指数据分区中数据条目的组织是以固定序列的形式进行的,每个数据条目都有固定的偏移地址,数据条目地址=分区起始地址+偏移地址。6.如权利要求1或5所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:所述的数据条目格式为data id+data,data id,它为单字节大小,。

6、唯一标识该数据,data为数据内容,长度由所表示的含义决定。7.如权利要求6所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:所述数据条目中的data id,其取值区间为0,254的整型数据,不仅标识数据,同时其地址做为数据条目的状态字存储地址,表示该数据条目在当前分区中的地址是否已经被擦除。8.如权利要求1所述的利用MCU内部数据Flash存储非易失性数据的方法,其特征在于:所述数据写入位置是否已经被擦除是通过数据条目中的数据状态字进行判断的,首先读取该数据条目的状态字,如果状态字等于0xff,则数据写入地址已经被擦除,如果不等于0xff,则数据写入地址未被擦除。权 利 。

7、要 求 书CN 102662852 A1/4页3一种利用 MCU 内部数据 Flash 存储非易失性数据的方法0001 技术领域0002 本发明属于嵌入式系统技术领域,更具体的说是一种利用MCU内部数据Flash存储非易失性数据的方法。背景技术0003 在嵌入式系统设计中,经常需要存储一些非易失性的数据,如果采用支持对字节读写的EEPROM实现数据存储,操作起来和RAM一样简单方便,但同时会在大批量产品的生产中带来成本问题和维护问题。在有数据Flash的MCU中,采用数据Flash代替EEPROM实现非易失性的存储,便可以节约成本且无需维护。0004 用Flash存储数据的传统方式是为每个数据。

8、分配固定的存储地址,由于Flash在进行写操作时需要先擦除数据所在的整个扇区,对一个数据进行写操作便会造成对扇区内其他数据的擦除,由于擦除操作耗时较长,不仅效率低,影响嵌入式系统的实时性,而且为了避免丢失其他数据需要相当复杂的处理,对MCU的RAM空间也有一定的要求。如果写入数据失败,会造成所写入数据的丢失,如果在擦除扇区后发生掉电,便会造成扇区内所有数据的丢失。不仅如此,由于每次写入操作都需要先擦除扇区,以擦除次数表征的Flash使用寿命也无法满足产品生命周期的要求。发明内容0005 本发明的目的就是为解决上述问题,提供一种利用MCU内部数据Flash存储非易失性数据的方法,它不仅操作方便,。

9、应用接口简单,而且可以尽量避免扇区擦除操作,提高存储效率,同时提高MCU内部数据Flash的使用寿命。0006 为实现上述目的,本发明采用如下技术方案:一种利用MCU内部数据Flash存储非易失性数据的方法,将所有非易失性数据条目组织在一个分区中,将数据Flash的若干扇区划分为多个数据分区,不同数据分区存储数据在不同历史时间的拷贝;当前数据分区存储最新的数据拷贝;在数据读操作进行时,计算最新数据拷贝的Flash存储位置,直接读取该地址;在数据写操作进行时,判断数据写入位置是否已经被擦除,如果写入位置未擦除,进行分区拷贝操作,即将数据写入下一个分区,同时将当前分区中的其他数据依次复制到下一个分。

10、区;如果写入位置已经擦除,直接将数据写入当前分区中,其他数据保持不变。0007 本发明数据分区的存储结构为分区状态字+data id 1+data 1+data id 2+data 2,每个数据都可以很方便地进行寻址。按照存储历史时间,数据均匀地存储在多个数据分区上,而不是固定的存储地址,单个数据的频繁存储操作不会造成对固定扇区的反复擦除,这样便可以提高Flash的使用寿命,以满足产品生命周期的要求。0008 所述数据分区大小和个数取值均为2的幂次方,且分区个数不大于256,分区大小说 明 书CN 102662852 A2/4页4*分区个数等于扇区大小*扇区个数。扇区个数至少为2,这样当存在分。

11、区拷贝操作需要擦除分区所在的扇区时,仍能保留至少一个扇区的历史数据,这样可以避免分区拷贝操作期间发生掉电而造成所有数据的丢失,以满足实现掉电恢复功能的需要。0009 所述数据分区设置有状态字,大小为单字节,位置在分区起始地址,标识分区数据的存储历史时间,最新数据分区状态字代表的分区为最新数据分区。数据分区状态字在分区擦除后执行完第一次写操作后更新,之后本分区内的写操作不影响分区状态字。当发生分区拷贝时,最新数据分区状态字递增且不等于0xff,当递增到0xff时,设置状态字为0。通过在写操作完成后进行分区状态字的更新,保证了即使在分区拷贝期间发生掉电,上电时查找到的最新数据仍为掉电之前备份的那个。

12、分区,这样便实现了掉电恢复功能。0010 当存在取值为0的分区状态字时,小于分区数的最大状态字代表的分区为最新数据分区,当不存在取值为0的分区状态字时,最大状态字代表的分区为最新数据分区。0011 将所有非易失性数据条目组织在一个分区中是指数据分区中数据条目的组织是以固定序列的形式进行的,每个数据条目都有固定的偏移地址,数据条目地址=分区起始地址+偏移地址。0012 所述的数据条目格式为data id+data,data id,它为单字节大小,唯一标识该数据,data为数据内容,长度由所表示的含义决定。0013 所述数据条目中的data id,其取值区间为0,254的整型数据,不仅唯一标识数据。

13、,同时将其地址作为数据条目状态字的存储地址。由于Flash擦除后其数据为0xff,通过限定data id的取值范围不等于255即0xff,则可以用于判断该数据条目在当前分区中的地址是否已经被擦除。0014 所述数据写入位置是否已经被擦除是通过数据条目中的数据状态字进行判断的,首先读取该数据条目的状态字,如果状态字等于0xff,则数据写入地址已经被擦除,可以进行写操作,如果不等于0xff,则数据写入地址未被擦除,不能直接进行写操作。通过为每个数据建立专属的状态字表示该数据在当前分区的存储位置是否已擦除,保证了各个数据的存储操作互不影响,不会每次只要有数据的写操作都会造成所有的数据在分区之间的搬移。

14、,不仅提高了写操作的效率,而且会进一步提高Flash的使用寿命 。0015 本发明是通过在MCU数据Flash上建立多个数据分区,存储数据的多个拷贝,避免对Flash固定地址的反复擦除,提高Flash的使用寿命。同时通过数据读写方法的设计和数据分区的管理,避免对Flash扇区的不必要擦除,并最终实现和EEPROM读写很类似的应用接口。0016 本发明的有益效果是:1、对于需要进行多个独立数据存储的嵌入式系统应用,通过建立数据分区这样一种存储结构,使得对某个数据的寻址非常简单。0017 2、对于单个数据的频繁存储操作,因为数据可以存储在多个数据分区上,而不是固定的存储地址,所以不会每次存储操作都。

15、造成对固定扇区的擦除,这样便可以提高Flash的使用寿命,以满足产品生命周期的要求。0018 3、其次,为每个数据都建立了状态字来表示是否已经在当前分区上进行了存储操作,这样数据1的存储操作不会影响数据2的存储,数据2仍然能够在当前分区上进行存储,而不会每次只要有数据的写操作都会造成所有的数据在分区之间的搬移,这样不仅提说 明 书CN 102662852 A3/4页5高了写操作的效率,而且会进一步提高Flash的使用寿命。0019 4、掉电保护。通过分区状态字表明数据分区的历史时间,而且状态字更新是在数据存储操作完成后进行,这样如果发生了掉电,上电时查找到的最新数据是掉电之前备份的那个分区。0。

16、020 5、不仅操作方便,应用接口简单,而且可以尽量避免扇区擦除操作,提高存储效率,同时提高MCU内部数据Flash的使用寿命。 附图说明0021 图1为本发明方法的软件设计流程图;图2为采用本发明方法进行写操作的流程图;图3为采用本发明方法进行掉电恢复操作的流程图。具体实施方式0022 下面结合附图与实施例对本发明做进一步说明。0023 图1中,本发明首先根据嵌入式系统的应用需求和MCU内部数据Flash的扇区大小,合理设置数据分区大小和个数,其取值均为2的n次幂,分区以0,1,2进行编号,个数不大于256。分区大小和个数的设置和数据Flash的扇区长度匹配起来,即分区大小*分区个数=扇区大。

17、小*扇区个数。0024 在每个数据分区的起始地址设置分区状态字,反映数据分区的存储历史时间,在分区擦除后的第一次写操作完成后更新。更新算法见数据的写操作流程。0025 然后设置数据条目的格式为data id+data,data id 取值区间为【0,254】,为每个数据条目的data id和data分配偏移地址,建立数据序列,组织数据分区,数据分区的格式为:分区状态字+data id 1+data 1+data id 2+data 2,将数据条目的data id存储地址同时做为数据状态字的存储地址,在写操作时通过数据状态字判断该数据条目地址是否执行过擦除操作,从而避免不必要的分区拷贝和扇区擦除。

18、操作。降低数据写操作代价,也可以进一步提高MCU内部数据Flash的使用寿命。0026 数据的读取操作在最新数据分区上进行,首先通过数据条目的data id进行偏移地址查表,然后进行地址计算,计算公式如下:地址=0号分区首地址+(最新数据分区号*分区大小)+偏移地址;和EEPROM的读取方式一样,直接读取该地址便可以得到数据。读取操作不会改变最新数据分区。0027 图2中数据的写操作流程如下:首先读取数据状态字,判断该数据在当前最新数据分区的写入地址是否已经被擦除,如果数据状态字等于0xff,表明写入地址已经被擦除,按照Flash的写操作命令序列在data id地址处写入data id,在da。

19、ta地址处写入data。如果数据状态字不等于0xff, 表明写入地址未被擦除,需要进行分区拷贝操作。写操作完成后更新最新分区状态字。0028 下面结合附图2说明一下分区拷贝操作和最新分区状态字更新算法。分区拷贝操作:首先备份当前最新分区状态字和最新数据分区编号,同时最新数据分区编号+,如果说 明 书CN 102662852 A4/4页6最新数据分区号等于分区个数,设置最新数据分区号为0。查看最新数据分区首地址是否是Flash扇区首地址,如果是,首先擦除这个扇区,然后按照Flash的写操作命令序列在当前最新数据分区的data id地址处写入data id,在data地址处写入data,然后将备份。

20、数据分区内的其他数据复制到当前最新数据分区中。0029 最新分区状态字更新算法:判断所备份最新分区状态字是否等于0xfe,如果等于0xfe,设置最新分区状态字为0,否则最新分区状态字+,然后将最新分区状态字写入当前最新数据分区状态字地址。0030 如果嵌入式系统在写操作期间掉电,由于在发生掉电时最新数据分区状态字还没有更新,再次上电时查找到的最新数据分区仍然是写操作进行前的那个数据分区,通过在写入操作完成后更新状态字的方式保证了即使发生了掉电,数据仍能恢复为原来的数据分区中的数据。0031 上电时通过分区状态字查找最新数据分区的算法如下:当存在取值为0的分区状态字时,小于分区数的最大状态字代表的分区为最新数据分区;当不存在取值为0的分区状态字时,最大状态字代表的分区为最新数据分区;该算法实现流程如附图3所示,上电后经过该算法处理后,可以得到最新数据分区编号和最新数据分区状态字。说 明 书CN 102662852 A1/3页7图1说 明 书 附 图CN 102662852 A2/3页8图2说 明 书 附 图CN 102662852 A3/3页9图3说 明 书 附 图CN 102662852 A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1