专利名称:一种flash存储器擦写方法
技术领域:
本发明涉及一种存储介质的擦写方法,具体涉及一种FLASH存储器的擦 写方法,适用于擦写频繁的嵌入式测量和控制系统中的FLASH存储器。
背景技术:
当前,嵌入式微控制器MCU在电子测量和控制领域得到了广泛的应用,而 在嵌入式测量和控制系统中,通常有一些系统状态数据、运行参数或测量数据 需要保存在非易失性存储器中。
FLASH存储器是一种在EPROM和EEPROM的制造技术基础上发展起来 的一种可擦除、非易失性存储元件,由于它具有功耗低、擦写速度快、价格便 宜的特点,在嵌入式系统中得到了越来越多的应用。嵌入式系统中使用的FLASH 存储器有两种, 一种是在MCU之外扩展的FLASH芯片,通常是用串行通信方 式实现读、写和擦除操作的;另外一种是MCU内部集成的FLASH存储器,通 过按一定步骤设置内部寄存器来完成擦除和写入操作。
FLASH存储器的擦写次数是有一定限制的,也就是说它有一定的使用寿命。 专门的FLASH芯片,擦写次数可达10万次而MCU内部集成的FLASH存储 器,擦写次数一般仅为l万次。由于FLASH存储器的擦写次数是有限的,如果 频繁地擦写FLASH存储器的某个固定区域,就会使该区域在较短的时间内达到 使用寿命,从而降低了 FLASH存储器的使用寿命,以至于影响整个系统的使用 寿命。
为延长FLASH存储器使用寿命,可采取的措施主要是将数据平均地写到用 来存储数据的整个FLASH存储区域,避免在某些存储区域频繁地擦写,确保在 整个系统的使用寿命期内,FLASH存储器不会达到它的使用寿命。
在有操作系统和文件管理系统的电子产品中,FLASH存储器作为大容量文 件存储器,可以采用较复杂的算法来均衡FLASH存储器的擦写,延长它的使用 寿命,如磨损均衡算法等。而在如上所述的嵌入式测量和控制系统中,通常没有操作系统和文件管理系统,而且用来存储数据的FLASH存储器容量也比较 小, 一般只有几K到几十K字节,因此不可能采用较复杂的算法来管理。具体 来说,若仅仅将数据平均地写到小容量的FLASH存储区域内,在正常连续写入 MCU中的情行下,不采用复杂的算法也是可以实现的,但是嵌入式仪器仪表在 不使用时通常会关闭电源,或在使用过程中出现掉电现象,在重新上电工作后 需要知道上次正常工作或掉电前写入的有效数据在FLASH存储器中的存储位 置,即有效数据区的起始地址和结束地址(至少需要知道结束地址),这就需要在 FLASH存储器中有几个固定单元用来保存这些地址,否则无法实现平均写入的 目的。如此一来,这些用于保存地址的单元还是会被频繁地擦写,会首先达到 擦写饱和值,从而影响到整个存储芯片的寿命。因而,如上所述的平均写入内 容的方法,并不能从根本上解决延长FLASH存储器使用寿命的问题。
发明内容
本发明目的是提供一种能够延长嵌入式系统中FLASH存储器使用寿命的 FLASH存储器擦写方法。
为达到上述目的,本发明采用的技术方案是一种FLASH存储器擦写方法, 包括以下步骤
(1) 设置数据帧结构,每一数据帧内含有8倍数的字节数,复数个数据帧 组成存储区域内的一页,所述存储区域划分为N页,编号0页 (N-l)页;
(2) 选定最后一个所述数据帧所在页为当前页,若该页已写满则转入下一 页I,将I页设为当前页,当所述I页为存储区域中的N-l页时,1+1页为0 页;
(3) 写入数据;
(4) 当前页I被写满后,转入下一页,并重新设定该页为当前页I,选择 擦除第1-1页或第1+1页内容的两种擦除方式中的一种,执行擦除;
(5) 在正常工作过程中,重复步骤(3),直至当前页为第N-l页,所述第1+1 页为O页;在重新上电后,重复步骤(2)。
上述技术方案中,步骤(l)中所述数据帧结构可包含起始字、数据域和结束 字,还可加入校验字,以便对写入数据正确性的检测,各字节组合构成8的倍数,以避免数据帧跨页存储。将FLASH存储器的存储空间划分成N页,编号 为0页 (N-1)页,每一页内可存储若干个数据帧,最后一个数据帧所在的页 称为当前页,在当前页内写入数据,写满一页后执行步骤(4)中的擦除,擦除方 式分为两种,根据存储数据需要保存周期的长短选择
① 要保存的数据只有一个数据帧的,选择擦除第I-1页。在FLASH存储 器的数据存储区中始终只有一个页(当前页I)保存有数据,其它页都是空的。 使用时,当前页(假设是第1-1页)写满后,在数据帧第一次正确写入下一页(第 I页)后,马上就把当前页(第1-1页)数据擦除,而写入第一个数据帧的页(第I 页)成为新当前页。从第0页到第N-l页轮流成为当前页,第N-1页写满后, 下一个写入的页重新回到第0页,这样不断循环使用,就使得数据存储区的每 个存储单元得到完全均衡的擦写;
② 要保存尽量多的数据帧,选择擦除第I+1页。在FLASH存储器的数据
存储区中除第一轮循环时会有多个空页存在,从第二轮循环开始,始终只有当
前页后面的一页是空的,其它页都会存有数据, 一共可以保存N-1页数据。使
用时,当前页(假设是第1-1页)写满后,在数据帧第一次正确写入下一页(第I
页)后,这个写入第一个数据帧的页(第I页)就成为当前页,然后擦除新当前页
(第I页)之后的一个页(第1+1页)。这样数据存储区不断循环使用,使得每个 存储单元得到完全均衡的擦写。
在所述步骤(5)中,所谓正常工作,是指在一次上电后的循环擦写操作,在 这个过程中没有出现关电、掉电等中断操作的现象,FLASH存储器保持正常 的擦写工作,那么重复步骤(3)实现循环;而当出现中断现象(包括掉电、重启 等),那么需要从步骤(2)开始重复,以找到当前页,继续写入数据,如此在失 电后FLASH存储器亦能找到上次写入的页位置,而非从新开始,实现均衡擦 写,延长FLASH的使用寿命。
上述技术方案中,所述数据帧结构依次包括起始字、数据区域、结束字及 校验字,所述结束字与校验字之间设置补偿字,使所述数据帧的字节数为8 的倍数。起始字、结束字为一或二个字节,可采用除FFH之外的特定十六进 制数,比如55H、 AAH或AA55H等,其作用是保证一帧数据的完整性;数据 域是要保存的具体数据,至少一个字节;校验字是它前面所有字节的校验码,可以采用l字节的CHECKSUM校验码或2字节的CRC16校验码,其作用是 保证写入数据的正确性。当由这四部分数据组成的数据帧的字节数不是正好为 8的倍数时,在结束字和校验字之间插入补偿字FFH,使得整个数据帧的字节 数等于8的倍数。
另一种方法是,在校验字之后到下一个8的倍数的地址之前的这些字节就 不再用来存储数据,下一次数据帧从下一个8的倍数的地址开始写入。
进一步的技术方案是,所述步骤(3)之前先确定当前页中写入数据的帧位置, 根据数据帧结构査找出该当前页中的最后一帧完整帧,并以该帧的下一帧的地 址作为写入数据的起始地址,然后执行步骤(3)写入数据。数据帧在写入过程中,
发生意外掉电情况时,会出现一个数据帧没有完整写入FLASH存储器,再上电 后找到的最后一帧数据就不会是完整的数据帧,它不会同时有正确的起始字和 结束字,这通过对起始字和结束字的比较就可以判断出来。由于在写入数据帧 时,通过校验保证了写入的正确性,之后才会进行擦除操作,所以存储的数据 至少会有一帧是正确的,当遇到最后一帧数据不完整时,它前面的一帧数据一 定是完整的,这样只要将最后一帧不完整数据前面的一帧数据作为最后一个有 效数据即可,跳过这个不完整的数据帧,而在它后面空白区的下一个帧的起始 地址就是初始写入地址。
进一步的技术方案是,所述步骤(3)中,在每写完一帧数据M后,读取该 帧的数据M,利用所述校验字检测读取数据M与写入数据S的吻合性,若检 测出未吻合,则转入下一数据帧,重新写入该帧数据S,若吻合则转入下一数 据帧,写入下一帧数据S+1。
上述技术方案中,所述步骤(4)中,选择擦除第1+1页内容的擦除方式情况 下,擦除前先判断第1+1页是数据页或是空白页,为数据页时执行擦除,否则 跳过擦除,进入下一步骤。
由于上述技术方案运用,本发明与现有技术相比具有下列优点本发明首 先设置数据帧结构,将存储区域划分成N页,每页中包含多个数据帧,以帧 结构写入数据,写满一页转入下一页时,根据需要保存数据量的多少,选择擦 除当前页前一页或是后一页两种方式中的一种,从第0页至第N-1页,再返回 第0页,如此在整个存储区域内循环,使得每个存储单元得到完全均衡的擦写,不需要保存已存储数据的地址,也不会受关电和掉电的影响,可以实现整个数 据存储区域完全均衡的擦写,可以大大延长FLASH存储器的使用寿命,完全 满足电子设备使用寿命的需要。
图1是本发明中擦除第1-1页内容方式存储区域示意图; 图2是本发明中擦除第I+l页内容方式存储区域示意图。
具体实施方式
下面结合附图及实施例对本发明作进一步描述
实施例一参见图1、 2所示, 一种FLASH存储器擦写方法,包括以下步
骤
(1) 设置数据帧结构,依次包括起始字、数据区域、结束字及校验字,结 束字与校验字之间可以设置补偿字FFH,使所述数据帧的字节数为8的倍数, 复数个数据帧组成存储区域内的一页,所述存储区域划分为N页,编号0页
(N-l)页;
(2) 选定最后一个所述数据帧所在页为当前页,若该页已写满则转入下一 页I,将I页设为当前页,当所述I页为存储区域中的N-l页时,I+l页为0 页;
(3) 先确定当前页中写入数据的帧位置,根据数据帧结构査找出该当前页 中的最后一帧完整帧,并以该帧的下一帧的地址作为写入数据的起始地址,然 后写入数据;在每写完一帧数据M后,读取该帧的数据M,利用所述校验字 检测读取数据M与写入数据S的吻合性,若检测出未吻合,则转入下一数据 帧,重新写入该帧数据S,若吻合则转入下一数据帧,写入下一帧数据S+1;
(4) 当前页I被写满后,转入下一页,并重新设定该页为当前页I,选择 擦除第I-l页(如图1所示)或第I+l页(如图2所示)内容的两种擦除方式 中的一种,执行擦除;当选择擦除第I+l页内容的擦除方式情况下,擦除前先 判断第I+l页是数据页或是空白页,为数据页时执行擦除,否则跳过擦除,进 入下一步骤;(5)在正常工作过程中,重复步骤(3),直至当前页为第N-l页,所述第1+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字节的55H,校验字采用2字节的CRC16校验码, 一个页中可以存储128 + 16=8帧数据。由于只需要最后一帧作为有效数据,因 此数据存储只需保存一帧,采用擦除第1-1页的方式。
设数据帧的写入地址存放在一个名字叫FlashAddr的指针中,每次上电 时,从地址C000H开始,找到最后一帧数据作为系统运行的有效数据,并使 FlashAddr指向下一帧地址的第一个字节处。如果C000H C7FFH的数据存 储区都是空的,则使FlashAddFC000H,并将系统运行的有效数据置为默认 的初始数据。
在运行过程中, 一般情况下每6分钟写入一帧数据到FLASH存储器,当 蓄电池电量发生变化时,还要马上写入到FLASH存储器中。除最初需写9帧 数据外,以后每写入8帧数据就会写满当前页并且会有一帧数据写到下一页 上,这时就擦除当前页,而下一页就成为新的当前页。当第15页写满后,第 0页成为新的当前页,这样就使C000H C7FFH的2KB数据存储区得到完全 均衡的擦写,延长了 FLASH存储器的使用寿命。
采用现有技术中的方法,使用固定单元存储数据,存储单元每6分钟就需 要擦写一次,在每天工作10小时的情况下,1万次擦写可以使用的时间是6 分钟X10000-60000分钟=1000小时-100工作日;在极限情况下的使用时间不 到42个工作日。即使是可以进行10万次擦写的FLASH存储器,每6分钟擦 写一次,在每天工作10小时的情况下也只能使用不到3年时间, 一般电子仪 表的使用寿命应该在IO年以上,因此FLASH会提前损坏,无法满足电子设备的需要。而在本实施例中,由于每6分钟写入一帧数据,每写入8帧数据后 会擦除一页,即每6X8=48分钟擦写一页,电量计中16页数据存储区都擦写 一遍的时间为48X 16=768分钟=12.8小时。假设电动搬运车每天工作10小时, 一年工作365天,1万次擦写可以使用的时间是12.8小时X 1000(H128000小 时=12800工作日=35年。即使是每天24小时工作的极限情况,实施例中的 FLASH存储器也可以使用将近15年,完全满足电子设备的需要。
权利要求
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)之前先确定当前页中写入数据的帧位置,根据数据帧结构査找出该当前 页中的最后一帧完整帧,并以该帧的下一帧的地址作为写入数据的起始地址, 然后执行步骤(3)写入数据。
4. 根据权利要求2所述的FLASH存储器擦写方法,其特征在于所述 步骤(3)中,在每写完一帧数据M后,读取该帧的数据M,利用所述校验字检 测读取数据M与写入数据S的吻合性,若检测出未吻合,则转入下一数据帧, 重新写入该帧数据S,若吻合则转入下一数据帧,写入下一帧数据S + 1。
5. 根据权利要求1所述的FLASH存储器擦写方法,其特征在于所述 步骤(4)中,选择擦除第1+1页内容的擦除方式情况下,擦除前先判断第1+1页 是数据页或是空白页,为数据页时执行擦除,否则跳过擦除,进入下一步骤。
全文摘要
本发明公开了一种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的使用寿命。
文档编号G11C16/06GK101419841SQ20081024314
公开日2009年4月29日 申请日期2008年12月9日 优先权日2008年12月9日
发明者刘晓升, 王宜怀, 陆晓峰 申请人:苏州大学