专利名称:闪存的安全写入方法
技术领域:
本发明涉及芯片存储器的安全读写的方法,具体来说是闪存的一种安全写入方法。
背景技术:
近些年来,闪存(Flash Memory)存储介质在嵌入式系统中得到迅速发展和广泛应用。闪存是一种基于半导体的存储器,具有系统掉电后仍可保留内部信息,及在线擦写等功能特点,是一种替代原来EEPROM存储介质的新型存储器。
首先介绍一下闪存(Flash Memory)的特性和限制,这里所介绍的闪存的特性和限制都是从上层的文件系统的角度来看的,而不会涉及到具体的物理特性A)闪存的最小寻址单位是字节(byte),而不是磁盘上的扇区(sector)。这意味着我们可以从一块闪存的任意偏移(offset)读数据,但并不表明对闪存写操作也是以字节为单位进行的。
B)当一块闪存处在干净的状态时(被擦写过,但是还没有写操作发生),在这块flash上的每一位(bit)都是逻辑1。
C)闪存上的每一位(bit)可以被写操作置成逻辑0。可是把逻辑0置成逻辑1却不能按位(bit)来操作,一般一个最小擦除单元称为擦写块,擦写操作只能按擦写块(erase block)为单位进行。擦写块的大小从4K到128K不等。从上层来看,擦写所完成的功能就是把擦写块内的每一位都重设置(reset)成逻辑1。
D)闪存的使用寿命是有限的。具体来说,闪存的使用寿命是由擦写块的最大可擦写次数来决定的。超过了最大可擦写次数,这个擦写块就成为坏块(bad block)了。因此为了避免某个擦写块被过度擦写,以至于它先于其他的擦写块达到最大可擦写次数,我们应该在尽量小的影响性能的前提下,使擦写操作均匀的分布在每个擦写块上。这个过程叫做磨损平衡(wear leveling)。
E)闪存一般有一个最大写入单元,通常我们习惯把最大写入单元称为页,一般一个擦写块包含一个或者多个页。
在嵌入式系统开发中,为提高可靠性及安全性,要求对闪存的写操作做防掉电保护处理。防掉电保护是指在一次写操作完成前,如果系统意外掉电,在重新上电后,系统可以恢复到写操作之前的状态。然而由于闪存擦写方面的一些特性,导致其针对闪存的防掉电处理相对来说困难很多。
由于闪存的上述特性,目前运行在闪存上的文件系统要改写一个块设备的扇区时,通常是将这个扇区所在擦写块的数据读到内存中,放在缓存(buffer)中,然后将缓存中与这个扇区对应的内容用新的内容替换掉,再对该擦写块执行擦写操作,最后将缓冲中的数据写回该擦写块。这种实现方式的缺点是很明显的效率低,对一个扇区的更新要重写整个擦写块上的数据,也造成内存空间很大的浪费;没有提供磨损平衡,那些被频繁更新的数据所在擦写块将首先变成坏块;非常不安全,很容易引起数据的丢失。如果在上面的操作最后两步之间发生了突然掉电(power loss),那么整个擦写块中的数据就全部丢失了。这在突然掉电经常发生的嵌入式系统中是不能接受的。
发明内容
本发明克服了上述缺点,提供了一种安全、磨损平衡而且节省内存的针对闪存的安全读写的方法。
本发明解决其技术问题所采取的技术方案是闪存的一种安全写入方法,将每个最小擦写单元作为一个逻辑块,每个逻辑块中包含一个或多个逻辑页,并给每一个逻辑块编号,所述逻辑块中包括一个预留的用于数据中转的备份块,数据的写入包括以下步骤1)根据要写入内容的目标地址所在的逻辑块,获取对应目标块的逻辑块号和所述逻辑块内对应页的页号;2)将要写入的内容按步骤1)中获取的页号写入所述备份块中的对应页中;3)将所述目标块中除所述目标页外的其他各页写入所述备份块中对应的其他各页中;4)将备份块中的逻辑块号由所述步骤1)中目标块的逻辑块号替换;5)当所述备份块号的各个有效位全部为“1”时,擦除步骤1)中目标逻辑块中的全部内容,所述擦除后的目标逻辑块成为新的备份块,当所述备份块号的各个有效位不全为“1”时,擦除步骤1)中目标逻辑块中的全部内容,并将逻辑块号改写为备份块号,作为新的备份块。
所述步骤2)、3)顺序不限。
所述逻辑块号可以固定位数存储在所在逻辑块中。
所述逻辑块号可保存在所在逻辑块的第一个或最后一个字节中。
如果在步骤4)和步骤5)之间发生掉电,则上电后,可进行以下步骤选取并保留两个具有相同逻辑块号中的任一个逻辑块,另外一个作为备份逻辑块,并擦除所述备份逻辑块中的内容。
对每个逻辑块的编号可在系统对闪存初始化或者格式化的时候进行。
闪存的一种安全写入方法,将每个最小擦写单元作为一个逻辑块,每个逻辑块包含一个或多个逻辑页,并给每一个逻辑块编号,所述逻辑块中包括一个预留的用于数据中转的备份块,当所述逻辑块号的各个有效位全为“0”时,数据的写入包括以下步骤1)根据要写入内容的目标地址所在的逻辑块,获取对应目标块的逻辑块号和所述逻辑块内对应页的页号;2)找到并擦除所述备份块中的全部内容;3)将要写入的内容按步骤1)中获取的页号写入所述备份块中的对应页中;4)将所述目标块中除所述目标页外的其他各页写入所述备份块中对应的其他各页中;5)将备份块中的逻辑块号由所述步骤1)中目标块的逻辑块号替换;6)将步骤1)中原目标块中的逻辑块号改写为备份块的逻辑块块号;所述步骤4)、5)顺序不限。
所述逻辑块号可以固定位数存储在所在逻辑块中。
所述逻辑块号可保存在所在逻辑块的第一个或最后一个字节中。
如果在步骤5)和步骤6)之间发生掉电,则上电后,可进行以下步骤选取并保留两个具有相同逻辑块号中的任一个逻辑块,另外一个作为备份逻辑块,并更改所述备份逻辑块中逻辑块编号单元为全“0”。
对每个逻辑块的编号可在系统对闪存初始化或者格式化的时候进行。
本发明将每个最小擦写单元作为一个逻辑块,每个逻辑块中包含一个或多个逻辑页,通过并给每一个逻辑块编号,将要写入的数据和目标逻辑块中的内容都写入备份逻辑块,并将备份逻辑块的逻辑号和目标逻辑块的块号倒置,从而实现数据的安全写入,并可以达到很好的掉电保护的作用,同时所述备份块是随机的,避免了某个擦写块被过度擦写,以至于它先于其他的逻辑块达到最大可擦写次数,从而达到磨损平衡,提高闪存的使用寿命,从而提高系统性能,此外由于相比于现有技术,不需要经常擦写整个擦写块,很大程度的减少了内存的使用量。
图1为本发明实施例1中存储器在改写前的初始状态;图2为本发明实施例1中完成步骤2后存储器的状态;图3为本发明实施例1中完成步骤3后存储器的状态;图4为本发明实施例1中完成步骤4后存储器的状态;图5为本发明实施例1中完成步骤5后存储器的状态。
图6为本发明实施例2中存储器在改写前的初始状态;图7为本发明实施例2中完成步骤2后存储器的状态;图8为本发明实施例2中完成步骤3后存储器的状态;图9为本发明实施例2中完成步骤4后存储器的状态;图10为本发明实施例2中完成步骤5后存储器的状态。
具体实施例方式
下面根据具体实施例对本发明内容做详细描述。
由于闪存(Flash Memory)的写以页为单位,擦除以块为单位,不同的类型的闪存对页和块的划分有区别,我们以一个擦写块64字节,每个擦写块分8个页的总共四个擦写块的存储区为例,遵循每个逻辑块唯一的对应一个擦写块,因此每个逻辑块也是64个字节,分为8个页。系统对数据的读写都是基于所述逻辑块来处理,对闪存介质的寻址都是根据逻辑地址进行。同时,还要至少保留一个备份擦写块,用于数据中转。
实施例1,在系统对闪存初始化或者格式化的时候,使闪存中每个物理擦写单元对应一个逻辑块,给每一个逻辑块都编号,本实施例中占用每个逻辑块的第一个字节存放逻辑块号,如图1所示,这样每个逻辑块的可用容量其实就变成63字节,而整个存储区的大小为252个字节。这里我们分别定义四个逻辑块的逻辑号为00、01、02、03、,其中逻辑号为00的逻辑块为保留的备份逻辑块,且为未使用或者经过擦除后的逻辑块,用于数据的中转。同时我们设置01号逻辑块对应物理块0,02号逻辑块对应物理块1,03号逻辑块对应物理块3,00号逻辑块对应物理块2,逻辑地址编址为逻辑块号从小到大的顺序来编排。逻辑块的编号根据具体的应用来决定,可以采用不同的方法。
例如要对逻辑地址0x31~0x38写入一串数字7,具体步骤如下1、根据要写入的目标逻辑地址,获取对应的目标逻辑块号与页号,在这里为逻辑块01和其中的第7页,如图1所示;2、根据逻辑块号00找到备份逻辑块,并擦除找到的此备份逻辑块,使其包括逻辑块号在内的全部存储区域均为逻辑“1”,如图2所示;3、把要改写的内容写入步骤1中计算出目标逻辑块号和页号对应的备份块中的逻辑块号和页号中,即将一串数字7写入备份块的第7页,并将对应于逻辑块01中的其他页拷贝到备份逻辑块中相应页中,如图3所示;4、将备份块的逻辑号,改成步骤1中计算出的目标逻辑块的块号,即将备份块此时的逻辑号FF改为01,如图4所示;5、将步骤1中计算出的逻辑块的逻辑块号(即原逻辑块01的块号)改写为备份块块号00,如图5所示;通过以上操作,我们可以发现逻辑块01已经安全地改写为预定的值,只不过数据已经改写到另外的物理块上面,而其本身的物理块则成为新的备份逻辑块(即逻辑块00)。在这个过程当中任何时候发生掉电都不会引起数据的丢失,例如a)如果掉电发生在步骤3以前,对要改写的逻辑块没有任何影响。
b)如果掉电发生在步骤3和4之间,由于此时逻辑块号没有任何变化,重新上电就可以恢复。
c)如果掉电发生在步骤4和5之间,此时,会存在两个相同块号的块,这样,重新上电后任选一个作为逻辑块,另外一个作为备份块,然后将逻辑块号改写为备份块的逻辑块号00即可。
实施例2,在系统对闪存初始化或者格式化的时候,使闪存中每个物理擦写单元对应一个逻辑块,给每一个逻辑块都编号,本实施例中占用每个逻辑块的第一个字节存放逻辑块号,如图6所示,这样每个逻辑块的可用容量其实就变成63字节,而整个存储区的大小为252个字节。这里我们分别定义四个逻辑块的逻辑号为01、02、03、FF,其中逻辑块号为FF的逻辑块为保留的备份逻辑块,用于数据的中转。同时我们设置01号逻辑块对应物理块0,02号逻辑块对应物理块1,03号逻辑块对应物理块3,FF号逻辑块对应物理块2,逻辑块的编号根据具体的应用来决定,可以采用不同的方法。
例如要对逻辑地址0x31~0x38写入一串数字7,具体步骤如下1、根据要写入的逻辑地址,获取对应的目标逻辑块号与页号,在这里为逻辑块01和其中的第7页,如图6所示;2、根据逻辑块号FF找到备份逻辑块,此备份逻辑块此时应为未使用或者擦除后未使用,如图7所示;3、把要改写的内容写入步骤1中计算出目标逻辑块号和页号对应的备份块中的逻辑块号和页号中,即将一串数字7写入备份块FF的第7页,并将对应于逻辑块01中的其他页拷贝到备份逻辑块中相应页中,完成这一步后存储器中的数据如图8所示;4、将备份块的逻辑号,改成步骤1中计算出的目标逻辑块的块号,即将备份块的逻辑号改为01,如图9所示;5、擦除步骤1中计算出的目标逻辑块,即将整个逻辑块全部改写为逻辑“1”,则逻辑块号为FF,使其成为新的备份块,如图10所示;通过以上操作,我们可以发现逻辑块01已经安全地改写为预定的值,只不过数据已经改写到另外的物理块上面,而其本身的物理块已经处于干净的状态,即被擦除过,但尚没有写操作发生,成为新的逻辑备份块。在这个过程当中任何时候发生掉电都不会引起数据的丢失,例如a)如果掉电发生在步骤3以前,对要改写的逻辑块没有任何影响。
b)如果掉电发生在步骤3和4之间,由于此时逻辑块号没有任何变化,重新上电就可以恢复。
c)如果掉电发生在步骤4和5之间,此时,会存在两个相同块号的块,这样,重新上电后任选一个作为目标逻辑块,另外一个作为备份块,然后擦除作为备份块的逻辑块即可。
经过上述处理,就能保证系统数据的安全性,从而达到了安全读写的目的,而且备份块的随机更迭也保证了磨损平衡,不会因为频繁擦写某一个物理块而导致其提前成为坏块。同时由于不需要过多的擦写整个擦写块,很大程度的减少了内存的使用量。
以上对本发明所提供的闪存的安全写入方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.闪存的一种安全写入方法,其特征在于将每个最小擦写单元作为一个逻辑块,每个逻辑块中包含一个或者多个逻辑页,并给每一个逻辑块编号,所述逻辑块中包括一个预留的用于数据中转的备份块,数据的写入包括以下步骤1)根据要写入内容的目标地址所在的逻辑块,获取对应目标块的逻辑块号和所述逻辑块内对应页的页号;2)将要写入的内容按步骤1)中获取的页号写入所述备份块中的对应页中;3)将所述目标块中除所述目标页外的其他各页写入所述备份块中对应的其他各页中;4)将备份块中的逻辑块号由所述步骤1)中目标块的逻辑块号替换;5)当所述备份块号的各个有效位全部为“1”时,擦除步骤1)中目标逻辑块中的全部内容,所述擦除后的目标逻辑块成为新的备份块,当所述备份块号的各个有效位不全为“1”时,擦除步骤1)中目标逻辑块中的全部内容,并将逻辑块号改写为备份块号,作为新的备份块。所述步骤2)、3)顺序不限。
2.根据权利要求1所述的闪存的安全写方法,其特征在于所述逻辑块号以固定位数存储在所在逻辑块中。
3.根据权利要求2所述的闪存的安全写方法,其特征在于所述逻辑块号保存在所在逻辑块的第一个字节中或最后一个字节。
4.根据权利要求1或2或3所述的闪存的安全写方法,其特征在于如果在步骤4)和步骤5)之间发生掉电,则上电后,进行以下步骤选取并保留两个具有相同逻辑块号中的任一个逻辑块,另外一个作为备份逻辑块,并擦除所述备份逻辑块中的内容。
5.根据权利要求1或2或3所述的闪存的安全写方法,其特征在于对每个逻辑块的编号在系统对闪存初始化或者格式化的时候进行。
6.闪存的一种安全写入方法,其特征在于将每个最小擦写单元作为一个逻辑块,每个逻辑块中包含一个或者多个逻辑页,并给每一个逻辑块编号,所述逻辑块中包括一个预留的用于数据中转的备份块,当所述逻辑块号的各个有效位全为“0”时,数据的写入包括以下步骤1)根据要写入内容的目标地址所在的逻辑块,获取对应目标块的逻辑块号和所述逻辑块内对应页的页号;2)找到并擦除所述备份块中的全部内容;3)将要写入的内容按步骤1)中获取的页号写入所述备份块中的对应页中;4)将所述目标块中除所述目标页外的其他各页写入所述备份块中对应的其他各页中;5)将备份块中的逻辑块号由所述步骤1)中目标块的逻辑块号替换;6)将步骤1)中原目标块中的逻辑块号改写为备份块的逻辑块块号;所述步骤3)、4)顺序不限。
7.根据权利要求6所述的闪存的安全写入方法,其特征在于所述逻辑块号以固定位数存储在所在逻辑块中。
8.根据权利要求7所述的闪存的安全写入方法,其特征在于所述逻辑块号保存在所在逻辑块的第一个字节中或最后一个字节。
9.根据权利要求6或7或8所述的闪存的安全写入方法,其特征在于如果在步骤5)和步骤6)之间发生掉电,则上电后,进行以下步骤选取并保留两个具有相同逻辑块号中的任一个逻辑块,另外一个作为备份逻辑块,并更改所述备份逻辑块中逻辑块编号单元为全“0”。
10.根据权利要求6或7或8所述的闪存的安全写入方法,其特征在于对每个逻辑块的编号在系统对闪存初始化或者格式化的时候进行。
全文摘要
本发明涉及芯片存储器的安全读写的方法,具体来说是闪存的一种安全写入方法。本发明将每个最小擦写单元作为一个逻辑块,每个逻辑块中包含一个或者多个逻辑页,通过并给每一个逻辑块编号,将要写入的数据和目标逻辑块中的内容都写入备份逻辑块,并将备份逻辑块的逻辑号和目标逻辑块的块号倒置,从而实现数据的安全写入,并可以达到很好的掉电保护的作用,同时所述备份块是随机的,避免了某个擦写块被过度擦写,以至于它先于其他的逻辑块达到最大可擦写次数,从而达到磨损平衡,提高闪存的使用寿命,从而提高系统性能,此外由于相比于现有技术,不需要经常擦写整个擦写块,很大程度地减少了内存的使用量。
文档编号G06F11/14GK1845082SQ200610078999
公开日2006年10月11日 申请日期2006年4月29日 优先权日2006年4月29日
发明者陆舟, 于华章 申请人:北京飞天诚信科技有限公司