CN101419841B - 一种flash存储器擦写方法 - Google Patents
一种flash存储器擦写方法 Download PDFInfo
- Publication number
- CN101419841B CN101419841B CN2008102431425A CN200810243142A CN101419841B CN 101419841 B CN101419841 B CN 101419841B CN 2008102431425 A CN2008102431425 A CN 2008102431425A CN 200810243142 A CN200810243142 A CN 200810243142A CN 101419841 B CN101419841 B CN 101419841B
- Authority
- CN
- China
- Prior art keywords
- page
- data
- leaf
- frame
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Read Only Memory (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种FLASH存储器擦写方法,包括以下步骤:(1)设置数据帧结构,每一数据帧内含有8倍数的字节数,存储区域分为N页;(2)选定最后一个所述数据帧所在页为当前页,若该页已写满则转入下一页I,将I页设为当前页,当所述I页为存储区域中的N-1页时,I+1页为0页;(3)写入数据;(4)当前页I被写满后,转入下一页,并重新设定该页为当前页I,选择擦除第I-1页或第I+1页内容的两种擦除方式中的一种,执行擦除;(5)在正常工作过程中,重复步骤(3),直至当前页为第N-1页,所述第I+1页为0页;在重新上电后,重复步骤(2)。本发明通过选用两种擦除方式,实现每个存储单元完全均衡的擦写,延长FLASH的使用寿命。
Description
技术领域
本发明涉及一种存储介质的擦写方法,具体涉及一种FLASH存储器的擦写方法,适用于擦写频繁的嵌入式测量和控制系统中的FLASH存储器。
背景技术
当前,嵌入式微控制器MCU在电子测量和控制领域得到了广泛的应用,而在嵌入式测量和控制系统中,通常有一些系统状态数据、运行参数或测量数据需要保存在非易失性存储器中。
FLASH存储器是一种在EPROM和EEPROM的制造技术基础上发展起来的一种可擦除、非易失性存储元件,由于它具有功耗低、擦写速度快、价格便宜的特点,在嵌入式系统中得到了越来越多的应用。嵌入式系统中使用的FLASH存储器有两种,一种是在MCU之外扩展的FLASH芯片,通常是用串行通信方式实现读、写和擦除操作的;另外一种是MCU内部集成的FLASH存储器,通过按一定步骤设置内部寄存器来完成擦除和写入操作。
FLASH存储器的擦写次数是有一定限制的,也就是说它有一定的使用寿命。专门的FLASH芯片,擦写次数可达10万次;而MCU内部集成的FLASH存储器,擦写次数一般仅为1万次。由于FLASH存储器的擦写次数是有限的,如果频繁地擦写FLASH存储器的某个固定区域,就会使该区域在较短的时间内达到使用寿命,从而降低了FLASH存储器的使用寿命,以至于影响整个系统的使用寿命。
为延长FLASH存储器使用寿命,可采取的措施主要是将数据平均地写到用来存储数据的整个FLASH存储区域,避免在某些存储区域频繁地擦写,确保在整个系统的使用寿命期内,FLASH存储器不会达到它的使用寿命。
在有操作系统和文件管理系统的电子产品中,FLASH存储器作为大容量文件存储器,可以采用较复杂的算法来均衡FLASH存储器的擦写,延长它的使用寿命,如磨损均衡算法等。而在如上所述的嵌入式测量和控制系统中,通常没有操作系统和文件管理系统,而且用来存储数据的FLASH存储器容量也比较小,一般只有几K到几十K字节,因此不可能采用较复杂的算法来管理。具体来说,若仅仅将数据平均地写到小容量的FLASH存储区域内,在正常连续写入MCU中的情行下,不采用复杂的算法也是可以实现的,但是嵌入式仪器仪表在不使用时通常会关闭电源,或在使用过程中出现掉电现象,在重新上电工作后需要知道上次正常工作或掉电前写入的有效数据在FLASH存储器中的存储位置,即有效数据区的起始地址和结束地址(至少需要知道结束地址),这就需要在FLASH存储器中有几个固定单元用来保存这些地址,否则无法实现平均写入的目的。如此一来,这些用于保存地址的单元还是会被频繁地擦写,会首先达到擦写饱和值,从而影响到整个存储芯片的寿命。因而,如上所述的平均写入内容的方法,并不能从根本上解决延长FLASH存储器使用寿命的问题。
发明内容
本发明目的是提供一种能够延长嵌入式系统中FLASH存储器使用寿命的FLASH存储器擦写方法。
为达到上述目的,本发明采用的技术方案是:一种FLASH存储器擦写方法,包括以下步骤:
(1)设置数据帧结构,每一数据帧内含有8倍数的字节数,复数个数据帧组成存储区域内的一页,所述存储区域划分为N页,编号0页~(N-1)页;
(2)选定最后一个所述数据帧所在页为当前页,若该页已写满则转入下一页I,将I页设为当前页,当所述I页为存储区域中的N-1页时,I+1页为0页;
(3)写入数据;
(4)当前页I被写满后,转入下一页,并重新设定该页为当前页I,选择擦除第I-1页或第I+1页内容的两种擦除方式中的一种,执行擦除;
(5)在正常工作过程中,重复步骤(3),直至当前页为第N-1页,所述第I+1页为0页;在重新上电后,重复步骤(2)。
上述技术方案中,步骤(1)中所述数据帧结构可包含起始字、数据域和结束字,还可加入校验字,以便对写入数据正确性的检测,各字节组合构成8的倍数,以避免数据帧跨页存储。将FLASH存储器的存储空间划分成N页,编号为0页~(N-1)页,每一页内可存储若干个数据帧,最后一个数据帧所在的页称为当前页,在当前页内写入数据,写满一页后执行步骤(4)中的擦除,擦除方式分为两种,根据存储数据需要保存周期的长短选择:
①要保存的数据只有一个数据帧的,选择擦除第I-1页。在FLASH存储器的数据存储区中始终只有一个页(当前页I)保存有数据,其它页都是空的。使用时,当前页(假设是第I-1页)写满后,在数据帧第一次正确写入下一页(第I页)后,马上就把当前页(第I-1页)数据擦除,而写入第一个数据帧的页(第I页)成为新当前页。从第0页到第N-1页轮流成为当前页,第N-1页写满后,下一个写入的页重新回到第0页,这样不断循环使用,就使得数据存储区的每个存储单元得到完全均衡的擦写;
②要保存尽量多的数据帧,选择擦除第I+1页。在FLASH存储器的数据存储区中除第一轮循环时会有多个空页存在,从第二轮循环开始,始终只有当前页后面的一页是空的,其它页都会存有数据,一共可以保存N-1页数据。使用时,当前页(假设是第I-1页)写满后,在数据帧第一次正确写入下一页(第I页)后,这个写入第一个数据帧的页(第I页)就成为当前页,然后擦除新当前页(第I页)之后的一个页(第I+1页)。这样数据存储区不断循环使用,使得每个存储单元得到完全均衡的擦写。
在所述步骤(5)中,所谓正常工作,是指在一次上电后的循环擦写操作,在这个过程中没有出现关电、掉电等中断操作的现象,FLASH存储器保持正常的擦写工作,那么重复步骤(3)实现循环;而当出现中断现象(包括掉电、重启等),那么需要从步骤(2)开始重复,以找到当前页,继续写入数据,如此在失电后FLASH存储器亦能找到上次写入的页位置,而非从新开始,实现均衡擦写,延长FLASH的使用寿命。
上述技术方案中,所述数据帧结构依次包括起始字、数据区域、结束字及校验字,所述结束字与校验字之间设置补偿字,使所述数据帧的字节数为8的倍数。起始字、结束字为一或二个字节,可采用除FFH之外的特定十六进制数,比如55H、AAH或AA55H等,其作用是保证一帧数据的完整性;数据域是要保存的具体数据,至少一个字节;校验字是它前面所有字节的校验码,可以采用1字节的CHECKSUM校验码或2字节的CRC16校验码,其作用是保证写入数据的正确性。当由这四部分数据组成的数据帧的字节数不是正好为8的倍数时,在结束字和校验字之间插入补偿字FFH,使得整个数据帧的字节数等于8的倍数。
另一种方法是,在校验字之后到下一个8的倍数的地址之前的这些字节就不再用来存储数据,下一次数据帧从下一个8的倍数的地址开始写入。
进一步的技术方案是,所述步骤(3)之前先确定当前页中写入数据的帧位置,根据数据帧结构查找出该当前页中的最后一帧完整帧,并以该帧的下一帧的地址作为写入数据的起始地址,然后执行步骤(3)写入数据。数据帧在写入过程中,发生意外掉电情况时,会出现一个数据帧没有完整写入FLASH存储器,再上电后找到的最后一帧数据就不会是完整的数据帧,它不会同时有正确的起始字和结束字,这通过对起始字和结束字的比较就可以判断出来。由于在写入数据帧时,通过校验保证了写入的正确性,之后才会进行擦除操作,所以存储的数据至少会有一帧是正确的,当遇到最后一帧数据不完整时,它前面的一帧数据一定是完整的,这样只要将最后一帧不完整数据前面的一帧数据作为最后一个有效数据即可,跳过这个不完整的数据帧,而在它后面空白区的下一个帧的起始地址就是初始写入地址。
进一步的技术方案是,所述步骤(3)中,在每写完一帧数据M后,读取该帧的数据M,利用所述校验字检测读取数据M与写入数据S的吻合性,若检测出未吻合,则转入下一数据帧,重新写入该帧数据S,若吻合则转入下一数据帧,写入下一帧数据S+1。
上述技术方案中,所述步骤(4)中,选择擦除第I+1页内容的擦除方式情况下,擦除前先判断第I+1页是数据页或是空白页,为数据页时执行擦除,否则跳过擦除,进入下一步骤。
由于上述技术方案运用,本发明与现有技术相比具有下列优点:本发明首先设置数据帧结构,将存储区域划分成N页,每页中包含多个数据帧,以帧结构写入数据,写满一页转入下一页时,根据需要保存数据量的多少,选择擦除当前页前一页或是后一页两种方式中的一种,从第0页至第N-1页,再返回第0页,如此在整个存储区域内循环,使得每个存储单元得到完全均衡的擦写,不需要保存已存储数据的地址,也不会受关电和掉电的影响,可以实现整个数据存储区域完全均衡的擦写,可以大大延长FLASH存储器的使用寿命,完全满足电子设备使用寿命的需要。
附图说明
图1是本发明中擦除第I-1页内容方式存储区域示意图;
图2是本发明中擦除第I+1页内容方式存储区域示意图。
具体实施方式
下面结合附图及实施例对本发明作进一步描述:
实施例一:参见图1、2所示,一种FLASH存储器擦写方法,包括以下步骤:
(1)设置数据帧结构,依次包括起始字、数据区域、结束字及校验字,结束字与校验字之间可以设置补偿字FFH,使所述数据帧的字节数为8的倍数,复数个数据帧组成存储区域内的一页,所述存储区域划分为N页,编号0页~(N-1)页;
(2)选定最后一个所述数据帧所在页为当前页,若该页已写满则转入下一页I,将I页设为当前页,当所述I页为存储区域中的N-1页时,I+1页为0页;
(3)先确定当前页中写入数据的帧位置,根据数据帧结构查找出该当前页中的最后一帧完整帧,并以该帧的下一帧的地址作为写入数据的起始地址,然后写入数据;在每写完一帧数据M后,读取该帧的数据M,利用所述校验字检测读取数据M与写入数据S的吻合性,若检测出未吻合,则转入下一数据帧,重新写入该帧数据S,若吻合则转入下一数据帧,写入下一帧数据S+1;
(4)当前页I被写满后,转入下一页,并重新设定该页为当前页I,选择擦除第I-1页(如图1所示)或第I+1页(如图2所示)内容的两种擦除方式中的一种,执行擦除;当选择擦除第I+1页内容的擦除方式情况下,擦除前先判断第I+1页是数据页或是空白页,为数据页时执行擦除,否则跳过擦除,进入下一步骤;
(5)在正常工作过程中,重复步骤(3),直至当前页为第N-1页,所述第I+1页为0页;在重新上电后,重复步骤(2)。
本实施例在用于蓄电池电量计中时,结果如下:
蓄电池电量计是用来测量显示电动搬运车蓄电池剩余电量和累计工作时间的仪表,它采用的嵌入式微控制器是Freescale公司的8位MCU芯片MC68HC908LJ12,该MCU内有12KB的FLASH存储器,地址范围C000H~EFFFH,一页的大小为128个字节。我们将FLASH存储器的前2KB(C000H~C7FFH)用来存放测量数据,后10KB(C800H~EFFFH)用来存放程序,这样数据存储区共有2048÷128=16页,页号为0~15。一帧数据为16个字节,其中起始字、结束字都采用1字节的55II,校验字采用2字节的CRC16校验码,一个页中可以存储128÷16=8帧数据。由于只需要最后一帧作为有效数据,因此数据存储只需保存一帧,采用擦除第I-1页的方式。
设数据帧的写入地址存放在一个名字叫FlashAddr的指针中,每次上电时,从地址C000H开始,找到最后一帧数据作为系统运行的有效数据,并使FlashAddr指向下一帧地址的第一个字节处。如果C000H~C7FFH的数据存储区都是空的,则使FlashAddr=C000H,并将系统运行的有效数据置为默认的初始数据。
在运行过程中,一般情况下每6分钟写入一帧数据到FLASH存储器,当蓄电池电量发生变化时,还要马上写入到FLASH存储器中。除最初需写9帧数据外,以后每写入8帧数据就会写满当前页并且会有一帧数据写到下一页上,这时就擦除当前页,而下一页就成为新的当前页。当第15页写满后,第0页成为新的当前页,这样就使C000H~C7FFH的2KB数据存储区得到完全均衡的擦写,延长了FLASH存储器的使用寿命。
采用现有技术中的方法,使用固定单元存储数据,存储单元每6分钟就需要擦写一次,在每天工作10小时的情况下,1万次擦写可以使用的时间是6分钟×10000=60000分钟=1000小时=100工作日;在极限情况下的使用时间不到42个工作日。即使是可以进行10万次擦写的FLASH存储器,每6分钟擦写一次,在每天工作10小时的情况下也只能使用不到3年时间,一般电子仪表的使用寿命应该在10年以上,因此FLASH会提前损坏,无法满足电子设备的需要。而在本实施例中,由于每6分钟写入一帧数据,每写入8帧数据后会擦除一页,即每6×8=48分钟擦写一页,电量计中16页数据存储区都擦写一遍的时间为48×16=768分钟=12.8小时。假设电动搬运车每天工作10小时,一年工作365天,1万次擦写可以使用的时间是12.8小时×10000=128000小时=12800工作日=35年。即使是每天24小时工作的极限情况,实施例中的FLASH存储器也可以使用将近15年,完全满足电子设备的需要。
Claims (4)
1.一种FLASH存储器擦写方法,包括以下步骤:
(1)设置数据帧结构,每一数据帧内含有8倍数的字节数,复数个数据帧组成存储区域内的一页,所述存储区域划分为N页,编号0页~(N-1)页;
(2)选定最后一个所述数据帧所在页为当前页,若该页已写满则转入下一页I,将I页设为当前页,当所述I页为存储区域中的N-1页时,I+1页为0页;
(3)先确定当前页中写入数据的帧位置,根据数据帧结构查找出该当前页中的最后一帧完整帧,并以该帧的下一帧的地址作为写入数据的起始地址,写入数据;
(4)当前页I被写满后,转入下一页,并重新设定该页为当前页I,选择擦除第I-1页或第I+1页内容的两种擦除方式中的一种,执行擦除;
(5)在正常工作过程中,重复步骤(3),直至当前页为第N-1页,所述第I+1页为0页;在重新上电后,重复步骤(2)。
2.根据权利要求1所述的FLASH存储器擦写方法,其特征在于:所述数据帧结构依次包括起始字、数据区域、结束字及校验字,所述结束字与校验字之间设置补偿字,使所述数据帧的字节数为8的倍数。
3.根据权利要求2所述的FLASH存储器擦写方法,其特征在于:所述步骤(3)中,在每写完一帧数据M后,读取该帧的数据M,利用所述校验字检测读取数据M与写入数据S的吻合性,若检测出未吻合,则转入下一数据帧,重新写入该帧数据S,若吻合则转入下一数据帧,写入下一帧数据S+1。
4.根据权利要求1所述的FLASH存储器擦写方法,其特征在于:所述步骤(4)中,选择擦除第I+1页内容的擦除方式情况下,擦除前先判断第I+1页是数据页或是空白页,为数据页时执行擦除,否则跳过擦除,进入下一步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102431425A CN101419841B (zh) | 2008-12-09 | 2008-12-09 | 一种flash存储器擦写方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008102431425A CN101419841B (zh) | 2008-12-09 | 2008-12-09 | 一种flash存储器擦写方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101419841A CN101419841A (zh) | 2009-04-29 |
CN101419841B true CN101419841B (zh) | 2011-03-16 |
Family
ID=40630592
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008102431425A Expired - Fee Related CN101419841B (zh) | 2008-12-09 | 2008-12-09 | 一种flash存储器擦写方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101419841B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063941B (zh) * | 2010-12-07 | 2014-12-10 | 中国电力科学研究院 | 一种用于延长电能表寿命的eeprom损耗均衡方法 |
CN105045537A (zh) * | 2015-08-04 | 2015-11-11 | 国网浙江兰溪市供电公司 | 电表参数数据的擦写方法、在电表存储设备中搜索电力线参数的方法以及一种电表 |
CN107168647B (zh) * | 2017-04-17 | 2020-10-23 | 武汉永力科技股份有限公司 | Flash数据读写方法及系统 |
CN107861687B (zh) * | 2017-10-13 | 2020-09-11 | 华立科技股份有限公司 | 在flash存储器上实现电表电量小数的按位存储的方法 |
CN108804346A (zh) * | 2018-05-30 | 2018-11-13 | 广东思诺伟智能技术有限公司 | 一种电池soc数据在flash存储器存储的方法 |
CN109343865B (zh) * | 2018-09-21 | 2021-09-28 | 四川长虹电器股份有限公司 | 一种提升烧写eeprom效率的方法 |
CN110459259A (zh) * | 2019-07-31 | 2019-11-15 | 至誉科技(武汉)有限公司 | 存储设备写错误纠错能力的测试方法、系统及存储介质 |
CN110444247A (zh) * | 2019-07-31 | 2019-11-12 | 至誉科技(武汉)有限公司 | 存储设备写错误纠错能力的测试装置 |
CN110908603B (zh) * | 2019-11-01 | 2024-01-19 | 惠州市德赛西威汽车电子股份有限公司 | 一种数据存储防错处理系统及方法 |
CN111258498B (zh) * | 2019-12-06 | 2023-08-22 | 浙江零跑科技股份有限公司 | 一种flash存储器管理方法 |
CN111708487A (zh) * | 2020-05-26 | 2020-09-25 | 杭州涂鸦信息技术有限公司 | 一种数据存储的方法、装置及计算机存储介质 |
CN111813706A (zh) * | 2020-07-03 | 2020-10-23 | 杭州电子科技大学 | 一种实现MCU Flash存储器擦写损耗均衡的方法 |
CN112525278B (zh) * | 2020-12-05 | 2024-10-15 | 重庆前卫表业有限公司 | 一种应用均衡寿命存储方法的智能燃气表及数据存储方法 |
CN113132661B (zh) * | 2021-03-11 | 2022-04-12 | 深圳市阿达视高新技术有限公司 | 视频数据的存储方法及装置、存储介质及摄像设备 |
CN113946288A (zh) * | 2021-09-15 | 2022-01-18 | 长江存储科技有限责任公司 | 数据擦除方法、装置、电子设备及计算机存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1549133A (zh) * | 2003-05-22 | 2004-11-24 | 群联电子股份有限公司 | 快闪存储器的平行双轨使用方法 |
CN1713160A (zh) * | 2004-06-15 | 2005-12-28 | 冲电气工业株式会社 | 闪速存储器的写入方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100754226B1 (ko) * | 2006-08-22 | 2007-09-03 | 삼성전자주식회사 | 비휘발성 데이터 저장장치의 프로그래밍 방법 및 그 장치 |
-
2008
- 2008-12-09 CN CN2008102431425A patent/CN101419841B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1549133A (zh) * | 2003-05-22 | 2004-11-24 | 群联电子股份有限公司 | 快闪存储器的平行双轨使用方法 |
CN1713160A (zh) * | 2004-06-15 | 2005-12-28 | 冲电气工业株式会社 | 闪速存储器的写入方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101419841A (zh) | 2009-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101419841B (zh) | 一种flash存储器擦写方法 | |
CN101656106B (zh) | 一种向eeprom写入数据的方法及装置 | |
CN102135942B (zh) | 一种存储设备中实现损耗均衡的方法及存储设备 | |
US8775874B2 (en) | Data protection method, and memory controller and memory storage device using the same | |
CN101446921B (zh) | 一种Flash存储器的动态存储方法 | |
CN102063380B (zh) | 一种向非易失性存储器写入数据的方法及装置 | |
US20100332952A1 (en) | Flash Memory Controller and the Method Thereof | |
TW201437807A (zh) | 映射資訊記錄方法、記憶體控制器與記憶體儲存裝置 | |
CN102385902A (zh) | 固态储存装置及其数据控制方法 | |
CN101324862B (zh) | 闪存存储管理方法 | |
CN112447260B (zh) | 使用阈值电压分布之间的间隔来调整读取和写入电压 | |
CN102142277A (zh) | 一种存储器及存储器读写控制方法及系统 | |
CN101751996A (zh) | 非易失性存储器 | |
CN102662852A (zh) | 一种利用MCU内部数据Flash存储非易失性数据的方法 | |
KR20160024962A (ko) | 온-디맨드 블록 관리 | |
CN103106143A (zh) | 固态储存装置及其逻辑至实体对应表建立方法 | |
CN105843700B (zh) | 一种控制器 | |
CN102543196A (zh) | 数据读取方法、存储器储存装置及其控制器 | |
CN103295632A (zh) | 防止意外掉电引起线性累计数据突变的方法 | |
CN101930402B (zh) | 具有检错/纠错电路的非挥发存储器及其读写方法 | |
CN101425342B (zh) | 针对NAND Flash冗余码的存取方法 | |
CN107861687B (zh) | 在flash存储器上实现电表电量小数的按位存储的方法 | |
CN103136111A (zh) | 数据写入方法、存储器控制器与存储器储存装置 | |
CN102097125B (zh) | 相变存储器的写操作方法 | |
CN105653208A (zh) | 数据存储系统及基于该系统的数据读写方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C56 | Change in the name or address of the patentee | ||
CP02 | Change in the address of a patent holder |
Address after: Suzhou City, Jiangsu province 215137 Xiangcheng District Ji Road No. 8 Patentee after: Soochow University Address before: 215123 Suzhou City, Suzhou Province Industrial Park, No. love road, No. 199 Patentee before: Soochow University |
|
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110316 Termination date: 20131209 |