对闪存数据的存取进行管理的方法

文档序号:6763627阅读:92来源:国知局

专利名称::对闪存数据的存取进行管理的方法
技术领域
:本发明涉及对闪存的存储管理方法,尤其涉及一种自适应的对含有坏块的闪存中的数据存取进行管理的方法。
背景技术
:随着电子技术的不断发展,及人们对数据存储容量、存取速度的需求的不断上升。flash(闪存)介质以其制造成本低廉、存储量大、数据非易失、无机械故障等优点,被广泛地用作数据存储器。目前对闪存的存储管理方法大致有两种一种是跳坏块法,另一种方法是浮动存储位置法。下面首先介绍现有技术中对闪存进行存储管理的跳坏块法。“跳坏块”顾名思义就是在操作闪存时,遇到坏块时跳过去不操作坏块而用备份块来替代它。该法把闪存划分成以下几部分数据区、交换区、备用区、坏块记录区,其物理结构见图1(a)。其中,对各部分的描述如下(1)坏块记录区在坏块记录区中有一坏块记录表。该表如图1(b)所示,是在对闪存进行低级格式化时建立的,它维护着数据区的物理块与逻辑块之间的相互关系。用两个字节来表示一个逻辑块。这样,512个字节可以记录256个块。每个块的第一位如图所示表示有效位信息,其中0表示逻辑块有相应的物理块;1则表示没有相应的物理块。(2)备用块区备用块区是为数据区的坏块准备的,其大小与闪存的类型有关。例如对于NAND闪存闪存中的总块数×2%;对于MLC闪存闪存中的总块数×4%。(3)交换块区交换块区是为存取闪存中的数据区准备的,该区大小为1-N个块,由用户确定,但至少要有一个块。(4)数据区专门用于存放数据。在现有技术的跳坏块方法中,数据区的存取是按扇区(sector)来进行的,物理块与逻辑块的对照关系见图2。由图2可知,在跳坏块法中,除去坏块,物理块和逻辑块是相等的,图3是采用跳坏块法存取数据的方法流程图。在存取时,首先要计算逻辑块号的位置(步骤301),然后判断是否是坏块(步骤302)。如果是坏块,则从坏块记录表中计算逻辑块号(步骤303),然后根据计算的逻辑块号确定对应的物理块进行数据存取(步骤304);如果判断不是坏块,则直接存取数据(步骤305)。该方法有两个明显缺点A、数据存储位置是固定的,不能避免有的块会比其它块过多的使用导致闪存使用寿命缩短。B、数据的写入速度很慢。当然,相对于后续的存储位置浮动法会出现的坏块数大于24块时无法使用的缺陷而言,跳坏块法的闪存介质可以一直使用。这是其优点。为了克服跳坏块法的缺点及提高读写速度,出现了另一种方法--浮动存储位置法。“存储位置浮动法”顾名思义就是要通过变换存储位置以达到平衡各个块的写次数,延长闪存的使用寿命。该方法按分区(ZONE)来管理闪存,它把闪存划分成N个分区,每个分区由1024个块组成,其中逻辑块是1000个块。存储位置浮动法的物理结构及数据安排见表1。表1物理结构及数据安排存储位置浮动法的物理块与逻辑块的对应关系见图4。由图可知,逻辑块的存储位置是不固定的,以通过这种方式来避免过多地反复使用某一物理块。该方法是通过建立逻辑到物理的对照表来实现的,对照表是一个1024大小的两字节无符号型数组,如unsignedintgwL2Ptable,其中0~999项记录了逻辑块对应的物理块地址。例如gwL2Ptable=1023,表示逻辑块0的数据存放在物理块1023中。1000~1023项记录着坏块和空块的物理地址。存储位置浮动法的存取方法见图5。如图5所示,在现有技术的存储位置浮动法存取数据的过程中,首先要根据逻辑块地址,通过计算得到分区号及逻辑块在逻辑分区的偏移量(步骤501)。然后,通过查找闪存中的逻辑-物理块对照表,得到要操作的物理块地址dwSrcBlockAddress和空块的物理地址dwSpareBlockAddress(步骤502)。然后,进一步判断是要对闪存写入数据还是从闪存中读出数据(步骤503)。如果确定要从闪存中读取数据,则根据所确定的物理块地址读出数据(步骤504)。随后结束处理。另一方面,当确定要向闪存中写入数据时,则把未更新的数据复制到相应的空块中,同时把新的数据写入空块(步骤505)。该步骤如下i)判断该物理块是否为已用块(即含有有效数据的块)。如果不是,则直接向该块写入需要写的数据;否则进入下一步。ii)如果为已用块,首先把该物理块中不被更新的数据复制到空块中(交换块),把需要写入的数据也写入该空块的相应位置。然后,擦除操作块,并更新逻辑-物理块对照表(步骤506)。具体地说,由于在写操作之前,该逻辑地址是对应一个物理地址的(在对照表中)。但是发生写操作以后(上述的ii)步骤),该逻辑地址对应到了新的物理块上,这时需要更新对照表中的对应关系,把该物理地址对应到新的物理块(原来的交换块)上,同时擦除原物理块。该方法把连续的1024个块看成一个分区,其中1000个块用于数据存储。但该方法也存在缺点,如果一个分区的坏块超过24个块,则会出现闪存由于坏块过多不能使用的缺点。
发明内容鉴于现有技术的上述缺陷,本发明的目的即在于提出一种自适应的数据存取管理方法,在该方法中,与存储位置浮动法一样,还是把闪存看成是由N个连续的分区组成,每个分区又由若干个块组成。但是有效的逻辑块不再是固定的,而是一个分区中块的总数-(一个空块+M个坏块),其中空块是为写准备的,M个坏块是在上电初始化时通过查看坏块记录表确定的。本发明的数据存取管理方法包括如下步骤(1)查看是否有坏块记录表,如果没有则建立所述坏块记录表;(2)根据坏块记录表,确定每个分区中的有效逻辑块;和(3)按照确定的所述有效逻辑块,对所述闪存进行数据存取。本发明的方法既继承了存储位置浮动法的优点,又克服了其在一个分区的坏块超过24个块就不能用的缺点,使闪存的使用寿命得以延长。图1(a)是采用现有技术的跳坏块法的闪存结构图;图1(b)是在跳坏块法中的坏块记录表的结构示意图;图2是在现有技术的存储位置浮动法中物理块与逻辑块对应关系的示意图;图3是现有技术的跳坏块法中的数据存取方法的流程图;图4是现有技术的存储位置浮动法中物理块与逻辑块对应关系图;图5是存储位置浮动法的存取方法流程图;图6是根据本发明的自适应的数据存取方法的流程图;图7是坏块记录表物理结构图;图8是坏块记录项描述图;图9是分区的有效逻辑块确立流程图;图10是根据本发明的自适应的数据存取方法的数据存取过程图。具体实施例方式下面结合附图,对本发明的方法进行详细地描述。本发明为克服存储位置浮动法的缺点,在存储位置浮动法的基础上提出了存储管理自适应方法。实现该方法的总流程图见附图6。与存储位置浮动法一样还是把闪存看成是由N个连续的分区组成,每个分区由若干个块组成。为便于说明,以下以1024个块作为一个分区为例。在这种情况下,有效的逻辑块不再是固定的1000个块,而是1024-(一个空块+M个坏块),其中空块是为写操作准备的,M个坏块是在上电初始化时通过查看坏块记录表确定的。事实上,本发明的方法是在现有的存储位置浮动法的基础上,使用了跳坏块法的坏块记录表的特征。但是,具体的使用方法是不一样的。在“跳坏块法”中,坏块记录表是在写操作的过程中查找物理地址时使用的。但在本发明中,坏块记录表只有在计算有效逻辑块时使用。如图6所示,根据本发明方法的一个优选实施方案,其数据存取管理方法包括在闪存上电时,闪存盘控制程序会查找坏块记录表(步骤601),若没有找到就对闪存进行低级格式化并建立该表(步骤602),它记录着坏块的物理地址,用四个字节来记录一个坏块的信息。坏块记录表用第一个物理好块来存放。图7显示了用于存放坏块记录表的块的物理结构。其中“块状态”描述了闪存的各物理块的状态(每个块都有这样的块状态项)0x00表示该块是坏块;0x55表示该块是坏块记录表;0xff表示该块是数据块。当然,上述数值是自定义的,可以改为其他的值,只是一个标记,不会因存储介质或者厂商而改变。需要说明,在图7中所示的第一行中,除了块状态之外,表中其它单元格有其它的意义,但与本发明的实现无关,因此为简明起见,予以省略。另外,其它行的格式与第一行是相同的。图8显示了坏块记录项。如上所述,一个坏块信息用连续的四字节来表示,因此512个字节的坏块记录项可以记录128个坏块。另外还有16个字节的冗余。在一个坏块信息中,芯片号记录了块所在的闪存芯片位置,分区号则记录了坏块所在的分区的编号。后两个字节分别记录了坏块的高位地址和低位地址。坏块记录结束标志是连续的四字节,0xffffffff表示结束。根据本发明的方法,在确定了坏块记录表之后,根据该坏块记录表确定每个分区的有效逻辑块(步骤603)。与现有技术的存储位置浮动法一样,本发明的方法还是把闪存看成是由N个连续的分区组成,每个分区也是由1024(这是一个自定义的值,也是一个经验值,可以取其它的值)个连续的物理块组成。但是有效逻辑块的设置与存储位置浮动法不一样,不再是固定的1000个块,而是1024-(一个空块+M个坏块)。其中空块是为写准备的,M个坏块是在上电初始化时通过查看坏块记录表确定的。对于每片的物理块最大数目是8192的闪存(有的闪存的物理块数目小于8192),可以用一个8个两字节大小的数组如unsignedshortgwLogBlockNumbersPerZone[8]来记录每个分区的有效逻辑块;用一个临时变量数组如unsignedlongldwTempBuff[128]来记录坏块记录项的数据;用一个变量如chariBadBlcokRecordItems来表示要操作的坏块记录项;用一个变量如unsignedchariBadBlockItems来表示坏块记录项的第I项。每个分区的有效逻辑块的确定将在下文中详细说明。接着,进一步确定是否要对闪存进行数据存取操作(步骤604),如是则进行数据存取(步骤605),如否则等待对闪存的下一步操作命令。数据存取的具体过程将在下文中具体说明。下面结合图9说明根据本发明的确定每个分区的有效逻辑块的方法。首先对记录每个分区的有效逻辑块的8个两字节大小的数组变量gwLogBlockNumbersPerZone[8]初始化,将其中的每一项初始化为1023,并将表示要操作的坏块记录项的变量iBadBlcokRecordItems初始化为0(步骤901)。然后,将要操作的第iBadBlcokRecordItems的坏块项的数据当读到1dwTempBuff[128]临时缓冲器中。这个数据包含了坏块记录表中的每512个字节的情况。由于在闪存中是以512个字节为一个最小的编程(写)单元(Sector),因此在记录和读取坏块信息时也是以512字节为单位进行的。这个数据就是坏块表中的每512个字节。此时缓冲器中的变量值为1dwTempBuff[iBadBlockItems],并将表示坏块记录项的第I项的变量iBadBlockItems初始化为0(步骤902)。接着,在步骤903,判断变量值1dwTempBuff[iBadBlockItems]是否是结束标志。如果判断1dwTempBuff[iBadBlockItems]是结束标志,则结束处理。否则由该项值得到分区号,并将该相应分区的逻辑块减一。即执行gwLogBlockNumbersPerZone[ZoneNo]--和iBadBlockItems++(步骤904)。接下来进一步判断是否已遍历坏块记录项,在本例中即判断表示坏块记录项的第I项的变量iBadBlockItems是否达到最大值128(步骤905)。如果不是,则返回步骤903处理;如果不是,则进行至步骤906,将表示要操作的坏块记录项的变量iBadBlcokRecordItems的值加1(即iBadBlcokRecordItems++),然后返回至步骤902处理。直到判断1dwTempBuff[iBadBlockItems]是结束标志为止。通过上述步骤,就确定了每个分区的有效逻辑块。图10是说明根据本发明一实施方案的数据存取的流程图。如图10所示,在采用本发明的数据存取管理方法的闪存中,当确定要进行数据存取时(图6的步骤604和605),则首先根据要操作的逻辑块的地址,通过计算得到分区号和逻辑块在逻辑分区中的偏移量(步骤1001)。接着,通过查找闪存中的逻辑-物理块对照表,得到要操作的物理块地址dwSrcBlockAddress和空块的物理地址dwSpareBlockAddress(步骤1002)。具体地说,在步骤1002中,当前要操作的分区号和物理块地址是通过逻辑块地址和每个分区的有效逻辑块地址决定的,具体决定步骤包括(1)将分区号(ZoneNo)设置为0,设LBAddr为要操作的块地址;(2)如果LBAddr小于gwLogBlockNumbersPerZone[分区号],则要操作的分区号ZoneNo和LBAOfZone(表示在一个分区单元内的逻辑地址)已经找到(LBAOfZone=LBAddr)。否则LBAOfZone=LBAddr-gwLogBlockNumbersPerZone[分区号],将分区号加一(即ZoneNo++),继续判断,直到找到LBAOfZone。(3)根据逻辑-物理块对照表的第LBAOfZone位置的值,即gwL2Ptable[LBAOfZone],得到要操作的逻辑块所对应的物理块地址;(4)根据gwL2Ptable[gwLogBlockNumbersPerZone[分区号]]得到对应的空块。然后,进一步判断是要对闪存写入数据还是从闪存中读出数据(步骤1003)。如果确定要从闪存中读取数据,则根据所确定的物理块地址读出数据(步骤1004)。随后结束处理。另一方面,当确定要向闪存中写入数据时,则把未更新的数据复制到相应的空块中,同时把新的数据写入空块(步骤1005)。这一步与图5所示的然后,擦除操作块,并更新逻辑-物理块对照表(步骤1006)。与图5所示的现有技术的更新方式是相同的。本发明的上述方法的数据存取过程与存储位置浮动法的数据存取过程是大致一样的,都是通过建立逻辑-物理块对照表unsignedintgwL2Ptable来完成的。不同之处是本发明方法的空块都是存放在对照表的gwLogBlockNumbersPerZone[分区号]处,而不是在对照表的第1000的位置处。以上对本发明具体实施方式的说明并非是对发明的限定。显然在由权利要求所限定的本发明的精神和实质范围内,可以对本发明的上述实施方式做出各种修改和变化。因此,本发明的权利要求的保护范围将包括这些等同的修改和变化。权利要求1.一种对闪存数据的存取进行管理的方法,所述闪存分为多个连续的分区,所述方法包括以下步骤(1)查看是否有坏块记录表,如果没有则建立所述坏块记录表;(2)根据坏块记录表,确定分区中的有效逻辑块;和(3)按照确定的所述有效逻辑块,对所述闪存进行数据存取。2.根据权利要求1所述的方法,其特征在于,所述步骤(2)包括(2-1)对记录每个分区的有效逻辑块的数组变量、和表示要操作的坏块记录项的变量进行初始化;(2-2)将要操作的坏块项的数据读到临时缓冲器中,并将表示第i项的坏块记录项的变量初始化;(2-3)由所述临时缓冲器中的变量值得到分区号,并将该分区的逻辑块数量减一;(2-4)重复步骤(2-2)和(2-3)的处理,直到已遍历所有的坏块记录项。3.根据权利要求2所述的方法,其特征在于,所述步骤(2-3)进一步包括(2-3-1)判断所述临时缓冲器中的变量值是否是结束标志;(2-3-2)如果判断所述临时缓冲器中的变量值不是结束标志,则将与该变量值对应的分区的逻辑块数量减1,将坏块数量值加1。4.根据权利要求3所述的方法,其特征在于,其特征在于,在一个所述分区中的有效逻辑块数目=一个分区中的块总数-(空块数量+坏块数量)其中所述空块用于写操作,坏块数量根据坏块记录表确定。5.根据权利要求4所述的方法,所述空块数量为1。6.根据权利要求1所述的方法,其特征在于,所述坏块记录表包括坏块记录项,块状态项和坏块记录结束标志,其中所述坏块记录项包括坏块信息项,包括芯片号,用于记录块所在的闪存芯片的位置,分区号,用于记录坏块所在的分区的编号,以及坏块地址;所述块状态项表示块的状态,所述块状态包括坏块,坏块记录表,以及数据块。7.根据前述权利要求任一项所述的方法,其特征在于,所述步骤(3)包括(3-1)根据要操作的逻辑块的地址,确定分区号和逻辑块在逻辑分区中的偏移量;(3-2)通过查找闪存中的逻辑-物理块对照表,得到要操作的物理块地址和空块的物理地址;(3-3)根据所确定的物理块地址读出数据,或根据所得到的物理块地址和空块的物理地址,向闪存写入数据。8.根据述权利要求7所述的方法,其特征在于,所述步骤(3-2)包括(3-2-1)将分区号设置为0,设LBAddr为要操作的块地址;(3-2-2)如果LBAddr小于gwLogBlockNumbersPerZone[分区号],则确定LBAOfZone=LBAddr,否则LBAOfZone=LBAddr-gwLogBlockNumbersPerZone[分区号],将分区号加一,继续判断,直到找到LBAOfZone;(3-2-3)根据逻辑-物理块对照表的第LBAOfZone位置的值,得到要操作的逻辑块所对应的物理块地址;(3-2-4)根据gwL2Ptable[gwLogBlockNumbersPerZone[分区号]]的值得到对应的空块。9.根据权利要求8所述的方法,其特征在于,所述向闪存中写入数据的步骤包括把未更新的数据复制到相应的空块中,同时把新的数据写入空块。10.根据权利要求9所述的方法,其特征在于,进一步包括在完成数据写入后,擦除写操作所用的空块,并更新所述逻辑-物理块对照表。全文摘要本发明公开了一种对闪存数据存取进行管理的自适应方法,所述闪存分为多个连续的分区,所述方法包括以下步骤(1)查看是否有坏块记录表,如果没有则建立所述坏块记录表;(2)根据坏块记录表,确定每个分区中的有效逻辑块;和(3)按照确定的所述有效逻辑块,对所述闪存进行数据存取。使用本发明的方法,既继承了存储位置浮动法的优点又克服了其在一个分区的坏块超过24个块就不能用的缺点,使闪存的使用寿命得以增强。文档编号G11C29/00GK1716450SQ20041006264公开日2006年1月4日申请日期2004年6月30日优先权日2004年6月30日发明者罗培彬申请人:深圳市朗科科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1