具有阶段性编程失败处置的非易失性存储器和方法

文档序号:6756250阅读:283来源:国知局
专利名称:具有阶段性编程失败处置的非易失性存储器和方法
技术领域
本发明一般涉及非易失性半导体存储器,尤其涉及具有时间紧要的编程失败处置的存储器区块管理系统的非易失性半导体存储器。
背景技术
能够进行电荷的非易失性存储的固态存储器,尤其是封装成小型存储器卡的EEPROM和快闪EEPROM的形式,近来已成为各种移动和手持装置选择的存储装置,特别是信息家电和消费性电子产品。不像也是固态存储器的RAM(随机存取存储器),快闪存储器是非易失性,即使在关闭电源后仍能保留其存储的数据。还有,不像ROM(只读存储器),快闪存储器和磁盘存储装置一样都可再写。尽管成本较高,但在大量存储应用中,快闪存储器的使用渐增。基于旋转磁性媒体的常规大量存储装置,例如硬盘和软盘,并不适合移动和手持环境。这是因为磁盘驱动器倾向于体积庞大,容易发生机械故障且具有较高的等待时间和高功率需求。这些不想要的属性使得基于磁盘的存储装置无法在大多数的移动和可携式应用中使用。另一方面,既为内嵌式且为抽取式存储器卡的形式的快闪存储器理想地适合移动和手持环境,因其尺寸小、功率消耗低、高速和高可靠性等特性。
快闪EEPROM和EEPROM(电子可擦除和可程序只读存储器)的相似处在于,它是能够被擦除且能将新的数据写入或「编程」到其存储器单元中的非易失性存储器。二者均利用场效晶体管结构中,位于半导体衬底中的通道区上且在源极和汲极区之间的浮动(未连接)导电栅极。接着在浮栅上提供控制栅极。浮栅所保留的电荷量可控制晶体管的临界电压特性。也就是说,就浮栅上给定电平的电荷而言,其中有必须在「开启」晶体管之前施加在控制栅极的对应电压(临界值),以允许在其源极和汲极区之间的导电。尤其,如快闪EEPROM的快闪存储器允许同时擦除存储器单元的整个区块。
浮栅可以保持某个电荷范围,因此,可经编程为临界电压窗内的任何临界电压电平。临界电压窗的尺寸受限于装置的最小和最大临界电平,而装置的最小和最大临界电平对应于可经编程到浮栅上的电荷范围。临界窗一般根据存储器装置的特性、操作条件和记录而定。原则上,在这个窗内,各有所不同的、可解析的临界电压电平范围均可用于指定单元的明确的存储器状态。
通常会通过两种机制之一,将作为存储器单元的晶体管编程为「已编程」状态。在「热电子注入」中,施加到汲极的高电压可加速越过衬底通道区的电子。同时,施加到控制栅极的高电压可吸引热电子通过薄栅极介电质到浮栅上。在「隧穿注入」中,会相对于所述衬底施加一高电压给所述控制栅极。以这种方式,可将衬底的电子吸引到中间的浮栅。虽然习惯使用术语「编程」描述通过将电子注入到存储器单元的初始擦除电荷存储单位来写入存储器以改变存储器状态,现已和较为常见的术语,如「写入」或「记录」交换使用。
可以利用下面数种机制来擦除所述存储器装置。对EEPROM而言,通过相对于所述控制栅极施加一高电压给所述衬底,从而可在所述浮栅中引诱出电子,使其隧穿一薄氧化物进入所述衬底通道区(也就是,Fowler-Nordheim隧穿效应),便可电擦除一存储器单元。一般来说,EEPROM可以逐字节的方式来擦除。对快闪EEPROM而言,可每次电擦除所有的存储器或是每次电擦除一个以上最小可擦除区块,其中一最小可擦除区块可能是由一个以上的扇区组成且每一扇区均可存储512个字节以上的数据。
所述存储器装置通常包括可安装在一存储器卡上的一个以上存储器芯片。各存储器芯片包含为外围电路(如解码器和擦除、写入和读取电路)所支持的存储器单元阵列。较为精密的存储器装置还附有执行智能型和较高水平存储器操作和接口连接的控制器。
现已有许多市售成功的非易失性固态存储器装置。这些存储器装置可以是快闪EEPROM,或是可采用其它类型的非易失性存储器单元。快闪存储器与系统和其制造方法的实例在美国专利案第5,070,032号、第5,095,344号、第5,315,541号、第5,343,063号、第5,661,053号、第5,313,421号和第6,222,762号中有揭示。明确地说,具NAND线串结构的快闪存储器装置在美国专利案第5,570,315号、第5,903,495号、第6,046,935号之中有描述。另外,还可利用具有一用来存储电荷的介电层的存储器单元来制造非易失性存储器装置。其利用一介电层来取代前面所述的导电浮栅元件。这些利用介电存储元件的存储器装置已在Eitan等人在2000年11月在IEEE Electron Device Letters,第21册,第11号,第543-545页中所发表的「NROMA Novel Localized Trapping,2-Bit Nonvolatile MemoryCell」一文中有描述。一ONO介电层会延伸越过源极与汲极扩散区间的通道。其中一个数据位的电荷会在靠近所述汲极的介电层中被局部化,而另一个数据位的电荷会在靠近所述源极的介电层中被局部化。举例来说,美国专利第5,768,192号和第6,011,725号揭示一种在两层二氧化硅层间夹放一陷捕介电质的非易失性存储器单元。通过单独读取所述介电质内空间分离的电荷存储区域的二进制状态,可实现多状态的数据存储。
为了提高读取和编程性能,会并行读取或编程阵列中的多个电荷存储元件或存储器晶体管。因此,会一起读取或编程存储器元件的「页」。在现有的存储器架构中,一列通常含有若干交错的页或一列可构成一个页。一个页的所有存储器元件会被一起读取或编程。
在快闪存储器系统中,擦除操作可能需要多达长于读取和编程操作的数量级。因此,希望能够具有充分尺寸的擦除区块。以这种方式,可降低总数很大的存储器单元上的擦除时间。
依照快闪存储器的性质,数据必须写入已擦除的存储器位置。如果要更新主机的特定逻辑地址的数据,一个方式是将更新数据再写入相同的物理存储器位置中。也就是说,逻辑到物理地址映射不会改变。然而,这就表示必须先擦除含有所述物理位置的整个擦除区块,然后再以更新数据写入。这种更新方法很没有效率,因其需要擦除和再写入整个擦除区块,尤其在待更新的数据只占用擦除区块的一小部分时。此外,还会造成比较频繁的存储器区块的擦除再循环,而这对这种类型存储器装置的有限耐久性而言并不理想。
另一个管理快闪存储器系统的问题是必须处理系统控制和目录数据。各种存储器操作的过程期间会产生并存取数据。因此,其有效处理和迅速存取将直接影响性能。由于快闪存储器是用来存储且是非易失性,因此希望能够在快闪存储器中维持这种类型的数据。然而,因为在控制器和快闪存储器之间有中间文件管理系统,所以无法直接存取数据。还有,系统控制和目录数据倾向于起作用和被分段,而这对于具有大尺寸区块擦除的系统中的存储毫无帮助。照惯例,会在控制器RAM中设定这种类型的数据,进而允许由控制器直接存取。在开启存储器装置的电源后,初始化程序会扫描快闪存储器,来编译要放在控制器RAM中的必要的系统控制和目录信息。这个过程既耗时又需要控制器RAM容量,对于持续增加的快闪存储器容量更是如此。
US 6,567,307揭示一种在大擦除区块中处理扇区更新的方法,其包括在多个充当可用记忆区的擦除区块中记录更新数据,和最后在各个区块中合并有效扇区,且按逻辑顺序次序重新排列有效扇区后将其再写入。以这种方式,在每一最微小的更新时,不必擦除和再写入区块。
WO 03/027828和WO 00/49488均揭示一种处理大擦除区块中更新的存储器系统,其中包括以区域为单位划分逻辑扇区地址。小区域的逻辑地址范围经保留用于和另一个用于用户数据的区域分开的作用中系统控制数据。以这种方式,其自身区域中的系统控制数据操控便不会和另一区域中关联的用户数据互相作用。更新属于逻辑扇区层级,而且写入指针会指向要写入的区块中的对应物理扇区。映射信息会在RAM中缓冲,且最后被存储在主存储器的扇区配置表中。逻辑扇区的最新版本会使现有区块中的所有先前版本过时,这些区块因此变成部分过时。执行垃圾收集可保持部分废弃区块是可接受的数量。
现有技术的系统倾向于使更新数据分布在许多区块上或更新数据会使许多现有的区块受到部分废弃。结果通常是大量为部分废弃的区块所需的垃圾收集,这很没有效率且会造成存储器提早老化。还有,和非顺序更新相比,更缺少有系统和有效的方式来处理顺序更新。
因此,普遍需要高容量和高性能的非易失性存储器。尤其,更需要能够在大区块中执行存储器操作且没有上述问题的高容量非易失性存储器。

发明内容
一种非易失性存储器系统按照物理存储器位置的物理群组来组织。各物理群组(元区块)是可擦除的单位且能用来存储一个逻辑群组的数据。存储器管理系统允许通过配置记录逻辑群组的更新数据专用的元区块来更新一个逻辑群组的数据。更新元区块按照所接收的次序记录更新数据,且对记录按照原始存储的正确逻辑次序(顺序)与否(混乱)并没有限制。最后会关闭更新元区块以进行其它记录。会发生若干过程之一,但最终会以按正确次序完全填满的取代原始元区块的元区块停止。在混乱的例子中,会以有助于经常更新的方式将目录数据维持在非易失性存储器中。系统支持同时更新多个逻辑群组。
本发明的一个特点允许以逐逻辑群组的方式来更新数据。因此,在更新逻辑群组时,会限制逻辑单位的分布(还有更新废弃的存储器单位的散布)范围。这在逻辑群组通常包含在物理区块内时更是如此。
在逻辑群组的更新期间,通常必须指派一或两个缓冲已更新的逻辑单位的区块。因此,只需要在相对较少数量的区块上执行垃圾收集。通过合并或压缩即可执行混乱区块的垃圾收集。
与循序区块相比,更新过程的经济性在更新区块的一般处理中会愈加明显,使得无须为混乱(无序)更新配置任何额外的区块。所有的更新区块均被配置为循序的更新区块,而且任何更新区块均可被改变成混乱的更新区块。更确切地说,可任意地将一更新区块从循序变成混乱。
有效使用系统资源允许同时更新多个逻辑群组。这可进一步增加效率并减少过度额外开销。
分布在多个存储器平面上的存储器对准根据本发明的另一方面,对于被组织成可擦除区块且由多个存储器平面构成,使得可并行读取逻辑单位或将逻辑单位并行地编程待多个平面之中的存储器阵列,当要更新存储在特定存储器平面中的第一区块的原始逻辑单位时,会供应所需以将已更新的逻辑单位保持在和原始平面相同的平面中。这可通过以下方式来完成将已更新的逻辑单位记录到在相同平面中的第二区块的下一个可用位置。优选将逻辑单位存储在和其它版本相同的平面中且具有相同的偏移位置,使得给定逻辑单位的所有版本是由相同组的感测电路服务。
因此,在优选实施例中,以逻辑单位的当前版本来填补介于上一个编程存储器单位与下一个可用平面对准存储器单位之间的任何中间空隙。将逻辑上位于最后被编程的逻辑单位后面的逻辑单位的当前版本和逻辑上位于被存储在下一个可用的平面排列存储器单位中的逻辑单位前面的逻辑单位的当前版本填入空隙中,可完成所述填补操作。
以这种方式,可将逻辑单位的所有版本维持在和原始具有相同偏移的相同平面中,使得在垃圾收集操作中,不必从不同平面撷取逻辑单位的最新版本,以免降低性能。在优选实施例中,可利用所述最新的版本来更新或填补平面上的每一存储器单位。因此,可从每一平面中并行地读出一逻辑单位,其将会具有逻辑循序次序而无需进一步重新排列。
这种方案通过允许平面上重新排列逻辑群组的逻辑单位的最新版本,且不必搜集不同存储器平面的最新版本,而缩短合并混乱区块的时间。这很有好处,其中主机接口的性能规格可限定由存储器系统完成扇区写入操作的最大等待时间。
阶段性编程错误处置根据本发明的另一方面,在具有区块管理系统的存储器中,在时间紧要的存储器操作期间,区块中的编程失败可通过继续中断区块(breakout block)中的编程操作来处置。稍后,在较不紧要的时间,可将中断前记录在失败区块中的数据传送到其它可能也是中断区块的区块。接着可丢弃失败的区块。以这种方式,在遇到缺陷区块时,不会因必须立刻传送缺陷区块中存储的数据而损失数据和超过指定的时间限制,可加以处理。这种错误处置对于垃圾收集操作尤其重要,因此在紧要时间期间不需要在一崭新的区块上重复进行整个操作。其后,在适当时间,通过重新定位到其它区块,即可挽救缺陷区块的数据。
编程失败处置在合并操作期间尤其重要。正常的合并操作可将驻存在原始区块和更新区块中的逻辑群组的所有逻辑单位的当前版本合并到合并区块。在合并操作期间,如果在合并区块中发生编程失败,那么会提供另一个充当中断合并区块的区块,以接收其余逻辑单位的合并。以这种方式,不必复制逻辑单位一次以上,而仍可在正常合并操作指定的时期内完成例外处理的操作。在适当时间,将群组所有未处理完成的逻辑单位合并到中断区块中,即可完成合并操作。适当时间将是在当前主机写入操作以外的一些其它有时间执行合并时的时期期间。一个这种适当时间是在其中有更新但无关联的合并操作的另一个主机写入期间。
实质上,可将编程失败处置的合并看成以多阶段来实施。在第一阶段中,在发生编程失败后,会将逻辑单位合并到一个以上区块中,以避免合并各逻辑单位一次以上。在适当时间会完成最后阶段,其中会将逻辑群组合并到一个区块中,优选通过按循序次序将所有逻辑单位收集到中断合并区块中。
无序更新区块索引根据本发明的另一方面,在具有支持具无序逻辑单位的更新区块的区块管理系统的非易失性存储器中,无序更新区块中逻辑单位的索引被缓冲存储在RAM中,并定期将其存储到非易失性存储器中。在一实施例中,将索引存储在专用于存储索引的区块中。在另一实施例中,将索引存储在更新区块本身中。在另一实施例中,将索引存储在各逻辑单位的标头中。在另一方面中,在上一个索引更新之后但在下一个索引更新之前写入的逻辑单位会将其索引信息存储在各逻辑单位的标头中。以这种方式,在电源中断后,不必在初始化期间执行扫描,即可确定最近写入的逻辑单位的位置。在另一方面中,将区块管理成部分循序和部分无序,指向一个以上逻辑子群组。
控制数据完整性与管理根据本发明的另一方面,如部分或全部控制数据的关键数据如果被维持在复制项中,则保证额外等级的可靠性。复制的执行方式对于采用两次编程(two-pass)编程技术以连续编程相同组存储器单元的多位的多状态存储器系统而言,第二次编程中的任何编程错误都无法毁损第一次编程建立的数据。复制还有助于检测写入中止、检测误测(即,两个副本有良好的ECC但数据不同),且可增加额外等级的可靠性。若干数据复制的技术均已涵盖。
在一实施例中,在早先编程过程中编程给定数据的两个副本后,后续编程过程可避免编程用于存储两个副本中至少一个的存储器单元。以这种方式,在后续编程过程在完成之前中止和毁损早先编程的数据时,两个副本中至少一个不会受到影响。
在另一实施例中,给定数据的两个副本会被存储在两个不同的区块中,其中两个副本中至多一个的存储器单元会在后续的编程过程中被编程。
在另一实施例中,在一编程过程中存储某一给定数据的两个副本之后,便不再对用于存储两个副本的存储器单元组执行任何进一步的编程。在存储器单元组的最终编程过程中来编程两个副本便可达成这个目的。
在另一实施例中,可在二进制编程模式中将给定数据的两个副本编程到一多状态的存储器之中,使得不会对已编程的存储器单元进行任何进一步的编程。
在另一实施例中,对于采用两次编程技术来连续编程相同组存储器单元的多位的多状态存储器系统而言,会采用容错代码来编码多个存储器状态,使得早先编程过程所建立的数据不会受到后续编程过程中错误的影响。
根据本发明的另一方面,在具有区块管理系统的非易失性存储器中,可实施存储器区块的「控制垃圾收集」或先占式重新定位,以避免发生大量的更新区块均恰巧同时需要进行重新定位的情形。例如,在更新用于控制区块管理系统操作的控制数据时会发生这种情况。控制数据类型的层级可和不同程度的更新频率共存,导致其关联的更新区块需要不同速率的垃圾收集或重新定位。会有一个以上控制数据类型的垃圾收集操作同时发生的特定次数。在极端的情况中,所有控制数据类型的更新区块的重新定位阶段会进行整顿,导致所有的更新区块都需要同时重新定位。
参考本发明以下结合附图的优选实施例的描述,即可了解本发明的其它特点和优点。


图1示意性说明适合实施本发明的存储器系统的主要硬件组件。
图2根据本发明的优选实施例,说明经组织成扇区(或元区块)的物理群组并由控制器的存储器管理器管理的存储器。
图3A(i)-3A(iii)根据本发明的优选实施例,示意性说明逻辑群组和元区块间的映射。
图3B示意性说明逻辑群组和元区块间的映射。
图4说明元区块和物理存储器中结构的对准。
图5A说明由连接不同平面的最小擦除单位构成的元区块。
图5B说明其中从各平面选择一个最小擦除单位(MEU)以连接到元区块的一实施例。
图5C说明其中从各平面选择一个以上MEU以连接到元区块的另一实施例。
图6是如控制器和快闪存储器中实施的元区块管理系统的示意方框图。
图7A说明逻辑群组中按循序次序写入循序更新区块的扇区的实例。
图7B说明逻辑群组中按混乱次序写入混乱更新区块的扇区的实例。
图8说明由于两个在逻辑地址有中断的分开的主机写入操作而在逻辑群组中按循序次序写入循序更新区块的扇区的实例。
图9是根据本发明的一般实施例,说明更新区块管理器更新一个逻辑群组的数据的过程的流程图。
图10根据本发明的优选实施例,说明更新区块管理器更新一个逻辑群组的数据的过程的流程图。
图11A是详细说明关闭图10所示的混乱更新区块的合并过程的流程图。
图11B是详细说明关闭图10所示的混乱更新区块的压缩过程的流程图。
图12A说明逻辑群组的所有可能状态,和其间在各种操作下的可能转换。
图12B是列出逻辑群组的可能状态的表格。
图13A说明元区块的所有可能状态,和其间在各种操作下的可能转换。元区块是对应于逻辑群组的物理群组。
图13B是列出元区块的可能状态的表格。
图14(A)-14(J)是说明逻辑群组状态上和物理元区块上各种操作效果的状态图。
图15说明用于记录打开和关闭的更新区块和配置的已擦除区块的配置区块列表(ABL)结构的优选实施例。
图16A说明混乱区块索引(CBI)扇区的数据字段。
图16B说明记录于专用元区块中的混乱区块索引(CBI)扇区的实例。
图16C是说明存取进行混乱更新的给定逻辑群组的逻辑扇区的数据的流程图。
图16D是根据其中已将逻辑群组划分成子群组的替代性实施例,说明存取进行混乱更新的给定逻辑群组的逻辑扇区的数据的流程图。
图16E说明在其中将各逻辑群组划分成多个子群组的实施例中,混乱区块索引(CBI)扇区和其功能的实例。
图17A说明群组地址表(GAT)扇区的数据字段。
图17B说明记录在GAT区块中的群组地址表(GAT)扇区的实例。
图18是说明使用和再循环已擦除区块的控制和目录信息的分布和流程的示意方框图。
图19是显示逻辑到物理地址转换过程的流程图。
图20说明在存储器管理的操作过程中,在控制数据结构上执行的操作层级。
图21说明由多个存储器平面构成的存储器阵列。
图22A是根据本发明的一般实施例,说明具有平面对准的更新方法的流程图。
图22B说明在图22A所示的流程图中存储更新的步骤的优选实施例。
图23A说明在不考虑平面对准的情况下按循序次序写入循序更新区块的逻辑单位的实例。
图23B说明在不考虑平面对准的情况下按无序次序写入混乱更新区块的逻辑单位的实例。
图24A根据本发明的优选实施例,说明具有平面对准和填补的图23A的循序更新实例。
图24B根据本发明的优选实施例,说明具有平面对准和不具有任何填补的图23B的混乱更新实例。
图24C根据本发明的另一优选实施例,说明具有平面对准和填补的图23B的混乱更新实例。
图25说明其中各页含有两个用于存储两个逻辑单位(如两个逻辑扇区)的存储器单位的实例存储器组织。
图26A和图21的存储器结构类似,只是各页含有两个扇区而非一个。
图26B说明图26A所示的具有以示意线性方式布局的存储器单元的元区块。
图27说明替代性方案不用填补要从一个位置复制到另一个的逻辑单位,即可在更新区块中进行平面对准。
图28说明其中缺陷区块在合并操作期间发生编程失败时会在另一个区块上重复合并操作的方案。
图29示意性说明具有允许足够时间完成写入(更新)操作和合并操作的时序或写入等待时间的主机写入操作。
图30根据本发明的一般方案,说明编程失败处置的流程图。
图31A说明编程失败处置的一实施例,其中第三(最后的重新定位)区块和第二(中断)区块不同。
图31B说明编程失败处置的另一实施例,其中第三(最后的重新定位)区块和第二(中断)区块相同。
图32A说明造成合并操作的初始更新操作的流程图。
图32B根据本发明的优选实施例,说明多阶段合并操作的流程图。
图33说明多阶段合并操作的第一和最后阶段的实例时序。
图34A说明其中中断合并区块并非用作更新区块而是用作其合并操作已经中断的合并区块的例子。
图34B说明始于图34A的多阶段合并的第三和最后阶段。
图35A说明其中维持中断合并区块是接收主机写入的更新区块而非合并区块的情况。
图35B说明始于第二种情况中图35A的多阶段合并的第三和最后阶段。
图36A说明应用到主机写入触发关闭更新区块且更新区块是循序时的情形的阶段性编程错误处置方法。
图36B说明在更新区块的更新的情况下中应用到(局部区块系统)的阶段性编程错误处置方法。
图36C说明处理垃圾收集操作的阶段性编程错误,或不支持映射到元区块的逻辑群组的存储器区块管理系统中的清除。
图37说明在每N个扇区写入相同的逻辑群组后将CBI扇区写入关联的混乱索引扇区区块的时间安排实例。
图38A说明直到在预定数量的写入后在其中记录CBI扇区时的更新区块。
图38B说明图38A的进一步在索引扇区后在其中记录数据页1、2和4的更新区块。
图38C说明具有另一写入以触发索引扇区下一个记录的逻辑扇区的图38B的更新区块。
图39A说明存储在混乱更新区块中各数据扇区标头中的中间写入的中间索引。
图39B说明在写入的各扇区标头中存储中间写入的中间索引的实例。
图40说明混乱更新区块中各数据扇区标头中存储的混乱索引字段中的信息。
图41A说明当各存储器单元存储两个位的数据时,4状态存储器阵列的临界电压分布。
图41B说明现有使用格雷代码(Gray code)的2次过程编程方案。
图42说明通过保存复制的各扇区以防卫关键数据的方式。例如,可将扇区A、B、C、和D保存在复制副本中。如果在一个扇区副本中有数据毁损,那么可以读取另一个来取代。
图43说明其中通常将复制扇区保存在多状态存储器中的非稳固性。
图44A说明将关键数据错开的复制副本保存到多状态存储器的一实施例。
图44B说明只将关键数据的复制副本保存到多状态存储器的逻辑上页的另一实施例。
图44C说明另一以多状态存储器的二进制模式保存关键数据的复制副本的实施例。
图45说明同时将关键数据的复制副本保存到两个不同元区块的另一实施例。
图46A和图41A同在说明4状态存储器阵列的临界电压分布并显示为是图46B的参考。
图46B说明使用容错代码同时保存关键数据的复制副本的另一实施例。
图47是说明两个数据副本的可能状态和数据有效性的表格。
图48说明先占式重新定位存储控制数据的存储器区块的流程图。
具体实施例方式
图1示意性说明适合实施本发明的存储器系统的主要硬件组件。存储器系统20通常通过主机接口与主机10一起操作。存储器系统通常形式上为存储器卡或内嵌式存储器系统。存储器系统20包括由控制器100控制操作的存储器200。存储器200包含分布在一个或一个以上集成电路芯片上的一个或一个以上阵列的非易失性存储器单元。控制器100包括接口110、处理器120、任选的协处理器121、ROM 122(只读存储器)、RAM 130(随机存取存储器)、和任选的可编程非易失性存储器124。接口110有一个连接控制器和主机的组件和另一个连接到存储器200的组件。存储在非易失性ROM 122和/或任选的非易失性存储器124中的韧体可提供处理器120编程代码来实施控制器100的功能。处理器120或任选的协处理器121可处理错误校正码。在一替代性实施例中,控制器100可通过状态机(未显示)来实施。在另一实施例中,控制器100可在主机内实施。
逻辑与物理区块结构图2说明根据本发明一优选实施例的存储器,其被组织成物理扇区群组(或元区块)并且由所述控制器的存储器管理器来管理。所述存储器200会被组织成数个元区块,其中每一元区块是一群组的可一起擦除的物理扇区S0、…SN-1。
主机10可在文件系统或操作系统下执行应用程序时存取存储器200。一般来说,所述主机会以逻辑扇区为单位来寻址数据,其中,例如,各扇区可含有512字节的数据。还有,主机通常还会以逻辑群集为单位来读取或写入所述存储器系统,各逻辑群集由一个或一个以上逻辑扇区组成。在部分主机系统中,可存在任选的主机侧存储器管理器,以执行主机的较低级存储器管理。在大部分的例子中,在读取或写入操作期间,主机10实质上会对存储器系统20发出指令,以读取或写入含有一串具连续地址的数据逻辑扇区的程序段。
一存储器侧存储器管理器被实施在所述存储器系统20的控制器100之中,用以管理所述快闪存储器200的复数个元区块中存储与撷取主机逻辑扇区的数据。在优选的实施例中,所述存储器管理器含有数个软件模块,用于管理元区块的擦除操作、读取操作和写入操作。所述存储器管理器还会在所述快闪存储器200和所述控制器RAM 130中维护和其操作相关的系统控制与目录数据。
图3A(i)-3A(iii)根据本发明一优选实施例,示意性说明介于一逻辑群组与一元区块间的映射。所述物理存储器的所述元区块具有N个物理扇区,用于存储一逻辑群组的N个逻辑扇区数据。图3A(i)显示来自逻辑群组LGi的数据,其中所述逻辑扇区呈现连续的逻辑次序0、1、…、N-1。图3A(ii)显示以相同的逻辑次序被存储在元区块中的相同数据。当以这种方式存储时,所述元区块就是所谓的「循序式」。一般来说,所述元区块可能会具有以不同次序存储的数据,在所述情况中,所述元区块就是所谓的「无序式」或「混乱式」。
在逻辑群组的最低地址和其映射之元区块的最低地址之间会有偏移。这时,逻辑扇区地址会在所述元区块内以环状的方式从所述逻辑群组的底部反绕回到顶端。例如,在图3A(iii)中,所述元区块会在其始于逻辑扇区k的数据的第一位置中进行存储。在到达最后逻辑扇区N-1时,元区块会绕回到扇区0,最后在其最后物理扇区中存储和逻辑扇区k-1关联的数据。在优选实施例中,会使用页标记来识别任何偏移,例如,识别在元区块的第一物理扇区中所存储的数据的起始逻辑扇区地址。当两个区块仅相差一个页标记时,会认为所述两个区块是以相同的次序来存储其逻辑扇区。
图3B示意性说明介于逻辑群组与元区块间的映射。每一逻辑群组均被映射到一唯一的元区块,除了其中的数据正在被更新的少数逻辑群组以外。一逻辑群组被更新之后,其会被映射到一不同的元区块。可将映射信息维持在一组逻辑到物理目录中,稍后将会详细说明。
还考虑其它类型的逻辑群组到元区块映射关系。举例来说,由Alan Sinclair在和本发明同一天提出的共同待决和共同拥有的美国专利申请案,标题为「Adaptive Metablocks」中便揭示具有可变大小的元区块。本文以引用的方式并入所述共同待决申请案全部的揭示内容。
本发明的一个特点在于系统以单一逻辑划分进行操作,和存储器系统的整个逻辑地址范围中的逻辑扇区群组均以相同的方式来处理。例如,可将含有系统数据的扇区和含有用户数据的扇区分布在逻辑地址空间中的任何地方。
不像现有技术的系统,并无系统扇区(即,有关文件配置表、目录或子目录的扇区)的特别划分或分区,来局部化在可能含有高频率和小尺寸的更新数据的逻辑地址空间扇区中。而是,更新扇区的逻辑群组的本方案会有效处理为系统扇区典型且为文件数据典型的存取模式。
图4说明元区块和物理存储器中结构的对准。快闪存储器包含可当作一个单位一起擦除的存储器单元的区块。这种擦除区块是快闪存储器的最小的擦除单位或存储器的最小可擦除单位(MEU)。最小擦除单位是存储器的硬件设计参数,不过,在一些支持多个MEU擦除的存储器系统中,也可以设定包含一个以上MEU的「超级MEU」。对于快闪EEPROM,一个MEU可包含一个扇区,但优选包含多个扇区。在所示的实例中,其具有M个扇区。在优选实施例中,各扇区可以存储512字节的数据且具有用户数据部分和用于存储系统或额外开销数据的标头部分。如果元区块是由P个MEU构成且各MEU含有M个扇区,则各元区块将具有N=P*M个扇区。
在系统级,元区块代表存储器位置的群组,如,可一起擦除的扇区。快闪存储器的物理地址空间会被处理成一组元区块,其中元区块是最小的擦除单位。在本说明书内,「元区块」与「区块」等词语是同义词,用来定义媒体管理在系统级的最小擦除单位,而「最小擦除单位」或MEU一词则用来表示快闪存储器的最小擦除单位。
连接最小擦除单位(MEU)来形成元区块为了最大化编程速度和擦除速度,会尽可能利用并行方式,这是通过配置多个要并行编程的页信息(位在多个MEU中),和配置多个要并行擦除的MEU。
在快闪存储器中,一个页是可在单一操作中一起编程的存储器单元的群组。一个页可包含一个或一个以上扇区。还有,可将存储器阵列划分成一个以上平面,其中一次只能编程或擦除一个平面内的一个MEU。最后,可在一个或一个以上存储器芯片中分布各平面。
在快闪存储器中,MEU可包含一个或一个以上页。可将快闪存储器芯片内的数个MEU按平面来组织。由于可同时编程或擦除各平面的一个MEU,因此有利于从各平面选择一个MEU来形成多个MEU元区块(请见下文图5B)。
图5A说明由连接不同平面的最小擦除单位构成的元区块。各元区块(例如MB0、MB1、…)均是由存储器系统的不同平面的数个MEU构成,其中不同平面可分布在一个或一个以上芯片中。图2所示的元区块连接管理器170可管理各元区块的MEU的连接。如果MEU之一没有失败,那么在初始格式化程序期间设定各元区块,并在整个系统寿命中保留其组成的MEU。
图5B说明从各平面选择一最小擦除单位(MEU)以连接成元区块的一实施例。
图5C说明其中从各平面选择一个以上MEU以连接成元区块的另一实施例。在另一实施例中,可从各平面选择一个以上MEU以形成一超级MEU。例如,举例来说,一超级MEU可能是由两个MEU构成。这时,会采取一次以上过程以进行读取或写入操作。
由Carlos Gonzales等人在和本发明同一天递交的共同待决和共同拥有的美国专利申请案,标题为「Adaptive Deterministic Grouping of Blocks into Multi-Block Structures」之中还揭示将复数个MEU连接和再连接成元区块。本文以引用的方式并入所述共同待决申请案全部的揭示内容。
元区块管理图6是如控制器和快闪存储器中实施的元区块管理系统的示意方框图。元区块管理系统包含实施在控制器100中的各种功能模块,并在以阶层形式分布在快闪存储器200和控制器RAM 130的表格和列表中维持各种控制数据(包括目录数据)。实施在控制器100中的功能模块包括接口模块110、逻辑到物理地址转换模块140、更新区块管理器模块150、擦除区块管理器模块160和元区块连接管理器170。
接口110允许元区块管理系统接口连接主机系统。逻辑到物理地址转换模块140将主机的逻辑地址映射到物理存储器位置。更新区块管理器模块150管理存储器中给定的数据逻辑群组的数据更新操作。已擦除的区块管理器160管理元区块的擦除操作和其用于存储新信息的配置。元区块连接管理器170管理扇区的最小可擦除区块的子群组的连接以构成给定的元区块。这些模块将在其各自段落中详细说明。
在操作期间,元区块管理系统会产生且配合控制数据(例如地址、控制与状态信息)来运作。由于许多控制数据倾向于是频繁改变的小型数据,因此无法在具有大型区块结构的快闪存储器中予以有效存储和维持。为了在非易失性快闪存储器中存储比较静态的控制数据,同时在控制器RAM中寻找数量较少的比较有变化的控制数据,以进行更有效的更新和存取,会采用阶层式与分布式的方案。在发生电源关机或故障时,这种方案允许扫描非易失性存储器中一小组的控制数据,以在易失性控制器RAM中快速重建控制数据。这之所以可行是因为本发明可限制与给定逻辑群组的数据的可能活动相关联的区块数量。以这种方式,可限制扫描。此外,会将部分需要持久性的控制数据存储在按扇区更新的非易失性元区块中,其中各更新将会记录取代先前扇区的新扇区。控制数据会采用扇区索引方案以在元区块中跟踪按扇区的更新。
非易失性快闪存储器200存储大量相对较静态的控制数据。这包括群组地址表(GAT)210、混乱区块索引(CBI)220、已擦除的区块列表(EBL)230和MAP 240。GAT 210可跟踪扇区的逻辑群组和其对应元区块之间的映射。除非更新,否则映射关系不会改变。CBI 220可跟踪更新期间逻辑上无序扇区的映射。EBL 230可跟踪已经擦除的元区块集区。MAP 240是显示快闪存储器中所有元区块的擦除状态的位图。
易失性控制器RAM 130存储一小部分频繁改变和存取的控制数据。这包括配置区块列表(ABL)134和清除区块列表(CBL)136。ABL 134可跟踪元区块用于记录更新数据的配置,而CBL 136可跟踪已解除配置和已擦除的元区块。在优选实施例中,RAM 130可当作存储在快闪存储器200中的控制数据的高速缓存。
更新区块管理器更新区块管理器150(如图2所示)处理逻辑群组的更新。根据本发明的一方面,会配置进行更新的扇区的各逻辑群组一用于记录更新数据的专用更新元区块。在优选实施例中,会将逻辑群组的一个或一个以上扇区的任何程序段记录在更新区块中。可管理更新区块以接收按循序次序或无序(又称为「混乱」)次序的更新数据。混乱更新区块允许逻辑群组内按任何次序更新扇区数据,并可任意重复个别扇区。尤其,不必重新定位任何数据扇区,循序更新区块可变成混乱更新区块。混乱数据更新不需要任何预定的区块配置;以任何逻辑地址的无序写入可被自动纳入。因此,不像现有技术的系统,和现有技术系统不同的是,并不必特别处理所述逻辑群组的各个更新程序段是以逻辑循序或无序。一般更新区块只用来按照主机请求的次序记录各种程序段。例如,即使主机系统数据或系统控制数据倾向于以混乱方式加以更新,仍不必以和主机用户数据的不同方式来处理逻辑地址空间对应于主机系统数据的区域。
优选将扇区的完整逻辑群组的数据按逻辑上循序次序存储在单一元区块中。以这种方式,可预定义已存储的逻辑扇区的索引。当元区块按照预定次序存储给定逻辑群组的所有扇区时,其可以说是「完整」。至于更新区块,当其最后按逻辑上循序次序填满更新数据时,则更新区块将成为随时可取代原始元区块的已更新的完整元区块。另一方面,如果更新区块按逻辑上和完整区块的不同次序填满更新数据,更新区块为无序或混乱更新区块,且必须进一步处理无次序的程序段,以便最后能按和完整区块相同的次序来存储逻辑群组的更新数据。在优选情况中,其在单一元区块中是按照逻辑上循序的次序。进一步的处理涉及将更新区块中已更新的扇区和原始区块中未改变的扇区合并到另一个更新元区块。然后合并的更新区块将按照逻辑上循序的次序并能够用来取代原始区块。在一些预定条件下,合并过程之前会有一个或一个以上压缩过程。压缩过程只是将混乱更新区块的扇区重新记录成取代混乱的更新区块,同时除去任何已由相同逻辑扇区的后续更新废弃的复制逻辑扇区。
更新方案允许同时运行多个多达预定极大值的更新线程。各线程是使用其专用更新元区块进行更新的逻辑群组。
循序数据更新在首先更新属于逻辑群组的数据时,会配置元区块并将其专用为逻辑群组的更新数据的更新区块。当从主机接收写入逻辑群组的一个或一个以上扇区的程序段的命令时(现有的元区块已经存储所有完整扇区),会配置更新区块。对于第一主机写入操作,会将第一程序段的数据记录在更新区块上。由于各主机写入是具有连续逻辑地址的一个或一个以上扇区的一个程序段,因此会遵循第一更新在性质上永远循序。在后续的主机写入中,会按照从主机接收的次序将相同逻辑群组内的更新程序段记录在更新区块中。一个区块继续经管理为循序更新区块,而关联逻辑群组内由主机更新的扇区维持逻辑上循序。在这个逻辑群组中更新的所有扇区会被写入这个循序更新区块,直到区块关闭或转换为混乱更新区块。
图7A说明由于两个独立的主机写入操作而按循序次序写入循序更新区块的逻辑群组中的扇区的实例,而逻辑群组的原始区块中对应的扇区被废弃。在主机写入操作#1中,会更新逻辑扇区LS5-LS8的数据。更新成为LS5′-LS8′的数据会被记录在新配置的专用更新区块中。
为了方便,会将逻辑群组中要更新的第一扇区记录在始于第一物理扇区位置的专用更新区块中。一般而言,要更新的第一逻辑扇区不必是群组的逻辑第一扇区,因此,在逻辑群组的起点和更新区块的起点之间会有偏移。这个偏移称为「页标记」,如先前结合图3A所述。后续的扇区将按照逻辑上循序的次序加以更新。在写入逻辑群组的最后扇区时,群组地址会绕回,且写入序列会从群组的第一扇区继续。
在主机写入操作#2中,会更新逻辑扇区LS9-LS12中数据的程序段。更新为LS9′-LS12′的数据会被记录在直接在最后写入停止处之后的位置中的专用更新区块。图中显示两个主机写入如下按逻辑上循序次序记录在更新区块中的更新数据,即LS5′-LS12′。更新区块可看作循序更新区块,因其已按逻辑上循序的次序填入。记录在更新区块中的更新数据可废弃原始区块中对应的数据。
混乱数据更新当关联的逻辑群组内由主机更新的任何扇区为逻辑上无序时,可为现有的循序更新区块启始混乱更新区块管理。混乱更新区块是数据更新区块的形式,其中关联逻辑群组内的逻辑扇区可按任何次序进行更新并可重复任意次。其建立可通过以下方式在主机写入的扇区是逻辑上无序时,由循序更新区块转换成经更新的逻辑群组内先前写入的扇区。所有随后在这个逻辑群组中更新的扇区会被写入混乱更新区块中的下一个可用的扇区位置,无论其在群组内的逻辑扇区地址是什么。
图7B说明由于五个独立的主机写入操作而按混乱次序写入混乱更新区块的逻辑群组的扇区的实例,而逻辑群组的原始区块中被取代的扇区和混乱更新区块中被复制的扇区被废弃。在主机写入操作#1中,会更新存储在原始元区块中的给定逻辑群组的逻辑扇区LS10-LS11。已更新的逻辑扇区LS10′-LS11′会被存储到新配置的更新区块中。这时,更新区块为循序更新区块。在主机写入操作#2中,会将逻辑扇区LS5-LS6更新为LS5′-LS6′并将其记录在祭接上一个写入之后的位置的更新区块中。这可将循序更新区块转换为混乱的更新区块。在主机写入操作#3,再次更新逻辑扇区LS10并将其记录在更新区块的下一个位置成为LS10″。这时,更新区块中的LS10″可取代先前记录中的LS10′,而LS10′又可取代原始区块中的LS10。在主机写入操作#4中,再次更新逻辑扇区LS10的数据和将其记录在更新区块的下一个位置中成为LS10。因此,LS10现在是逻辑扇区LS10的最后且唯一有效的数据。在主机写入操作#5中,会更新逻辑扇区LS30的数据并将其记录在更新区块中成为LS30′。因此,这个实例显示可以按照任何次序且使用任意重复,将一逻辑群组内的复数个逻辑扇区写入到一混乱更新区块中。
强制循序更新图8说明由于两个在逻辑地址有中断的独立的主机写入操作而在逻辑群组中按循序次序写入循序更新区块的扇区的实例。在主机写入#1中,将逻辑扇区LS5-LS8的更新数据记录在专用更新区块中成为LS5′-LS8′。在主机写入#2中,将逻辑扇区LS14-LS16的更新数据记录在上一个写入之后的更新区块中成为LS14′-LS16′。然而,在LS8和LS14之间有地址跳跃,且主机写入#2一般会使更新区块成为无序。由于地址跳跃不是很多,一个选项是在执行主机写入#2之前将原始区块的中间扇区的数据复制到更新区块,以首先执行填补操作(#2A)。以这种方式,即可保存更新区块的循序性质。
图9说明根据本发明的一般实施例,更新区块管理器更新一个逻辑群组的数据的过程流程图。更新过程包含以下步骤步骤260所述存储器被组织成复数个区块,每一区块均被划分成可一起擦除的复数个存储器单位,每一存储器单位是用于存储一逻辑单位的数据。
步骤262所述数据被组织成复数个逻辑群组,每一逻辑群组均被划分成复数个逻辑单位。
步骤264在标准的情况中,根据第一指定次序,优选为逻辑上循序的次序,将逻辑群组的所有逻辑单位存储在原始区块的存储器单位中。以这种方式,即可得知存取区块中单个逻辑单位的索引。
步骤270对于给定逻辑群组(如,LGx)的数据,请求更新LGx内的逻辑单位。(逻辑单位更新为举例说明。一般而言,更新将是由LGx内一个或一个以上连续逻辑单位所组成的程序段。)步骤272请求的更新逻辑单位将会存储在专用于记录LGx的更新的第二区块中。记录次序是根据第二次序,通常是更新请求的次序。本发明的一个特点允许设定初始对按照逻辑上循序或混乱次序记录的数据为一般的更新区块。因此根据第二次序,第二区块可以是循序更新区块或混乱更新区块。
步骤274当过程循环返回到步骤270时,第二区块继续记录所请求的逻辑单位。在关闭的预定条件成形时将会关闭第二区块,以接收进一步更新。这时,程序继续进行到步骤276。
步骤276判断所述已关闭的第二区块是否以和原始区块相同的次序来记录其更新逻辑单位。当所述两个区块记录逻辑单位仅相差一页标记时,所述两个区块便会被看作具有相同的次序,如结合图3A所述。如果这两个区块具有相同的次序,过程继续进行到步骤280,否则,必须在步骤290执行垃圾收集。
步骤280由于第二区块具有和第一区块相同的次序,因此其可用来取代原始的第一区块。然后,更新过程停止于步骤299。
步骤290从第二区块(更新区块)和第一区块(原始区块)搜集给定逻辑群组的各逻辑单位的最新版本。然后以类似于第一区块的次序将给定逻辑群组的已合并的逻辑单位写入第三区块。
步骤292由于第三区块(合并的区块)具有和第一区块相同的次序,因此其可用来取代原始的第一区块。然后,更新过程停止于步骤299。
步骤299当停闭程序建立完整的更新区块时,所述区块会变成给定逻辑群组的新标准区块。将会结束这个逻辑群组的更新线程。
图10根据本发明的优选实施例,说明更新区块管理器来更新一个逻辑群组的数据的过程流程图。更新过程包含以下步骤步骤310对于给定逻辑群组(如,LGx)的数据,会请求更新LGx内的逻辑扇区。(扇区更新为举例说明。一般而言,更新将是由LGx内一个或一个以上连续逻辑扇区所组成的程序段。)步骤312如果LGx专用的更新区块尚未存在,继续进行到步骤410以启始逻辑群组的新的更新线程。这可通过配置记录逻辑群组的更新数据专用的更新区块来完成。如果已经有打开的更新区块,则继续进行到步骤314,开始将更新扇区记录到更新区块上。
步骤314如果当前更新区块已经混乱(即,无序),则直接继续进行到步骤510,以将请求的更新扇区记录到混乱更新区块上。如果当前更新区块为循序,则继续进行到步骤316,以处理循序更新区块。
步骤316本发明的一个特点是允许在初始时将一更新区块设置成通用于以逻辑循序或混乱次序来记录数据。不过,因为所述逻辑群组最终会将其数据以逻辑循序的次序存储在一元区块之中,所以,因此希望尽可能保持所述更新区块为循序。接着,当关闭一更新区块以进行进一步更新时,将会需要较少的处理,因为并不需要进行垃圾收集。
因此,判断所请求的更新是否遵循更新区块的当前循序次序。如果更新遵循循序,则继续进行到步骤510以执行循序更新,且更新区块将维持循序。另一方面,如果更新未遵循循序(混乱更新),则其会在未采取任何动作时将循序更新区块转换成混乱更新区块。
在一实施例中,不会进行任何动作来挽救这种情况,然后过程直接进行到步骤370,其中允许更新将更新区块变成混乱的更新区块。
任选的强制循序过程在另一实施例中,会看情况执行强制循序过程步骤320,以尽可能因顾及悬置的混乱更新而保存循序更新区块。其中有两个情况,这两个情况都需要复制原始区块的遗失扇区,以维持更新区块上记录的逻辑扇区的循序次序。第一个情况是其中更新可建立较短的地址跳跃。第二个情况是提早停闭更新区块以将其保持循序。强制循序过程步骤320包含以下子步骤步骤330如果更新建立的逻辑地址跳跃未大于预定的数量CB,那么过程继续进行到步骤350的强制循序更新过程,否则程序继续进行到步骤340,以考虑其是否适合进行强制循序停闭。
步骤340如果未填充的物理扇区数量超过预定的设计参数CC(其典型值是更新区块尺寸的一半),那么更新区块为相对未被使用,因此不会提早关闭。过程继续进行到步骤370,和更新区块会成为混乱。另一方面,如果实质上已填充更新区块,那么将其看作已经充分利用,因此进入步骤360以进行强制循序停闭。
步骤350只要地址跳跃未超过预定的数量CB,强制循序更新允许当前的循序更新区块维持循序。实质上,会复制更新区块的关联原始区块的扇区,以填充地址跳跃越过的空隙。因此,在继续进行到步骤510之前,会以中间地址的数据填补循序更新区块,以循序记录当前的更新。
步骤360如果当前循序的更新区块实质上已经被填充,而非由悬置的混乱更新转换为混乱更新区块,那么强制循序停闭允许当前循序的更新区块变为关闭状态。混乱或无序更新的定义是具有以下项目的更新不是上述地址跳跃例外所涵盖的正向地址转换、反向地址转换、或地址重复。为了防止循序更新区块被混乱更新转换,会通过复制更新区块的关联的原始的部分废弃的区块的扇区来填充更新区块的未写入的扇区位置。然后完全废弃和擦除原始区块。现在,当前的更新区块具有完整组的逻辑扇区,然后停止成为取代原始元区块的完整元区块。然后,过程继续进行到步骤430以在其位置配置更新区块,以接受在步骤310先请求的悬置扇区更新的记录。
转换成混乱的更新区块步骤370当悬置的更新未按循序次序且看情况,如果无法满足强制循序条件,那么在过程继续进行到步骤510时,通过允许在更新区块上记录具有无序地址的悬置更新扇区,来允许将循序更新区块转换为混乱更新区块。如果存在最大数量的混乱更新区块,那么在允许转换进行之前,必须关闭最久未存取的混乱更新区块;因而不会超过最大数量的混乱区块。最久未存取的混乱更新区块的识别和步骤420所述的一般情况相同,但仅限于混乱更新区块。这时关闭混乱更新区块可通过如步骤550所述的合并来达成。
服从于系统限制的新更新区块配置步骤410将擦除元区块配置为更新区块的过程始于确定是否超过预定的系统限制。由于资源有限,存储器管理系统通常允许更新区块的预定最大数量CA同时存在。这个限制是循序更新区块和混乱更新区块的总数,也是设计参数。在优选实施例中,这个限制为例如最大8个更新区块。还有,由于系统资源的较高需求,在可同时打开的混乱更新区块的最大数量上还有对应的预定限制(例如,4个)。
因此,在已经配置CA个更新区块时,只有在关闭现有已配置的更新区块之一后,才能满足下一个配置请求。过程继续进行到步骤420。当打开的更新区块数量小于CA时,过程直接进行到步骤430。
步骤420在超过更新区块的最大数量CA时,关闭最久未存取的更新区块并执行垃圾收集。最久未存取的更新区块会被识别为与最久未存取的逻辑区块关联的更新区块。为了确定最久未存取的区块,存取包括逻辑扇区的写入和选择性读取。会按照存取的次序维持打开更新区块的列表;初始化时,不会假设任何存取次序。更新区块的关闭在更新区块为循序时,将按照结合步骤360和步骤530所述的相同过程,在更新区块为混乱时,将按照结合步骤540所述的相同过程。此关闭可挪出空间以在步骤430配置新的更新区块。
步骤430配置新的元区块作为所述给定逻辑群组LGX专用的更新区块便可满足所述配置要求。接着,过程继续进行到步骤510。
在更新区块上记录更新数据步骤510将请求的更新扇区记录在更新区块的下一个可用的物理位置上。然后,过程继续进行到步骤520,确定更新区块是否可以停闭。
更新区块停闭步骤520如果更新区块还有接受附加更新的空间,则进行到步骤570。否则进行到步骤522以停闭更新区块。在当前请求的写入尝试写入多于区块所有空间的逻辑扇区时,有两个填满更新区块的可能实施方案。在第一实施方案中,会将写入请求分成两个部分,其中第一部分可一直写入到区块的最后物理扇区。然后关闭区块和将写入的第二部分处理为下一个请求的写入。在另一个实施方案中,会在区块的其余扇区被填补时保留请求的写入,然后再将其关闭。请求的写入会被处理为下一个请求的写入。
步骤522如果更新区块为循序,那么继续进行到步骤530以进行循序关闭。如果更新区块为混乱,那么继续进行到步骤540以进行混乱关闭。
循序更新区块停闭步骤530由于更新区块为循序且已完全填充,因此其中存储的逻辑群组为完整。元区块为完整且能取代原始的元区块。这时,会完全废弃原始区块并将其擦除。然后过程继续进行到步骤570,其中给定逻辑群组的更新线程结束。
混乱更新区块停闭步骤540由于更新区块为无序填充,可能含有一些逻辑扇区的多个更新,因此会执行垃圾收集以挽救其中的有效数据。混乱更新区块可为已经压缩或合并。在步骤542将会确定所执行的过程。
步骤542要执行压缩或合并将根据更新区块的退化而定。如果逻辑扇区已更新多次,那么其逻辑地址将高度退化。记录在更新区块上的将有相同逻辑扇区的多个版本,而只有最后记录的版本为所述逻辑扇区的有效版本。在含有多个版本的逻辑扇区的更新区块中,有所区分的逻辑扇区的数量会比逻辑群组的数量少很多。
在优选实施例中,当更新区块中有所区分的逻辑扇区的数量超过预定的设计参数CD(其典型值是逻辑群组尺寸的一半)时,停闭过程会在步骤550执行合并,否则过程会继续进行到步骤560的压缩。
步骤550如果要合并混乱更新区块,那么将以含有合并数据的新的标准元区块取代原始区块和更新区块。合并后,更新线程将结束于步骤570。
步骤560如果要压缩混乱更新区块,那么将以载有压缩数据的新的更新区块进行取代。压缩后,已压缩更新区块的处理将结束于步骤570。或者,可将压缩延迟直到再次写入更新区块,因此移除压缩之后是没有中间更新的合并的可能性。然后,当步骤502中出现下一个要求在LGX中进行更新时,在给定逻辑区块的进一步更新中使用新的更新区块。
步骤570当停闭过程建立完整的更新区块时,所述区块会变成给定逻辑群组的新标准区块。这个逻辑群组的更新线程将会终止。在停闭过程建立取代现有更新区块的新的更新区块时,会使用新的更新区块记录为给定逻辑群组请求的下一个更新。在更新区块未停止时,处理会在步骤310中出现在LGX中的下一个更新请求时继续。
从上述过程可知,在关闭混乱更新区块时,会进一步处理其上记录的更新数据。尤其,其有效数据的垃圾收集是通过以下过程压缩到另一个混乱区块的过程,或和其关联的原始区块合并以形成新的标准循序区块的过程。
图11A是详细说明关闭图10所示的混乱更新区块的合并过程的流程图。混乱更新区块合并是在停止更新区块时(如当更新区块已填满其写入的最后物理扇区位置时)执行的两个可能过程之一。区块中写入的有所区分的逻辑扇区数量超过预定的设计参数CD时,将选择合并。图10所示的合并过程步骤550包含以下子步骤步骤551在关闭混乱更新区块时,会配置可取而代之的新元区块。
步骤552在混乱更新区块和关联的原始区块中,搜集各逻辑扇区的最新版本并忽略所有的废弃扇区。
步骤554将所搜集的有效扇区按逻辑上循序次序记录在新的元区块上,以形成完整区块,即,按循序次序记录的逻辑群组的所有逻辑扇区的区块。
步骤556以新的完整区块取代原始区块。
步骤558擦除已停止的更新区块和原始区块。
图11B是详细说明关闭图10所示的混乱更新区块的压缩过程的流程图。区块中写入的有所区分的逻辑扇区数量低于预定的设计参数CD时,将选择压缩。图10所示的压缩过程步骤560包含以下子步骤步骤561在混乱更新区块被压缩时,会配置取而代之的新元区块。
步骤562在要压缩的现有的混乱更新区块中,搜集各逻辑扇区的最新版本。
步骤564将所搜集的扇区记录在新的更新区块上,以形成具有压缩扇区的新的更新区块。
步骤566以具有压缩扇区的新的更新区块取代现有的更新区块。
步骤568擦除已停止的更新区块。
逻辑与元区块状态图12A说明逻辑群组的所有可能状态,和其间在各种操作下的可能转换。
图12B是列出逻辑群组的可能状态的表格。逻辑群组状态的定义如下1.完整逻辑群组中的所有逻辑扇区已按逻辑上循序次序被写入单一元区块之中,其可能利用页标记卷绕方式。
2.未写入逻辑群组中未曾写入任何逻辑扇区。逻辑群组在群组地址表中会标示为未写入且没有任何配置的元区块。返回预定的数据模式,以响应这个群组内每一扇区的主机读取。
3.循序更新逻辑群组内的一些扇区已经按逻辑上循序次序被写入元区块中,可能使用页标记,因此其可取代群组中任何先前完整状态的对应的逻辑扇区。
4.混乱更新逻辑群组内的一些扇区已经按逻辑上无序次序被写入元区块中,可能使用页标记,因此其可取代群组中任何先前完整状态的对应的逻辑扇区。群组内的扇区可被写入一次以上,其中最新版本将取代所有先前的版本。
图13A说明元区块的所有可能状态,和其间在各种操作下的可能转换。
图13B说明元区块的所有可能状态,和其间在各种操作下的可能转换1.已擦除元区块中的所有扇区已被擦除。
2.循序更新元区块已经被部份写入,且扇区呈现逻辑上循序次序,可能使用页标记。所有扇区均属于相同的逻辑群组。
3.混乱更新所述元区块已经被部份或完全写入,其扇区呈现逻辑上无序次序。任何扇区均可被写入一次以上。所有扇区均属于相同的逻辑群组。
4.完整元区块已经以逻辑循序的次序被完全写入,可能使用页标记。
5.原始元区块先前为完整但至少一扇区已因主机数据更新而废弃。
图14(A)-14(J)是说明逻辑群组状态上和物理元区块上各种操作效果的状态图。
图14(A)显示对应于第一写入操作的逻辑群组和元区块转换的状态图。主机按逻辑上循序次序将先前未写入的逻辑群组的一个或一个以上扇区写入到新配置的已擦除的元区块。逻辑群组和元区块进入循序更新状态。
图14(B)显示对应于第一完整操作的逻辑群组和元区块转换的状态图。先前未写入的循序更新逻辑群组因主机循序写入所有扇区而变成完整。如果存储器卡通过以预定的数据模式填充其余未写入的扇区来填满群组,那么也会发生转换。元区块变成完整。
图14(C)说明对应于第一混乱操作的逻辑群组和元区块转换的状态图。先前未写入的循序更新逻辑群组在主机无序写入至少一扇区时变成混乱。
图14(D)显示对应于第一压缩操作的逻辑群组和元区块转换的状态图。从旧区块将先前未写入的混乱更新逻辑群组内的所有有效扇区复制到新的混乱元区块,然后再将其擦除。
图14(E)说明对应于第一合并操作的逻辑群组和元区块转换的状态图。从旧的混乱区块移动先前未写入的混乱更新逻辑群组内的所有有效扇区,来按逻辑上循序次序填充新配置的已擦除区块。主机未写入的扇区会以预定的数据模式加以填充。然后擦除旧的混乱区块。
图14(F)显示对应于循序写入操作的逻辑群组和元区块转换的状态图。主机按逻辑上循序次序将完整逻辑群组的一个或一个以上扇区写入新配置的已擦除元区块。逻辑群组和元区块成为循序更新状态。先前完整的元区块变成原始元区块。
图14(G)显示对应于循序填充操作的逻辑群组和元区块转换的状态图。循序更新逻辑群组在主机循序写入所有其扇区时变成完整。这也可发生在以原始区块的有效扇区填充循序更新逻辑群组以使其完整的垃圾收集期间,在此之后会擦除原始区块。
图14(H)说明对应于无序写入操作的逻辑群组和元区块转换的状态图。循序更新逻辑群组在主机无序写入至少一扇区时变成混乱。无序扇区写入可导致更新区块或相应原始区块中的有效扇区变成废弃。
图14(I)显示对应于压缩操作的逻辑群组和元区块转换的状态图。从旧区块将混乱更新逻辑群组内的所有有效扇区复制到新的混乱元区块,然后再将其擦除。原始区块不会受到影响。
图14(J)显示对应于合并操作的逻辑群组和元区块转换的状态图。从旧的混乱区块复制混乱更新逻辑群组内的所有有效扇区,以按逻辑上循序次序填充新配置的已擦除区块。然后擦除旧的混乱区块和原始区块。
更新区块跟踪和管理图15说明用于跟踪已打开和已关闭的更新区块与已擦除区块以进行配置的配置区块列表(ABL)的结构的优选实施例。所述配置区块列表(ABL)610会被保存在控制器RAM130之中,以允许管理已擦除区块的配置、配置的更新区块、关联的区块和控制结构,以启用正确的逻辑到物理地址转换。在优选实施例中,ABL包括已擦除区块的列表、打开的更新区块列表614、和关闭的更新区块列表616。
打开的更新区块列表614是ABL中具有打开更新区块的属性的区块条目组。打开的更新区块列表具有当前打开的各数据更新区块的一个条目。各条目保留有以下信息。LG是当前更新元区块专用的逻辑群组地址。循序/混乱是代表以循序或混乱更新数据填充更新区块的状态。MB是更新区块的元区块地址。页标记是在更新区块的第一物理位置记录的起始逻辑扇区。写入的扇区号码指示当前在更新区块上写入的扇区号码。MB0是关联的原始区块的元区块地址。Page Tag0是关联的原始区块的页标记。
关闭的更新区块列表616是配置区块列表(ABL)的子集。其为ABL中具有关闭更新区块的属性的区块条目组。关闭的更新区块列表具有一个已关闭的各数据更新区块的条目,但其条目在逻辑到主物理目录中并未更新。各条目保留有以下信息。LG是当前更新区块专用的逻辑群组地址。MB是更新区块的元区块地址。页标记是在更新区块的第一物理位置处记录的起始逻辑扇区。MB0是关联的原始区块的元区块地址。
混乱区块索引循序更新区块具有按逻辑上循序次序存储的数据,因此很容易寻找区块中的任何逻辑扇区。混乱更新区块具有其未按次序存储的逻辑扇区并可存储一个逻辑扇区的多个更新代。必须维持附加信息,以记录各有效逻辑扇区被配置在混乱更新区块中的位置。
在优选实施例中,混乱区块索引数据结构允许跟踪和快速存取混乱区块中的所有有效扇区。混乱区块索引独立地管理小区域的逻辑地址空间,并可有效处理系统数据和用户数据的热区。索引数据结构实质上允许在快闪存储器中维持具有不常更新需求的索引信息,以免性能明显受到影响。另一方面,会将混乱区块中最近写入扇区的列表保留在控制器RAM的混乱扇区列表中。还有,会将快闪存储器的高速缓存的索引信息保留在控制器RAM中,以最小化地址转换的快闪扇区存取的数量。各混乱区块的索引被存储在快闪存储器中的混乱区块索引(CBI)扇区中。
图16A说明混乱区块索引(CBI)扇区的数据字段。混乱区块索引扇区(CBI扇区)含有逻辑群组中各扇区映射到混乱更新区块的索引,可定义逻辑群组各扇区在混乱更新区块或其关联的原始区块内的位置。CBI扇区包括记录混乱区块内有效扇区的混乱区块索引字段、记录混乱区块地址参数的混乱区块信息字段、和记录存储CBI扇区之元区块(CBI区块)内有效CBI扇区的扇区索引字段。
图16B说明记录在专用元区块中的混乱区块索引(CBI)扇区的实例。专用的元区块可称为CBI区块620。在更新CBI扇区时,会将其写入CBI区块620中下一个可用的物理扇区位置。因此,CBI扇区的多个副本可存在于CBI区块中,其中只有最后写入的副本为有效。例如,已经利用有效版本的最新版本将逻辑群组LG1的CBI扇区更新三次。区块中最后写入的CBI扇区的一组索引可识别CBI区块中各有效扇区的位置。在这个实例中,区块中最后写入的CBI扇区是LG136的CBI扇区,且其索引组是取代所有先前索引组的有效索引组。当CBI区块最后变成由CBI扇区完全填充时,会将所有有效扇区再写入新的区块位置,以在控制写入操作期间压缩区块。然后擦除整个区块。
CBI扇区内的混乱区块索引字段含有逻辑群组内各逻辑扇区的索引条目或映射到混乱更新区块的子群组。各索引条目指示对应逻辑扇区的有效数据所在的混乱更新区块内的偏移。保留的索引值代表混乱更新区块中没有逻辑扇区的有效数据,并指示关联的原始区块中的对应扇区为有效。一些高速缓存的混乱区块索引字段条目会被保留在控制器RAM中。
CBI扇区内的混乱区块信息字段含有针对存在于系统中的各混乱更新区块的一个条目,以记录区块的地址参数信息。这个字段中的信息只在CBI区块的最后写入扇区中有效。此信息也会出现在RAM的数据结构中。
各混乱更新区块的条目包括三个地址参数。第一个参数是与混乱更新区块关联的逻辑群组(或逻辑群组号)的逻辑地址。第二个参数是混乱更新区块的元区块地址。第三个参数是写入混乱更新区块中最后扇区的物理地址偏移。偏移信息设定初始化期间混乱更新区块的扫描起点,以在RAM中重建数据结构。
扇区索引字段含有针对CBI区块中各有效CBI扇区的条目。其可限定CBI区块内有关各许可的混乱更新区块的最近写入的CBI扇区处的偏移。索引中偏移的保留值指示许可的混乱更新区块并不存在。
图16C是说明存取正在进行混乱更新的给定逻辑群组的逻辑扇区的数据的流程图。在更新过程期间,会将更新数据记录在混乱更新区块中,而未改变的数据则留在与逻辑群组关联的原始元区块中。在混乱更新下存取逻辑群组的逻辑扇区的过程如下步骤650开始定位给定逻辑群组的给定逻辑扇区。
步骤652在CBI区块中定位最后写入的CBI扇区。
步骤654通过查找最后写入的CBI扇区的混乱区块信息字段,定位与给定逻辑群组关联的混乱更新区块或原始区块。此步骤可在步骤662前的任何时间执行。
步骤658如果最后写入的CBI扇区是指向给定的逻辑群组,则可定位CBI扇区。继续进行到步骤662。否则,继续进行到步骤660。
步骤660通过查找最后写入的CBI扇区的扇区索引字段,定位给定逻辑群组的CBI扇区。
步骤662通过查找定位的CBI扇区的混乱区块索引字段,定位混乱区块或原始区块中的给定逻辑扇区。
图16D说明根据其中已将逻辑群组划分成子群组的替代性实施例,存取正在进行混乱更新的给定逻辑群组的逻辑扇区的数据的流程图。CBI扇区的有限容量只能跟踪预定最大数量的逻辑扇区。当逻辑群组具有多于单个CBI扇区所能处理的逻辑扇区时,会将逻辑群组划分成多个具有指派给各子群组的CBI扇区的子群组。在一个实例中,各CBI扇区具有足够跟踪由256扇区所组成和多达8个混乱更新区块的逻辑群组的容量。如果逻辑群组具有超过256扇区的尺寸,那么存在用于逻辑群组内各256扇区子群组的独立的CBI扇区。CBI扇区可存在用于逻辑群组内多达8个子群组,以支持尺寸多达2048个扇区的逻辑群组。
在优选实施例中,会采用间接索引方案以有助于索引的管理。扇区索引的各条目具有直接和间接字段。
直接扇区索引可定义CBI区块内有关特定混乱更新区块的所有可能CBI扇区处的偏移。此字段中的信息只在有关所述特定混乱更新区块的最后写入的CBI扇区中有效。索引中偏移的保留值指示CBI扇区并不存在,因为对应的有关混乱更新区块的逻辑子群组或是不存在,或是由于已配置更新区块而未经更新。
间接扇区索引可限定有关各许可的混乱更新区块的最近写入的CBI扇区处的CBI区块内的偏移。索引中偏移的保留值指示许可的混乱更新区块并不存在。
图16D显示在混乱更新下存取逻辑群组的逻辑扇区的过程,其步骤如下步骤670将各逻辑群组划分成多个子群组并将CBI扇区指派给各子群组。
步骤680开始定位给定逻辑群组的给定子群组的给定逻辑扇区。
步骤682在CBI区块中定位最后写入的CBI扇区。
步骤684通过查找最后写入的CBI扇区的混乱区块信息字段,定位与给定子群组关联的混乱更新区块或原始区块。此步骤可在步骤696前的任何时间执行。
步骤686如果最后写入的CBI扇区是指向给定的逻辑群组,那么继续进行到步骤691。否则,继续进行到步骤690。
步骤690通过查找最后写入的CBI扇区的间接扇区索引字段,定位给定逻辑群组的多个CBI扇区中最后写入的CBI扇区。
步骤691已定位与给定逻辑群组的子群组中的一者关联的至少一CBI扇区。继续。
步骤692如果所定位的CBI扇区指向给定子群组,那么可定位给定子群组的CBI扇区。继续进行到步骤696。否则,继续进行到步骤694。
步骤694通过查找当前定位的CBI扇区的直接扇区索引字段,定位给定子群组的CBI扇区。
步骤696通过查找给定子群组的CBI扇区的混乱区块索引字段,定位混乱区块或原始区块中的给定逻辑扇区。
图16E说明在其中将各逻辑群组划分成多个子群组的实施例中,混乱区块索引(CBI)扇区和其功能的实例。逻辑群组700原来将其完整的数据存储在原始元区块702中。接着,逻辑群组配合配置专用的混乱更新区块704进行更新。在本实例中,将逻辑群组700划分成子群组,这些子群组A、B、C、D各具有256个扇区。
为了定位子群组B中的第i个扇区,会先定位CBI区块620中最后写入的CBI扇区。最后写入的CBI扇区的混乱区块信息字段可提供定位给定逻辑群组的混乱更新区块704的地址。同时,其还可提供写入混乱区块中的最后扇区的位置。此信息在扫描和重建索引时有用。
如果最后写入的CBI扇区证明是给定逻辑群组的四个CBI扇区之一,那么会进一步确定其是否正是含有第i个逻辑扇区的给定子群组B的CBI扇区。如果是,那么CBI扇区的混乱区块索引会指向存储第i个逻辑扇区的数据的元区块位置。扇区位置会在混乱更新区块704中或在原始区块702中。
如果最后写入的CBI扇区证明是给定逻辑群组的四个CBI扇区之一但却不属于子群组B,那么会查找其直接扇区索引,以定位子群组B的CBI扇区。在定位此确切的CBI扇区后,会查找混乱区块索引,以在混乱更新区块704和原始区块702中定位第i个逻辑扇区。
如果最后写入的CBI扇区证明不是给定逻辑群组的四个CBI扇区中的任一个,那么会查找间接扇区索引以定位四个扇区中的一个。在图16E所示的实例中,会定位子群组C的CBI扇区。然后,子群组C的此CBI扇区查找其直接扇区索引,以定位子群组B的确切的CBI扇区。此实例显示在查找混乱区块索引时,将发现第i个逻辑扇区并未改变且会在原始区块中定位其有效数据。
在给定逻辑群组的子群组C中定位第j个逻辑扇区时也会做出同样的考虑。此实例显示最后写入的CBI扇区证明不是给定逻辑群组的四个CBI扇区中的任一个。其间接扇区索引指向给定群组的四个CBI扇区之一。所指向的四个中的最后写入结果也正是子群组C的CBI扇区。在查找其混乱区块索引时,将发现第j个逻辑扇区被定位在混乱更新区块704中的指定位置。
控制器RAM中存在系统中的各混乱更新区块的混乱扇区列表。每份列表均含有一份从快闪存储器中最后被更新的相关CBI扇区开始到当前扇区为止被写入所述混乱更新区块中的扇区的记录。特定混乱更新区块的逻辑扇区地址(可保留在混乱扇区列表中)的数量是8到16的典型值的设计参数。列表的最佳尺寸可确定为其对混乱数据写入操作的过度额外开销的影响和初始化期间的扇区扫描时间之间的权衡。
在系统初始化期间,为了识别从其关联的CBI扇区之一的先前更新后所写入的有效扇区,必须扫描各混乱更新区块。在控制器RAM中,会构成各混乱更新区块的混乱扇区列表。只需要在最后写入的CBI扇区中,从各区块的混乱区块信息字段中定义的最后扇区地址开始扫描各区块即可。
在配置混乱更新区块时,会写入CBI扇区以对应于所有的经更新的逻辑子群组。混乱更新区块的逻辑和物理地址会被写入扇区中可用的混乱区块信息字段,其中空值条目在混乱区块索引字段中。会在控制器RAM中打开混乱扇区列表。
在关闭混乱更新区块时,会将从扇区中混乱区块信息字段移除的区块逻辑和物理地址写入CBI扇区。RAM中对应的混乱扇区列表变成未使用。
可修改控制器RAM中对应的混乱扇区列表,以包括写入混乱更新区块的扇区的记录。当控制器RAM中的混乱扇区列表没有写入混乱更新区块的其它扇区记录的任何可用空间时,为有关列表中扇区的逻辑子群组写入已更新的CBI扇区,然后清除列表。
当CBI区块620变满时,会将有效的CBI扇区复制到已配置的已擦除区块中,然后擦除先前的CBI区块。
地址表图2所示的逻辑到物理地址转换模块140负责关联快闪存储器中主机的逻辑地址和对应的物理地址。逻辑群组和物理群组(元区块)间的映射是存储在非易失性快闪存储器200和易失性却较为快捷的RAM 130(见图1)中分布的一组表格和列表中。地址表被维持在含有存储器系统中每一逻辑群组的元区块地址的快闪存储器中。此外,最近写入扇区的逻辑到物理地址记录会临时保存在RAM中。在系统启动后进行初始化时,可从快闪存储器中的区块列表和数据扇区标头中重构这些易失性记录。因此,快闪存储器中的地址表只需要偶而更新,以降低控制数据的过度耗用写入操作的百分比。
逻辑群组的地址记录的阶层包括在RAM中的打开的更新区块列表、关闭的更新区块列表和维持在快闪存储器中的群组地址表(GAT)。
打开的更新区块列表是控制器RAM中当前打开用于写入已更新的主机扇区数据的数据更新区块的列表。区块的条目在区块关闭时会被移到关闭的更新区块列表。关闭的更新区块列表是控制器RAM中已经关闭的数据更新区块的列表。列表中条目的子集在控制写入操作期间会被移到群组地址表中的扇区。
群组地址表(GAT)是存储器系统中主机数据的所有逻辑群组的元区块地址的列表。GAT含有根据逻辑地址循序排序的各逻辑群组的一个条目。GAT中的第n个条目含有具地址n的逻辑群组的元区块地址。在优选实施例中,GAT是快闪存储器中的表格,其中包含一组具定义存储器系统中每一逻辑群组的元区块地址的条目的扇区(被称作GAT扇区)。在快闪存储器中,会将GAT扇区定位在一个或一个以上专用的控制区块(被称作GAT区块)中。
图17A说明群组地址表(GAT)扇区的数据字段。GAT扇区可例如具有足够含有一组128个连续逻辑群组的GAT条目的容量。各GAT扇区包括两个成分,即一组用于范围内各逻辑群组的元区块地址的GAT条目,和GAT扇区索引。第一成分含有用于定位与逻辑地址关联的元区块的信息。第二成分含有用于定位GAT区块内所有有效nGAT扇区的信息。各GAT条目有三个字段,即元区块号码、如先前结合图3A(iii)定义的页标记、和指示元区块是否已经重新链接的旗标。GAT扇区索引列出GAT区块中有效GAT扇区的位置。此索引会在每一GAT扇区中但会被GAT区块中下一个写入的GAT扇区的版本所取代。因此只有最后写入的GAT扇区中的版本为有效。
图17B说明记录在一个或一个以上GAT区块中的群组地址表(GAT)扇区的实例。GAT区块是记录GAT扇区专用的元区块。在更新GAT扇区时,会将其写入GAT区块720中下一个可用的物理扇区位置。因此,GAT扇区的多个副本可存在GAT区块中,其中只有最后写入的副本为有效。例如,GAT扇区255(含有逻辑群组LG3968-LG4098的指标)至少已经使用有效版本的最新版本更新两次。区块中最后写入的GAT扇区的一组索引可识别GAT区块中各有效扇区的位置。在此实例中,区块中最后写入的GAT扇区是GAT扇区236,和其索引组是取代所有先前索引组的有效索引组。当GAT区块最后变成以GAT扇区完全填充时,会通过将所有有效扇区再写入新的区块位置,以在控制写入操作期间压缩区块。然后擦除整个区块。
如上述,GAT区块在逻辑地址空间的区域中含有逻辑上连续组的群组的条目。GAT区块内的GAT扇区各含有128个连续逻辑群组的逻辑到物理映射信息。在GAT区块所跨越的地址范围内,存储所有逻辑群组条目所需的GAT扇区数仅占用区块内总扇区位置的一小部分。因此,在区块中下一个可用扇区位置将GAT扇区写入,即可将其更新。GAT区块中所有有效GAT扇区和其位置的索引被维持在最近写入的GAT扇区中的索引字段中。GAT区块中有效GAT扇区所占用的总扇区的一小部分是系统设计参数,其通常为25%。然而,每一GAT区块中最多有64个有效GAT扇区。在具大逻辑容量的系统中,可能必须在一个以上的GAT区块中存储GAT扇区。这时,各GAT区块是和固定范围的逻辑群组相关联。
可将GAT更新执行为控制写入操作的一部分,此操作会在ABL用尽配置的区块时被触发(见图18)。其执行和ABL填充和CBL清空操作同时进行。在GAT更新操作期间,一个GAT扇区具有利用来自关闭的更新区块列表中对应条目的信息所更新的条目。GAT条目被更新时,会从关闭的更新区块列表(CUBL)中移除任何对应的条目。例如,会根据关闭的更新区块列表中的第一条目选择要更新的GAT扇区。可将更新扇区写入GAT区块中的下一个可用扇区位置。
当没有任何扇区位置可供已更新的GAT扇区使用时,在控制写入操作期间就会发生GAT再写入操作。将会配置新的GAT区块和从完整的GAT区块按循序次序复制GAT索引所定义的有效GAT扇区。然后擦除整个GAT区块。
GAT高速缓存是控制器RAM 130中,GAT扇区中的128个条目的子划分的条目的副本。GAT高速缓存条目的数量是一系统设计参数,典型值为32。每次从GAT扇区读取一个条目时,即可建立相关扇区子划分的GAT高速缓存。将会维持多个GAT高速缓存。其数量是典型值为4的设计参数。GAT高速缓存会基于最久未使用利用不同扇区子划分的条目来覆写。
擦除的元区块管理图2所示的擦除区块管理器160可使用一组维持目录和系统控制信息的列表来管理擦除区块。这些列表分布在控制器RAM 130和快闪存储器200中。当必须配置已擦除的元区块以存储用户数据或存储系统控制数据结构时,会选择保存在控制器RAM中的配置区块列表(ABL)(见图15)中的下一个可用元区块号码。同样,在弃置元区块后而将其擦除时,会将其号码新增到同样保存在控制器RAM中的清除区块列表(CBL)。相对静态的目录和系统控制数据被存储在快闪存储器中。这些包括列出快闪存储器中所有元区块的擦除状态的已擦除区块列表和位图(MAP)。已擦除的区块列表和MAP被存储在单个扇区中,且会记录在称为「MAP区块」的专用元区块中。这些分布在控制器RAM和快闪存储器中的列表可提供已擦除区块记录的层级以有效管理已擦除元区块的使用。
图18是说明使用和再循环已擦除区块的控制和目录信息的分布和流程的示意方框图。控制和目录数据被维持在驻存在快闪存储器200的控制器RAM 130或在MAP区块750中所保存的列表中。
在优选实施例中,控制器RAM 130会保存配置区块列表(ABL)610和清除区块列表(CBL)740。如先前结合图15所述,配置区块列表(ABL)可记录最近已配置哪个元区块以存储用户数据或存储系统控制数据结构。在必须配置新的已擦除元区块时,会在配置区块列表(ABL)中选择下一个可用的元区块号码。同样,清除的区块列表(CBL)记录用于跟踪已解除配置和擦除的更新元区块。在控制器RAM 130(见图1)中会保存ABL和CBL以在跟踪相对活跃的更新区块时进行快速存取和简易操控。
配置区块列表(ABL)可跟踪将成为更新区块的已擦除元区块集区和已擦除元区块的配置。因此,每一这些元区块可由指定其是否为ABL未决配置中的已擦除区块、打开的更新区块、或关闭的更新区块的属性来描述。图18显示ABL含有已擦除ABL列表612、打开的更新区块列表614、和关闭的更新区块列表616。此外,与打开的更新区块列表614关联的是关联的原始区块列表615。同样,与关闭的更新区块列表关联的是关联的已擦除原始区块列表617。如先前图15所示,这些关联的列表分别是打开的更新区块列表614和关闭的更新区块列表616的子集。已擦除的ABL区块列表612、打开的更新区块列表614、和关闭的更新区块列表616均为配置区块列表(ABL)610的子集,各列表中的条目分别具有对应的属性。
MAP区块750是存储快闪存储器200中的擦除管理记录专用的元区块。MAP区块存储MAP区块扇区的时间序列,其中各MAP扇区不是擦除区块管理(EBM)扇区760,就是MAP扇区780。当已擦除区块在配置用尽且在弃置元区块时再循环时,关联的控制和目录数据优选含在可在MAP区块中更新的逻辑扇区中,其中会将更新数据的各实例记录在新的区块扇区中。EBM扇区760和MAP扇区780的多个副本可存在MAP区块750中,其中只有最新版本为有效。有效MAP扇区的位置的索引包含在EMB区块的字段中。有效的EMB扇区总是在控制写入操作期间最后被写入MAP区块中。当MAP区块750已满时,会在控制写入操作期间将所有有效扇区再写入新的区块位置而将其压缩。然后擦除整个区块。
各EBM扇区760含有已擦除的区块列表(EBL)770,此列表是已擦除区块总体的子集地址的列表。已擦除的区块列表(EBL)770可当作含有已擦除的元区块号码的缓冲器,从此缓冲器中会定期取用元区块号码以再填充ABL,并定期将元区块号码新增到此缓冲器中以再清空CBL。EBL 770可当作用于以下条目的缓冲器可用的区块缓冲器(ABB)772、已擦除的区块缓冲器(EBB)774和已清除的区块缓冲器(CBB)776。
可用的区块缓冲器(ABB)772含有紧接先前ABL填充操作之后的ABL 610的条目的副本。其实际上是恰好在ABL填充操作之后的ABL的备份副本。
已擦除的区块缓冲器(EBB)774含有先前从MAP扇区780或CBB列表776传送的已擦除的区块地址(在下文描述),且所述地址可在ABL填充操作期间传送到ABL 610。
已清除的区块缓冲器(CBB)776含有在CBL清空操作期间已从CBL 740传送和随后会被传送到MAP扇区780或到EBB列表774的已擦除区块的地址。
各个MAP扇区780含有被称作「MAP」的位图结构。MAP会使用快闪存储器中各元区块的一位,以用来指示各区块的擦除状态。对应于EBM扇区中ABL、CBL或已擦除的区块列表中所列举的区块地址的位在MAP中不会被设为擦除状态。
区块配置算法永远不会使用在MAP、已擦除的区块列表、ABL或CBL内,任何未含有有效数据结构和未被指定为已擦除区块的区块,因此无法存取这类区块用于存储主机或控制数据结构。这可提供从可存取的快闪存储器地址空间排除具有缺陷位置的区块的简单机制。
图18所示的阶层允许有效地管理已擦除的区块记录,并且对被存储在所述控制器的RAM中的所述区块地址列表提供充分的安全性。可以不频繁的方式在所述区块地址列表和一个以上的MAP扇区780之间交换已擦除的区块条目。可在电源关闭后的系统初始化期间,经由被存储在快闪存储器中的扇区中已擦除的区块列表和地址转换表中的信息,和有限地扫描快闪存储器中少量被参考的数据区块,来重构所述列表。
用于更新已擦除元区块记录的阶层所采用的所述算法可以下面的次序来配置使用已擦除区块将来自所述MAP区块750的区块丛在地址次序上交错来自所述CBL 740的区块地址丛,其反映的是区块被所述主机更新的次序。对大部份的元区块大小与系统存储器容量而言,单一MAP扇区可针对所述系统中的所有元区块提供一位图。在此情况中,已擦除的区块必定会以与被记录在此MAP扇区中相同的地址次序来配置使用。
擦除区块管理操作如上述,ABL 610是具有以下地址条目的列表可经配置使用的已擦除元区块,和最近已配置为数据更新区块的元区块。ABL中区块地址的实际数量介于为系统设计变量的最大和最小限制之间。在制造期间,格式化的ABL条目的数量是存储器卡类型和容量的函数。此外,由于可用的已擦除区块的数量会因寿命期间的区块故障而缩减,也会缩减ABL中条目的数量接近系统寿命终点。例如,在填充操作后,ABL中的条目可指定可用于以下用途的区块。每一区块具有一个条目的部分写入数据更新区块的条目不超过系统对同时打开的最大更新区块的限制。用于配置为数据更新区块的擦除区块在一到二十个条目之间。配置为控制区块的已擦除区块是四个条目。
ABL填充操作由于ABL 610会因为配置而变成耗尽,因此需要进行再填充。填充ABL的操作发生在控制写入操作期间。这是在以下情况中触发必须配置区块,但ABL含有不足以用于配置为数据更新区块或一些其它控制数据更新区块的已擦除区块条目。在控制写入期间,ABL填充操作是和GAT更新操作同时进行的。
在ABL填充操作期间会发生以下动作。
1.保留具有当前数据更新区块的属性的ABL条目。
2.保留已关闭数据更新区块的属性的ABL条目,除非所述区块的某个条目正在同时进行的GAT更新操作中被写入,在此情况中则会从所述ABL中移除所述条目。
3.保留用于未配置的擦除区块的ABL条目。
4.压缩ABL以移除因移除条目所产生的空隙,以维持条目的次序。
5.通过附加来自所述EBB列表中下次可用的条目,以完全填充所述ABL。
6.利用所述ABL中当前的条目来覆写所述ABB列表。
CBL清空操作
CBL是控制器RAM中已擦除区块地址的列表,对已擦除区块条目数量的限制和ABL相同。清空CBL的操作发生在控制写入操作期间。因此,其和ABL填充/GAT更新操作或CBI区块写入操作同时进行。在CBL清空操作中,会从CBL 740移除条目并将其写入CBB列表776。
MAP交换操作当EBB列表774已为清空时,在MAP扇区780的擦除区块信息和EBM扇区760间的MAP交换操作可定期发生在控制写入操作期间。如果系统中的所有已擦除元区块均记录在EBM扇区760中,那么将没有任何MAP扇区780存在且不会执行任何MAP交换。在MAP交换操作期间,用于将已擦除区块馈送给EBB 774的MAP扇区被看作源MAP扇区782。相反地,用于从CBB 776接收已擦除区块的MAP扇区被看作目的地MAP扇区784。如果只有一个MAP扇区,那么可当作源和目的地MAP扇区,其定义如下。
在MAP交换期间会执行以下动作。
1.以递增指标的方式为基础,选择一源MAP扇区。
2.以不在所述源MAP扇区中的第一CBB条目中的区块地址为基础来选择一目的地MAP扇区。
3.如所述CBB中相关条目所定义的方式来更新所述目的MAP扇区,并且从所述CBB中移除所述条目。
4.将所述已更新的目的地MAP扇区写入到所述MAP区块中,除非没有分离的源MAP扇区存在。
5.如所述CBB中相关条目所定义的方式来更新所述源MAP扇区,并且从所述CBB中移除所述条目。
6.将所述CBB中剩余的条目附加到所述EBB中。
7.利用所述源MAP扇区所定义的已擦除扇区地址尽可能地填充所述EBB。
8.将所述已更新的源MAP扇区写入到所述MAP区块中。
9.将一已更新的EBM扇区写入到所述MAP区块中。
列表管理图18说明各种列表间控制和目录信息的分布与流程。为了方便,在列表元件间移动条目或改变条目属性的操作,在图18中识别为[A]到[O],说明如下。
在将擦除区块配置为主机数据的更新区块时,会将其在ABL中的条目属性从已擦除的ABL区块改变为打开的更新区块。
在将已擦除的区块配置为控制区块时,会移除其在ABL中的条目。
在建立一具有打开更新区块属性的ABL条目时,会将关联的原始区块字段新增到条目,以记录被更新的逻辑群组的原始元区块地址。从GAT可获得此信息。
关闭更新区块时,其在ABL中的条目属性会从打开的更新区块改变为关闭的更新区块。
关闭更新区块时,会擦除其关联的原始区块,和会将其在ABL中条目的关联原始区块字段的属性改变为已擦除的原始区块。
在ABL填充操作期间,任何其地址在相同控制写入操作期间在GAT中更新的已关闭更新区块会从ABL中移除其条目。
在ABL填充操作期间,在从ABL移除已关闭更新区块的条目时,会将其关联的已擦除原始区块的条目移到CBL。
在擦除控制区块时,会将其所用条目新增到CBL。
在ABL填充操作期间,会从EBB列表将已擦除区块条目移到ABL,且被赋予已擦除的ABL区块的属性。
在ABL填充操作期间修改所有相关的ABL条目后,ABL中的区块地址将取代ABB列表的区块地址。
和控制写入期间的ABL填充操作同时进行,将CBL中已擦除区块的条目移到CBB列表。
在MAP交换操作期间,从CBB列表将所有相关条目移到MAP目的地扇区。
在MAP交换操作期间,从CBB列表将所有相关条目移到MAP源扇区。
在MAP交换操作期间的[L]与[M]之后,从CBB列表将所有其余条目移到EBB列表。
在MAP交换操作期间的[N]之后,如果可能,从MAP源扇区移动除了在[M]中移动的条目以外的条目,以填充EBB列表。
逻辑到物理地址转换为了在快闪存储器中定位逻辑扇区的物理位置,图2所示的逻辑到物理地址转换模块140可执行逻辑到物理地址转换。除了最近已更新的逻辑群组外,可以使用驻存在控制器RAM 130中的快闪存储器200或GAT高速缓存的群组地址表(GAT)执行大多数的转换。最近已更新的逻辑群组的地址转换会需要查找主要驻存在控制器RAM 130中的更新区块的地址列表。因此,逻辑扇区地址的逻辑到物理地址转换的过程端根据与扇区所在的逻辑群组关联的区块的类型而定。区块的类型如下完整区块、循序数据更新区块、混乱数据更新区块、关闭的数据更新区块。
图19是说明逻辑到物理地址转换过程的流程图。实质上,先使用逻辑扇区地址查找各种更新目录(例如,打开的更新区块列表和关闭的更新区块列表),即可定位对应的元区块和物理扇区。如果关联的元区块并不属于更新过程的部分,则由GAT提供目录信息。逻辑到物理地址转换包括以下步骤步骤800给定一逻辑扇区地址。
步骤810查找控制器RAM中打开的更新区块列表614的给定逻辑地址(见图15与18)。如果查找失败,继续进行到步骤820,否则继续进行到步骤830。
步骤820在关闭的更新区块列表616中查找给定的逻辑地址。如果查找失败,则给定的逻辑地址并不属于任何更新过程的部分;继续进行到步骤870,以进行GAT地址转换。否则继续进行到步骤860,以进行关闭的更新区块地址转换。
步骤830如果含有给定逻辑地址的更新区块为循序,则继续进行到步骤840,以进行循序更新区块地址转换。否则继续进行到步骤850,以进行混乱更新区块地址转换。
步骤840使用循序更新区块地址转换来取得元区块地址。继续进行到步骤880。
步骤850使用混乱更新区块地址转换来取得元区块地址。继续进行到步骤880。
步骤860使用关闭的更新区块地址转换来取得元区块地址。继续进行到步骤880。
步骤870使用群组地址表(GAT)转换来取得元区块地址。继续进行到步骤880。
步骤880将元区块地址转换为物理地址。转换方法根据元区块是否已经重新连接而定。
步骤890已取得物理扇区地址。
下文将更详细地说明各种地址转换处理循序更新区块地址转换(步骤840)从打开的更新区块列表614(图15和18)的信息即可直接完成与循序更新区块关联的逻辑群组中目标逻辑扇区地址的地址转换,说明如下。
1.从列表的「页标记」和「写入的扇区号码」字段可确定目标逻辑扇区是否已经配置在更新区块或其关联的原始区块中。
2.从列表中可读取适合目标逻辑扇区的元区块地址。
3.从合适的「页标记」字段可确定元区块内的扇区地址。
混乱更新区块地址转换(步骤850)与混乱更新区块关联的逻辑群组中目标逻辑扇区地址的地址转换序列如下。
1.如果从RAM中的混乱扇区列表确定扇区是最近写入的扇区,则直接根据其在此列表中的位置即可完成地址转换。
2.在CBI区块中最近写入的扇区在其混乱区块数据字段内含有和目标逻辑扇区地址相关的混乱更新区块的物理地址。其在间接扇区索引字段内也含有有关此混乱更新区块最后写入的CBI扇区的CBI区块内的偏移(见图16A-16E)。
3.这些字段中的信息均被快取存储于RAM中,而不需要在后续的地址转换期间来读取所述扇区。
4.读取步骤3由间接扇区索引字段识别的CBI扇区。
5.将最近被存取的混乱更新子群的直接扇区索引字段快速存储在RAM中,而不需要实施步骤4处的读取以重复存取相同的混乱更新区块。
6.在步骤4或步骤5读取的直接扇区索引字段接着可识别有关含有目标逻辑扇区地址的逻辑子群组的CBI扇区。
7.从步骤6中识别的CBI扇区读取目标逻辑扇区地址的混乱区块索引条目。
8.所述最近被读取的混乱区块索引字段可被快取存储于控制器RAM中,而不需要实施步骤4与步骤7处的读取以重复存取相同的逻辑子群。
9.混乱区块索引条目可定义目标逻辑扇区在混乱更新区块或关联的原始区块中的位置。如果目标逻辑扇区的有效副本是在原始区块中,则可使用原始元区块和页标记信息将其定位。
关闭的更新区块地址转换(步骤860)根据关闭的更新区块列表的信息即可直接完成和关闭的更新区块关联的逻辑群组中目标逻辑扇区地址的地址转换(参见图18),说明如下。
1.从列表中可读取指派给目标逻辑群组的元区块地址。
2.从列表中的「页标记」字段可确定元区块内的扇区地址。
GAT地址转换(步骤870)如果逻辑群组不会受到打开或关闭的区块更新列表的参考,则其在GAT中的条目为有效。由GAT所参考的逻辑群组中目标逻辑扇区地址的地址转换序列如下。
1.评估RAM中可用的GAT高速缓存的范围,以确定目标逻辑群组的条目是否包含在GAT高速缓存中。
2.如果在步骤1发现目标逻辑群组,则GAT高速缓存含有完整的群组地址信息,包括元区块地址和页标记,因此允许转换目标逻辑扇区地址。
3.如果目标地址不在GAT高速缓存中,则必须读取目标GAT区块的GAT索引,以识别有关目标逻辑群组地址的GAT扇区的位置。
4.最后存取的GAT区块的GAT索引会保留在控制器RAM中,且不用从快闪存储器读取扇区即可存取。
5.将一份由每一GAT区块的元区块地址和被写入每一GAT区块中的扇区数量所组成的列表保存在控制器RAM中。假使步骤4处无法取得必要的GAT索引,则可立刻从快闪存储器中读取。
6.从步骤4或步骤6处所获得的GAT索引所定义的GAT区块中的扇区位置中读取有关目标逻辑群组地址的GAT扇区。以含有目标条目的扇区的子划分来更新GAT高速缓存。
7.从目标GAT条目内的元区块地址和「页标记」字段取得目标扇区地址。
元区块对物理地址转换(步骤880)如果和元区块地址关联的旗标代表元区块已经被重新连接,则会从BLM区块读取相关的LT扇区,以确定目标扇区地址的擦除区块地址。否则,会从元区块地址决直接定擦除区块地址。
控制数据管理图20说明在存储器管理的操作过程中,在控制数据结构上执行的操作阶层。数据更新管理操作可对驻存在RAM中的各种列表发生作用。控制写入操作可对快闪存储器中各种控制数据扇区和专用区块发生作用,并还能和RAM中的列表交换数据。
数据更新管理操作会在RAM中针对ABL、CBL、和所述混乱扇区列表来实施。当一已擦除区块被配置为一更新区块或控制区块时,或是关闭一更新区块时,便会更新所述ABL。当擦除一控制区块时,或是将一已关闭的更新区块的某个条目写入所述GAT中时,便会更新所述CBL。当一扇区被写入一混乱更新区块中时,便会更新所述更新混乱扇区列表。
控制写入操作会使得来自RAM中的控制数据结构的信息被写入快闪存储器中的控制数据结构中,必要时会随之更新快闪存储器与RAM中其它支持的控制数据结构。当所述ABL不含欲被配置为更新区块的已擦除区块的任何其它条目时,或是再写入所述CBI区块时,便会触发控制写入操作。
在优选实施例中,会在每一控制写入操作期间执行ABL填充操作、CBL清空操作、和EBM扇区更新操作。当含有EBM扇区的MAP区块已满时,会将有效的EBM和MAP扇区复制到已配置的已擦除区块,然后擦除先前的MAP区块。
在每一控制写入操作期间,写入一个GAT扇区,也会因此修改关闭的更新区块列表。当GAT区块已满时,将执行GAT再写入操作。
如上述,经过几次的混乱扇区写入操作之后,便会写入一CBI扇区。当CBI区块变满时,会将有效的CBI扇区复制到已配置的擦除区块中,然后擦除先前的CBI区块。
如上述,MAP交换操作是在EBM扇区的EBB列表中没有其它已擦除的区块条目时执行。
每次再写入MAP区块时,会在专用的MAPA区块中写入用于记录MAP区块的当前地址的MAP地址(MAPA)扇区。当MAPA区块已满时,会将有效的MAPA扇区复制到已配置的已擦除区块,然后擦除先前的MAPA区块。
每次再写入MAPA区块时,会将启动扇区写入当前的启动区块中。当启动区块已满时,会将当前版本的启动区块的有效启动扇区复制到备份版本,然后所述版本再变成当前的版本。先前的当前版本会被擦除并变成备份版本,并会将有效的启动扇区写回其中。
分散在多个存储器平面上的存储器的对准如先前结合图4和图5A-5C所述,为了增加性能,会并行操作多个存储器平面。基本上,各平面有其自己的读出放大器组作为读取和程序电路的部分,以并行服务跨越平面的存储器单元的对应页。在结合多个平面时,可并行操作多个页,从而导致更好的性能。
根据本发明的另一方面,对于一被组织成复数个可擦除区块且由多个存储器平面构成(因而可并行地读取复数个逻辑单位或是将复数个逻辑单位并行地编程到所述多个平面中)的存储器阵列,当要更新存储在特定存储器平面中第一区块的原始逻辑单位时,会供应所需以将已更新的逻辑单位保持在和原始相同的平面中。这可通过以下方式来完成将已更新的逻辑单位记录到仍在相同平面中的第二区块的下一个可用位置。优选将逻辑单位存储在和其它版本相同的平面中的偏移位置,使得给定逻辑单位的所有版本是由相同组的感测电路服务。
因此,在优选实施例中,以逻辑单位的当前版本来填补介于上一个编程存储器单位与下一个可用平面对准存储器单位之间的任何中间空隙。将逻辑上位于最后被编程的逻辑单位后面的逻辑单位的当前版本和逻辑上位于被存储在下一可用的平面对准的存储器单位中的逻辑单位前面的逻辑单位的当前版本填入空隙中,便可完成所述填补操作。
以这种方式,可将逻辑单位的所有版本维持在和原始平面相同的平面中且具有相同偏移,使得在垃圾收集操作中,不必从不同平面撷取逻辑单位的最新版本,以免降低性能。在优选实施例中,可利用最新的版本来更新或填补平面上的每一存储器单位。因此,可从每一平面中并行地读出一逻辑单位,其将会具有逻辑次序而无需进一步重新排列。
此方案通过允许平面上重新排列逻辑群组的逻辑单位的最新版本,且不必搜集不同存储器平面的最新版本,而缩短合并混乱区块的时间。这很有好处,其中主机接口的性能规格可限定由存储器系统完成扇区写入操作的最大等待时间。
324图21说明以多个存储器平面构成的存储器阵列。存储器平面可以来自相同的存储器芯片或多个存储器芯片。各平面910具有其自身的读取和编程电路912以并行服务存储器单元的页914。在不损失一般性的情况下,在所示的实例中,存储器阵列具有四个并行操作的平面。
一般而言,逻辑单位是主机系统存取的最小单位。通常一个逻辑单位是尺寸512字节的扇区。页是平面中并行读取或编程的最大单位。通常一个逻辑页含有一个或一个以上逻辑单位。因此,在结合多个平面时,可将并行读取或编程的最大总数单位看作存储器单元的元页,其中元页是由多个平面中的各平面的页所构成。例如,如MP0的元页具有四个页,即来自各平面P0、P1、P2、和P3的页,其中并行存储逻辑页LP0、LP1、LP2、LP3。因此,和仅在一个平面中的操作相比,存储器的读取和写入性能增加四倍。
存储器阵列会进一步组织成复数个元区块,如MB0、…、MBj,其中各元区块内的所有存储器单元可作为一个单位一起擦除。如MB0的元区块是由多个存储器位置构成,以存储数据的逻辑页914,如LP0-LPN-1。元区块中的逻辑页是根据其填充于元区块的次序,按预定的序列分布在四个平面P0、P1、P2和P3中。例如,在按逻辑上按循序次序填充逻辑页时,会以第一平面中第一页、第二平面中第二页等的循环次序访问平面。在到达最后的平面后,填充会以循环的方式返回,以从下一个元页的第一平面重新开始。以这种方式,即可在所有平面均为并行操作时并行存取连续的逻辑页。
一般而言,如果有W个平面以并行方式操作且元区块是按逻辑上循序次序进行填充,则元区块中第k个逻辑页将驻存在平面x中,其中x=k MOD W。例如,有四个平面,W=4,在按逻辑上循序次序填充区块时,第5个逻辑页LP5将驻存在由5 MOD 4给定的平面中,即平面1,如图21所示。
各存储器平面中的存储器操作是由一组读取/写入电路912来执行。进出各读取/写入电路的数据是通过在控制器920的控制下的数据总线930进行传送。控制器920中的缓冲器922可经由数据总线930协助缓冲数据的传送。尤其在第一平面的操作需要存取第二平面的数据时,将需要两个步骤的过程。控制器会先读出第二平面的数据,然后经由数据总线和缓冲器传送到第一平面。事实上,在大多数的存储器架构中,在两个不同的位线之间传送数据也需要通过数据总线920交换数据。
至少,这涉及在一平面中从一组读取/写入电路传送出去,然后进入另一平面中的另一组读取/写入电路。在其中平面是来自不同芯片的例子中,将需要在芯片之间传送。本发明可提供存储器区块管理的结构和方案,以避免一个平面从另一个平面存取数据,以便将性能最大化。
如图21所示,一元页是由多个逻辑页(各位于其中一个平面中)构成。每一逻辑页可能是由一个以上的逻辑单位组成。当数据欲以逐逻辑单位的方式被记录在一越过所述平面的区块中时,每一逻辑单位便将会落在所述四个存储器平面之一中。
在更新逻辑单位时会发生平面对准的问题。在当前的实例中,为了便于解说,将逻辑单位看作512字节的逻辑扇区,一个逻辑页也是一个逻辑单位宽。由于快闪存储器不允许未先擦除整个区块而再写入区块的一部分,因此不会将逻辑页的更新写入现有的位置上,而是将其记录在区块未使用的位置中。然后会将逻辑单位的先前版本看作废弃。在一些更新后,区块可含有一些由于已经更新因此变成废弃的逻辑单位。然后此区块可以说是「不干净」,而垃圾收集操作会忽略不干净的逻辑单位而收集各个逻辑单位的最新版本并按逻辑上循序次序将其重新记录在一个或一个以上新的区块中。然后擦除和再循环不干净的区块。
当所述已更新逻辑单位被记录在某一区块中下个未被使用的位置中时,其通常不会被记录在和先前版本相同的存储器平面中。当要进行垃圾收集操作时,如合并或压缩,一逻辑单位的最新版本便会被记录在和原来相同的平面中,以维持原来的次序。然而,如果必须从另一个平面撷取最新版本,性能将会降低。
因此,根据本发明的另一方面,给定平面的第一区块的原始逻辑单位。这可通过以下方式来完成将已更新的逻辑单位记录到仍在相同平面中的第二区块的下一个可用位置。在优选实施例中,会以和原始区块中原始逻辑单位的相同相对位置的逻辑单位的当前版本,填补(即,通过复制来填充)任何在上一个编程存储器单位和下一个可用平面对准存储器单元之间的中间空隙。
图22A说明根据本发明的一般实施例,具有平面对准的更新的方法的流程图。
步骤950在一被组织成复数个区块的非易失性存储器中,每一区块均被划分成可一起擦除的复数个存储器单位,每一存储器单位是用于存储一逻辑单位的数据。
步骤952以多个存储器平面构成存储器,各平面具有一组用于并行服务存储器页的感测电路,所述存储器页含有一个或一个以上存储器单位。
步骤954依照第一次序将逻辑单位的第一版本存储于一第一区块的复数个存储器单位中,每一第一版本逻辑单位均被存储在所述存储器平面之一中。
步骤956依照不同于第一次序的第二次序将逻辑单位的后续版本存储在第二区块中,每一后续版本均被存储在和所述第一版本相同的存储器平面中下一个可用的存储器单位中,以便可利用所述组相同的感测电路从所述相同的平面中来存取逻辑单位的所有版本。
图22B说明在图22A所示的流程图中存储更新的步骤的优选实施例。
步骤956′包括步骤957、步骤958和步骤959。
步骤957将各区块划分成元页,各元页是由各平面的页所构成。此步骤可在存储步骤的任一项之前执行。
步骤958根据不同于第一次序的第二次序将逻辑单位的后续版本存储到第二区块,各后续版本是存储在具有元页中和第一版本相同偏移的下一个可用存储器单位中。
步骤959和存储逻辑单位的后续版本同时进行,根据第一次序复制逻辑单位的当前版本,以逐元页的方式来填补在所述下一个可用存储器单位之前的任何未使用存储器单位。
图23A说明不考虑平面对准按循序次序写入到循序更新区块的逻辑单位的实例。所述实例说明每一逻辑页的大小均是一个逻辑扇区,例如LS0、LS1…。在所述四平面的实例中,每一区块(例如MB0)均可看作被划分成复数个元页MP0、MP1、…,其中每一元页(例如MP0)均含有四个扇区(例如LS0、LS1、LS2、和LS3),每一扇区分别来自平面P0、P1、P2、和P3。所以,所述区块会以循环次序逐扇区地被填入平面P0、P1、P2、和P3中的逻辑单位中。
在主机写入操作#1中,正在更新逻辑扇区LS5-LS8中的数据。会将更新成为LS5′-LS8′的数据记录在始于第一可用位置的新配置的更新区块中。
在主机写入操作#2中,正在更新逻辑扇区LS9-LS12中数据的程序段。会将更新成为LS9′-LS12′的数据记录在紧接在最后写入停止处之后的位置中的更新区块中。图中显示两次主机写入的方式是以逻辑循序方式将所述更新数据记录在所述更新区块中,即LS5′-LS12′。更新区块可看作循序更新区块,因其已按逻辑上循序的次序被填补。记录在更新区块中的更新数据可废弃原始区块中对应的数据。
然而,更新逻辑扇区是根据下一个可用位置但却不考虑平面对准而记录在更新区块中。例如,扇区LS5原来是记录在平面P1中,但已更新的LS5′现在则记录在P0中。同样地,其它更新扇区全部无法对准。
图23B说明不考虑平面对准按无序次序写入混乱更新区块的逻辑单位的实例。
在主机写入操作#1中,会更新存储在原始元区块的给定逻辑群组的逻辑扇区LS10-LS11。已更新的逻辑扇区LS10′-LS11′会被存储在新配置的更新区块中。这时,更新区块为循序的更新区块。在主机写入操作#2中,会将逻辑扇区LS5-LS6更新成为LS5′-LS6′且将其记录在紧接上一个写入之后的位置的更新区块中。这可将循序的更新区块转换为混乱的更新区块。在主机写入操作#3,再次更新逻辑扇区LS10′且将其记录在更新区块的下一个位置中成为LS10″。这时,更新区块中的LS10″可取代先前记录中的LS10′,而LS10′又可取代原始区块中的LS10。在主机写入操作#4中,再次更新逻辑扇区LS10的数据且将其记录在更新区块的下一个位置中成为LS10。因此,LS10现在是逻辑扇区LS10的最后并唯一有效的版本。LS10的所有先前版本现在均已废弃。在主机写入操作#5中,会更新逻辑扇区LS30的数据且将其记录在更新区块中成为LS30′。在此实例中,可按任何次序和以任何重复将逻辑群组内的逻辑单位写入到混乱更新区块。
同样,更新逻辑扇区是根据下一个可用位置但却不考虑平面对准而记录在更新区块中。例如,扇区LS10原来是记录在平面P2(即,MP2、第三平面)中,但更新LS10′现在却记录在P0(即,MP0′,第一平面)中。同样,在主机写入#3中,会再次将逻辑扇区LS10′更新成为LS10″并被放在结果也在平面P0(MP1′的第一平面)的下一个可用位置中。因此,一般而言,从图中可见,将更新扇区记录到区块的下一个可用位置会使更新扇区被存储在和其先前版本不同的平面中。
具有以填补填充的中间空隙的平面对准的循序更新区块图24A说明根据本发明的优选实施例,具有平面对准和填补的图23A的循序更新实例。
在主机写入操作#1中,会将更新成为LS5′-LS8′的数据记录在始于第一可用平面对准位置的新配置的更新区块。在此例中,LS5原来在P1中,P1是元页的第二平面。因此,会在更新区块的第一可用元页MP0的对应平面中编程LS5′-LS7′。同时,会以原始区块元页中在LS5前的逻辑扇区LS4的当前版本填补MP0′中未使用的第一平面的空隙。然后将原始LS4处理成废弃的数据。然后将剩余的LS8′记录在下一个元页MP1′的第一个平面中并已平面对准。
在主机写入操作#2中,会将更新成为LS9′-LS12′的数据记录在下一个可用平面对准位置的更新区块中。因此,会将LS9′记录在下一个可用的平面对准存储器单位中,即MP1′的第二平面。这时,不会造成任何空隙,也不需要任何填补。更新区块可看作循序更新区块,因其已按逻辑上循序的次序填入。此外,其将因各更新逻辑单位和其原始的一样都在相同平面中而已平面对准。
具有中间空隙的平面对准的混乱更新区块图24B说明根据本发明的优选实施例,具有平面对准和不具有任何填补的图23B的混乱更新实例。
在主机写入操作#1中,将已更新的逻辑扇区LS10′-LS11′存储在新配置的更新区块中。并不会将其存储在下一个可用的存储器单位中,而是将其存储在下一个可用的平面对准存储器单位中。由于LS10′和LS11′原来被分别存储在平面P2和P3(原始区块的MP2的第三和第四平面),下一个可用的平面对准存储器单位将在更新区块的MP0′的第三和第四平面中。这时,更新区块为无序,其中将按「未填充」、「未填充」、LS10′和LS11′的次序填充元页MP0的页。
在主机写入操作#2中,会将逻辑扇区LS5-LS6更新成为LS5′-LS6′且将其记录在下一个可用的平面对准的更新区块中。因此,会将原始区块中在MP1的第二(P1)和第三(P2)平面或存储器单位的LS5′和LS6′编程到更新区块中下一个可用元页MP1′的对应的平面中。这会在MP1′中留下在前面的未使用的第一平面。
在主机写入操作#3,再次更新逻辑扇区LS10′且将其记录在更新区块的下一个平面对准位置中成为LS10″。因此,会将其写入下一个可用的第三平面,即在MP2′中。这会在MP1′的最后的平面和MP2′的前两个平面中留下之前的空隙。这将会废弃MP0′中的LS10′。
在主机写入操作#4中,会再次更新逻辑扇区LS10″中的数据并将其记录在更新区块中元页MP2′的下一个可用第三平面中成为LS10。因此,LS10现在是逻辑扇区LS10的最后并唯一有效的版本。这会留下由MP2′的最后平面和MP3′的前两个平面组成的空隙。
在主机写入操作#5中,会更新逻辑扇区LS30的数据且将其记录在更新区块中成为LS30′。由于原始的LS30驻存在元页的P2或第三平面中,因此会将其写入更新区块中下一个可用的第三平面。这时,其将是MP4′的第三平面。将因MP3′的最后平面与MP4′的前两个平面而产生空隙。因此,此实例显示可以平面对准的方式,按照任何次序和任意重复,将一逻辑群组内的复数个逻辑扇区写入到一混乱更新区块中。在后续的垃圾收集操作中,将便利地由相同组的感测电路来服务给定逻辑扇区的所有版本,尤其是最新版本。
具有以填补填充的中间空隙的平面对准的混乱更新区块图24C说明根据本发明的另一优选实施例,具有平面对准和填补的图23B的混乱更新实例。
此操作和图24B所示的相同,但中间空隙会先以填补加以填充。在主机写入操作#1中,会先以驻存在原始区块的LS8和LS9的当前版本,来填补由元页MP0′的第一和第二未使用的平面产生的空隙。这会使原始区块中的LS8和LS9废弃。这时,更新区块是循序的更新区块,其中元页MP0′的填充次序为LS8、LS9、LS10′和LS11′。
在主机写入操作#2中,将因MP1′中在之前的未使用的第一平面而产生空隙,其将先用LS4进行填补。这将使原始区块中的LS4废弃。和之前一样,第二写入可将循序更新区块转换为混乱更新区块。
在主机写入操作#3中,将因MP1′中未使用的最后平面和MP2′的前两个平面而产生空隙。会先用上一个编程的LS6′之后的LS7来填补MP1′的最后平面,然后用LS10之前的逻辑单位(即LS8和LS9)来填补MP2′的前两个平面。这会废弃MP0′中的LS10′和原始区块中的LS7-LS9。
在主机写入操作#4中,将产生由MP2′的最后平面和MP3′的前两个平面组成的空隙。MP2′的最后平面可由元页MP2′中在最后写入的LS10″之后的逻辑单位当前版本的LS11′进行填补。MP3′的前两个平面分别可通过LS8和LS9进行填补,和元页MP3′中在LS10之前的逻辑单位一样。
在主机写入操作#5中,也会因此分别用LS11′、LS28和LS29来填补从MP3′的最后平面到MP4′前两个平面之间的空隙。因此,此实例显示可以平面对准的方式,按照任何次序和任意重复,将一逻辑群组内的复数个逻辑扇区写入到一混乱更新区块中。
在优选实施例中,一个元页含有来自个别平面的循环页。由于元页可以并行的方式进行读取或编程,因此以元页的粒度实施主机更新会很方便。在有任何填补时,其可和更新逻辑单位一起逐元页地记录。
在图24A和图24C的实例说明的实施例中,在各主机写入期间,会在要编程更新的平面对准存储器单位之前未使用的存储器单位上执行填补。在下一个主机写入之前,会延后上一个编程的存储器单位后的任何未使用存储器单元的动作。一般而言,会在各元页的边界内填补任何在之前未使用的存储器单位。换句话说,如果之前的空隙越过两个元页之上,则按各元页合适的逻辑上循序次序在各元页上执行填补,但不考虑横跨边界的连续性。在合并区块时,最后写入的元页,如果是部分写入,可通过填补完整填充。
在另一实施例中,任何部分填充的元页可在移到下一个元页之前被完全填补。
存储器单位粒度根据单个存储器架构所支持的灵活性,读取或编程的单位可以有各种变化。单个平面的独立性质允许独立读取和编程元页中单个平面的各页。上述实例具有成为各平面中页的编程最大单位。在元页内,可以有小于所有页的局部元页编程。例如,可以编程元页的前三个页,然后再编程第四个页。
还有,在平面层级,一个物理页可含有一个或一个以上存储器单位。如果各存储器单位可以存储一个扇区的数据,则一个物理页可存储一个或一个以上扇区。一些存储器架构可支持局部页编程,其中通过抑制页内选定存储器单位的编程,可在多个编程过程上,在不同的时间个别编程选定的逻辑单位。
在存储器平面内用于逻辑群组的混乱更新的逻辑单位对准在区块存储器管理系统中,按逻辑上循序次序将逻辑单位的逻辑群组存储在原始区块中。在更新逻辑群组时,会将逻辑单位的后续版本存储在更新区块中。如果将逻辑单位混乱地(即,无序地)存储在更新区块中,最后会执行垃圾收集以收集原始区块和更新区块中逻辑单位的最新版本,以循序地将其整合为新的原始区块。如果将给定逻辑单位的更新版本全部存储在和其原始区块中原始版本对准的更新区块中,使得相同组的感测电路可以存取所有版本,那么垃圾收集操作会更有效。
根据本发明的另一方面,在上述区块存储器管理系统中,在将存储器组织成一系列的存储器页时(其中存储器单位的各页是由一组感测电路进行并行服务),如果给定逻辑单位的所有版本在所存储的页中全部具有相同的偏移位置,那么所有版本均已对准。
图25说明其中各页含有两个用于存储两个逻辑单位(如两个逻辑扇区)的存储器单位的实例存储器组织。在原始区块中,由于逻辑扇区是按逻辑上循序次序加以存储,会将逻辑扇区LS0和LS1存储在页P0中,将逻辑扇区LS2和LS3存储在页P1中,且将逻辑扇区LS4和LS5存储在页P3中等。可以看出在此两个扇区的页中,左边算起第一个扇区的页偏移为「0」,而第二个扇区的页偏移为「1」。
在更新循序存储在原始区块中的逻辑扇区的逻辑群组时,会将已更新的逻辑扇区记录在更新区块中。例如,逻辑扇区LS2驻存在原始区块中具有偏移「0」的页P0中。如果在第一写入中,如果将LS2更新为LS2′,那么会将其存储在具有相同页偏移「0」的更新区块的第一可用位置。这会是在页P0′的第一存储器单位中。如果在第二写入中,将LS5更新为LS5′,则会将其存储在具有相同页偏移「1」的更新区块的第一可用位置。这会是在具有页P1′的偏移「1」的第二存储器单位中。然而,在存储LS5′之前,会在其中复制至少在各页中将会维持逻辑循序次序的逻辑扇区的最新版本,以先填补P0′中具有偏移「1」的未使用存储器单位和P1′中的偏移「0」。这时,会将LS3复制到P0′中偏移「1」位置且将LS4复制到P1′中偏移「0」位置。如果在第三写入中,再次将LS2′更新为LS2″,则会将其存储在P2′的偏移「0」中。如果在第四写入中,分别将LS22和LS23更新为LS22′和LS23′,则会分别将其存储在P3′的偏移「0」和「1」中。然而,在那之前,会用LS3填补P2′中具有偏移「1」的未使用的存储器单位。
上述更新序列假设可以在页内编程单个扇区。对于一些其中不支持局部页编程的存储器架构,必须一起编程页内的扇区。这时,在第一写入中,会将LS2′和LS3一起编程到P0′中。在第二写入中,会将LS4和LS5′一起编程到P1′中。在第三写入中,会将LS2″和LS3一起编程到P2′中等。
元页内的平面对准或者,编程的单位可具有元页的粒度。如果写入混乱更新区块的粒度变成元页,则结合图16A和16B所述的CBI区块中的条目将和元页有关,而不是和扇区有关。增加的粒度会减少必须为混乱更新区块所记录的条目的数量,并允许直接消除索引且每一元区块使用单一CBI扇区。
图26A和图21的存储器结构相同,只是各页含有两个扇区而不是一个。因此,从图中可见元页MP0现在各有其能够存储两个逻辑单位的数据的页。如果各逻辑单位是一个扇区,则将逻辑扇区循序存储在平面P0中LS0和LS1,平面P1中LS2和LS3等的MP0中。
图26B说明图26A所示的具有以示意性线性方式布局的存储器单元的元区块。与图21的单一扇区页相比,逻辑扇区以循环的方式存储在各页中具有两个扇区的四个页中。
一般而言,如果有W个并行操作的平面且每一页有K个存储器单位,且按逻辑上循序次序填充元区块,则元区块中第k个逻辑页将驻存在平面x中,其中x=k′MOD W,其中k′=INT(k/K)。例如,有四个平面,W=4,每一页2个扇区,K=2,则对于k=5,即指第五个逻辑扇区LS5,其将驻存在由2 MOD 4所指定的平面中,即平面2,如图24A所示。一般而言,相同原理适合实施上述的平面对准。
上述实例是用于多重平面架构中平面和页的对准。在具有多个扇区的页的例子中,同样维持页内的扇区对准会很有利。以这种方式,使用相同组的感测电路有利于相同逻辑扇区的不同版本。可有效执行例如扇区的重新定位和「读取-修改-写入」的操作。在对准页内的扇区次序时,可以采用和对准页与平面的相同技术。同样取决于根据实施例,可以填补也可以不填补任何中间空隙。
无需填补的逻辑单位平面对准图27说明的替代性方案如下不用填补要从一个位置复制到另一个的逻辑单位,即可在更新区块中进行平面对准。可将和更新区块交叉的四个平面的部分看作收集从主机接收的平面对准的已更新逻辑单位的四个缓冲器。不用在合适缓冲器的下一个可用存储器单位中填补,即可编程从主机接收的各逻辑单位。依照从所述主机接收的逻辑单位地址的序列,可能会有不同数量的逻辑单位被编程在各平面中。
混乱更新区块MB′1可含有逻辑元页的所有逻辑单位的已更新版本,例如用于MP′0。其还可含有小于元页的所有逻辑单位,例如用于MP′1。在MP′1的情况中,可从对应的原始区块MB0获得丢失的逻辑单位LS4。
此替代性方案在存储器架构可支持并行读取各平面的任意逻辑页时尤其有效。以这种方式,可在单一并行读取操作中读取一个元页的所有逻辑页,即使个别逻辑页并非来自相同列。
阶段性程序错误处置当区块中有编程失败时,则通常会将所有要存储到区块的数据移到另一个区块并将失败的区块标示为不良。根据其中遇到失败的操作的时序规格,可能没有足够的时间可另外将存储的数据移到另一个区块。最坏的情况是在正常垃圾收集操作期间的编程失败,其中需要另一个相同垃圾收集操作以将所有数据重新定位到另一个区块。在此情况中,可能会违反给定主机/存储器装置所规定的写入等待时间限制,因为其通常被设计成容纳一次(而非两次)垃圾收集操作。
图28说明其中缺陷区块在合并操作期间发生编程失败时会在另一个区块上重复合并操作的方案。在此实例中,区块1是按逻辑上循序次序存储逻辑群组的完整逻辑单位的原始区块。为了便于说明,原始区块含有扇区A、B、C、和D,各存储一个子群组的逻辑单位。当主机更新群组的特定逻辑单位时,会将逻辑单位的较新版本记录在更新区块中,即区块2。如先前结合更新区块所述,根据主机而定,此更新可按循序或无序(混乱)次序记录逻辑单位。最后,会因更新区块已满或一些其它原因而关闭更新区块以接收进一步更新。当更新区块(区块2)关闭时,会将驻存在更新区块或原始区块(区块1)上的逻辑单位的当前版本合并在新的区块(区块3)上,以形成逻辑群组的新的原始区块。此实例显示更新区块在扇区B和D中含有逻辑单位的较新版本。为了方便,图中将扇区B和D显示在区块2中未必是其记录的位置,而是对准其在区块1中的原始位置。
在合并操作中,会按循序次序将原来驻存在区块1的逻辑群组的所有逻辑单位的当前版本记录在合并区块(区块3)中。因此,会先从区块1将扇区A的逻辑单位复制到区块3,接着再从区块2将扇区B复制到区块3。在此实例中,在从区块1将扇区C的逻辑单位复制到区块3时,区块3的缺陷将导致编程失败。
一种处置编程失败的方式是在全新的区块(区块4)上重新启动合并程序。因此,会将扇区A、B、C、D复制在区块4上,然后丢弃缺陷区块3。然而,这将表示执行两个串联的合并操作,结果造成复制多达两个充满逻辑单位的区块。
存储器装置具有完成特定操作的特定时间容限。例如,在主机写入存储器装置时,会预计写入操作在指定的时间内完成,已知为「写入等待时间」。当存储器装置,例如存储器卡,正忙于写入主机的数据时,会发送信息「BUSY(忙碌)」状态给主机。如果「BUSY」状态持续超过写入等待时间的长度,主机会使写入操作逾时,然后对写入操作登录例外或错误。
图29示意性说明具有允许足够时间完成写入(更新)操作和合并操作的时序或写入等待时间的主机写入操作。主机写入操作具有写入等待时间Tw,其可提供足够完成写入主机数据到更新区块的更新操作972的时间(图29(A))。如先前在区块管理系统所述,对更新区块的主机写入可触发合并操作。因此,时序还允许除更新操作972之外的合并操作974(图29(B))。然而,必须重新启动合并操作以响应失败的合并操作将会花费太多时间并超过指定的写入等待时间。
根据本发明的另一方面,在具有区块管理系统的存储器中,在时间紧要的存储器操作期间,区块中的编程失败可通过继续中断区块(breakout block)中的编程操作来处置。稍后,在较不紧要的时间,可将中断前记录在失败区块中的数据传送到其它可能也是中断区块的区块。接着即可丢弃失败的区块。以这种方式,在遇到缺陷区块时,不会因必须立刻传送缺陷区块中存储的数据而损失数据且超过指定的时间限制,即可加以处理。此错误处置对于垃圾收集操作尤其重要,因此在紧要时间期间不需要对一崭新的区块重复进行整个操作。其后,在适当时间,通过重新定位到其它区块,即可挽救缺陷区块的数据。
图30说明根据本发明一般方案的编程失败处置的流程图。
步骤1002将非易失性存储器组织成区块,将各区块划分成可一起擦除的存储器单位,各存储器单位可存储一逻辑单位的数据。
编程失败处置(第一阶段)步骤1012在第一区块中存储一连串逻辑单位的数据。
步骤1014响应于存储一些逻辑单位后在第一区块的存储失败,在作为第一区块的中断区块的第二区块中存储后续的逻辑单位。
编程失败处置(最后阶段)步骤1020响应于预定义的事件,将存储在第一区块的逻辑单位传送到第三区块,其中第三区块和第二区块可以相同或不同。
步骤1022丢弃第一区块。
图31A说明编程失败处置的一实施例,其中第三(最后的重新定位)区块和第二(中断)区块不同。在阶段I期间,会在第一区块上记录一连串的逻辑单位。如果逻辑单位是来自主机写入,则可将第一区块看作更新区块。如果逻辑单位是来自压缩操作的合并,则可将第一区块看作重新定位区块。如果在某个点在区块1中遇到编程失败,则可提供当作中断区块的第二区块。在区块1和后续逻辑单位中记录失败的逻辑单位会被记录在中断区块上。以这种方式,不需要额外的时间来取代失败的区块1和驻存其上的数据。
在中间阶段II中,可在区块1和区块2之间取得序列中所有的已记录逻辑单位。
在最后阶段III中,会将逻辑单位重新定位到可当作重新定位区块的区块3,以取代失败的区块1和驻存其上的数据。因此,可挽救已失败区块中的数据,然后再丢弃失败的区块。会安排最后阶段的时间,使其不会和任何同时的存储器操作的时序冲突。
在此实施例中,重新定位区块3和中断区块2有所区分。这在中间阶段期间已经以附加的逻辑单位记录中断区块时会很方便。因此,中断区块已经变成更新区块,可能不适合将缺陷区块1的逻辑单位重新定位到其中。
图31B说明编程失败处置的另一实施例,其中第三(最后的重新定位)区块和第二(中断)区块相同。阶段I和II和图31A所示的第一实施例相同。然而,在阶段III中,会将缺陷区块1的逻辑单位重新定位到中断区块2。这在未用先前写入操作的原始序列以外的附加逻辑单位记录中断区块2时会很方便。以这种方式,存储讨论中的逻辑单位所需的区块最少。
合并期间的编程失败处置的实施例编程失败处置在合并操作期间尤其重要。正常的合并操作可将驻存在原始区块和更新区块中的逻辑群组的所有逻辑单位的当前版本合并到合并区块。在合并操作期间,如果在合并区块中发生编程失败,则会提供另一个当作中断合并区块的区块,以接收其余逻辑单位的合并。以这种方式,不必复制逻辑单位一次以上,而仍可在正常合并操作指定的期间内完成例外处理的操作。在适当时间,将群组所有未处理完成的逻辑单位合并到中断区块中,即可完成合并操作。适当时间将是在当前主机写入操作以外的一些其它有时间执行合并时期的期间。一个此种适当时间是在另一个其中有更新但无关联的合并操作的主机写入期间。
实质上,可将编程失败处置的合并看作以多阶段来实施。在第一阶段中,在发生编程失败后,会将逻辑单位合并到一个以上区块中以避免合并各逻辑单位一次以上。在适当时间会完成最后阶段,其中会将逻辑群组合并到一个区块中,优选通过按循序次序将所有逻辑单位收集到中断合并区块中。
图32A说明导致合并操作的初始更新操作的流程图。
步骤1102将非易失性存储器组织成区块,将各区块划分成可一起擦除的存储器单位,各存储器单位可存储一逻辑单位的数据。
步骤1104将数据组织成复数个逻辑群组,各逻辑群组为可存储在区块中的逻辑单位的群组。
步骤1112接收封装在逻辑单位中的主机数据。
步骤1114根据第一次序在第一区块中存储逻辑群组的逻辑单位的第一版本,建立逻辑群组的原始区块。
步骤1116根据第二次序在第二区块中存储包括逻辑群组的逻辑单位的后续版本,建立逻辑群组的更新区块。
步骤1119在上述部分的预定事件,执行垃圾收集以在各种区块中收集逻辑单位的当前版本,且将其重新记录到新的区块。
图32B说明根据本发明优选实施例的多阶段合并操作的流程图。
合并失败处置(阶段I)错误处置的合并,阶段I操作1120包含步骤1122和步骤1124。
步骤1122以类似于第一次序的次序在第三区块中存储所述逻辑群组的逻辑单位的当前版本,以建立逻辑群组的合并区块。
步骤1124响应于合并区块的存储失败,以类似于第一次序的次序在第四区块中存储所述第三区块没有的逻辑群组的逻辑单位,以提供中断合并区块。
由于已将区块1和区块2中的数据传送到区块3和区块4,因此可擦除区块1和区块2以释放空间。在优选实施例中,可立即释放区块2到EBL(已擦除的区块列表,见图18)再予以使用。区块1只能在以下的条件下释放如果其为关闭的更新区块且其中有对应的GAT条目指向的另一个区块。
实质上,区块3会变成逻辑群组的原始区块,而区块4变成区块3的取代循序更新区块。
在完成阶段I合并后,存储器装置通过释放BUSY信号来发送信息给主机。
中间操作(阶段II)阶段II,即中间操作1130,可在阶段III合并操作1140之前发生。如步骤1132、1134、1136中任一者所提出般,可能会有数种可能的情况。
步骤1132或是在逻辑群组的写入操作中,写入作为更新区块的第四区块(中断合并区块)。
如果主机写入讨论中的逻辑群组,则区块4(其为中断合并区块且其此时已是取代循序更新区块)将用作正常更新区块。根据主机写入而定,其可维持循序或变成混乱状态。作为更新区块,其将在某个点触发关闭另一个混乱区块,如先前的优选实施例所述。
如果主机写入另一个逻辑群组,则直接进行到阶段III操作。
步骤1134或是在读取操作中,读取其中第三区块为逻辑群组原始区块和第四区块为更新区块的存储器。
这时,会从作为逻辑群组的原始区块的区块3读取扇区A和B的逻辑单位,且从作为群组的更新区块的区块4读取扇区C和D的逻辑单位。由于从区块3只能读取扇区A和B,将无法存取其中编程失败的页,且无法存取其后未写入的部分。虽然尚未更新快闪存储器中的GAT目录和其仍指向作为原始区块的区块1,但不会从中读取任何数据,且此区块本身已在早先擦除。
另一种可能性是主机读取逻辑群组中的逻辑单位。这时,会从作为逻辑群组的原始区块的区块3读取扇区A和B的逻辑单位,且从作为群组的循序区块的区块4读取扇区C和D的逻辑单位。
步骤1136或在上电初始化中,通过扫描其中内容以重新识别第一到第四区块中的任一项。
中间阶段的另一个可能性是关闭存储器装置的电源,然后重新启动。如上述,在上电初始化期间,会扫描配置区块列表中的区块(要使用的擦除集区区块,见图15和图18)以识别逻辑群组中已成为特殊状态原始区块(区块3)和关联的循序更新区块(区块4)的缺陷合并区块。中断区块(区块4)的第一逻辑单位中的旗标将指示关联的区块是已遭受程序错误的原始区块(区块3)。通过咨询区块目录(GAT),即可定位区块3。
在一实施例中,会将旗标编程到中断合并区块(区块4)的第一逻辑单位。这可协助指示逻辑群组的特殊状态即,其已经合并成两个区块,即,区块3和区块4。
使用旗标以识别具缺陷区块的逻辑群组的一个替代方法是,利用不像原始区块应为已满的特性(除非错误发生在最后的页,且最后的页没有ECC错误)检测在扫描期间是缺陷的区块。还有,根据实施例而定,其中会有有关存储在快闪存储器中控制数据结构的失败群组/区块的信息记录,而不只是在写入中断合并区块(区块4)的第一扇区的标头区中的旗标。
合并完成(阶段III)步骤1142响应于预定义事件,对于在阶段I后未进一步记录第四区块时的第一种情况,以类似于所述第一次序的次序在其中存储所述逻辑群组的所有未处理完成的逻辑单位的当前版本;对于在阶段I后已进一步记录第四区块时的第二种情况,将第三和第四区块合并为第五区块。
步骤1144之后,对于第一种情况,操作存储器时,以合并的第四区块作为逻辑群组的原始区块;对于第二种情况,操作存储器时,以第五区块作为逻辑群组的原始区块。
只要有任何不会违反任何指定时间限制的机会,即可执行阶段III中的最后合并。一个优选情况是,在其中有另一个未附带合并操作的逻辑群组的更新操作时,「挂附(piggy-back)」在下一个主机写入时槽上。如果另一个逻辑群组的主机写入触发本身的垃圾收集,则将使阶段III合并延后。
图33说明多阶段合并操作的第一和最后阶段的实例时序。主机写入等待时间是具有持续期间Tw的各主机写入时槽的宽度。主机写入1是简单的更新,且逻辑群组LG1中第一组逻辑单位的当前版本会被记录在关联的更新区块上。
在主机写入2,会在逻辑群组LG1上发生更新,导致更新区块被关闭(如,已满)。会提供新的更新区块以记录其余的更新。提供新的更新区块会触发垃圾收集,而导致关于LG4的合并操作,以便再循环要再使用的区块。LG4群组的当前逻辑单位会按循序次序记录在合并区块上。合并操作可继续进行直到在合并区块中遭遇缺陷为止。然后调用阶段I合并,其中合并操作在中断合并区块上继续。同时,LG4(阶段III)的最后合并会等待下一个机会。
在主机写入3,也会发生逻辑群组LG2的逻辑单位的写入以触发LG2的合并。这表示已经完全利用时槽。
在主机写入4,操作只是将LG2的一些逻辑单位记录到其更新区块。时槽中剩余的时间可提供执行LG4的最后合并的机会。
未将中断合并区块转换为更新区块的实施例图34A和图34B分别说明图28和图31的实例适用的多阶段合并的阶段I和阶段III操作的第一案例。
图34A说明其中中断合并区块并非用作更新区块而是用作其合并操作已经中断的合并区块的情况。尤其,图34A是指图33所示的主机写入#2,其中主机写入属于逻辑群组LG1的逻辑单位的更新,且在此期间,此操作也会触发和另一个逻辑群组LG4关联的区块的合并。
原始区块(区块1)和更新区块(区块2)的形成方式和图28的实例相同。同样地,在合并操作期间,已知合并区块(区块3)在合并扇区C的逻辑单位时有缺陷。然而,不像图28所示的重新合并方案,本多阶段方案可在新提供的可当作中断合并区块的区块(区块4)上继续合并操作。因此,在阶段I合并操作中,已在合并区块(区块3)中合并扇区A和B中的逻辑单位。当合并区块中发生编程失败时,会循序地将扇区C和D中其余的逻辑单位复制到中断合并区块(区块4)。
如果主机原来在第一逻辑群组中写入更新会触发和第二逻辑群组关联的区块的合并操作,则会将第一逻辑群组的更新记录到第一逻辑群组的更新区块(通常为新的更新区块)。这时,中断合并区块(区块4)不会用来记录合并操作之外的任何更新数据且会维持必须完成的中断合并区块。
由于区块l和区块2中的数据现在完全包含在另一个区块(区块3和区块4)中,因此可将其擦除以便再循环。地址表(GAT)会被更新以指向区块3,作为逻辑群组的原始区块。更新区块的目录信息(在ACL中,见图15和图18)也会被更新,以指向已成为逻辑群组(如,LG4)的循序更新区块的区块4。
结果,合并的逻辑群组并未局限在一个区块中,而是分布在缺陷合并区块(区块3)和中断合并区块(区块4)上。此方案的重要特点是群组中的逻辑单位只会在此阶段期间合并一次,但却将合并散布在一个以上区块的上。以这种方式,可在正常指定的时间内完成合并操作。
图34B说明始于图34A的多阶段合并的第三和最后阶段。如结合图33所述,会在第一阶段后的适宜时间(例如在随后不会触发伴随的合并操作的主机写入期间)执行阶段III合并。尤其,图34B是指其中发生如图33所示的主机写入#4的时槽。在所述期间中,主机写入可更新属于逻辑群组LG2的逻辑单位而不会触发另一个额外的合并操作。因此,有利于将时槽中剩余的时间用于阶段III操作,以完成逻辑群组LG4的合并。
此操作可将还不在中断区块中的LG4的所有未处理完成的逻辑单位合并到中断区块。在此实例中,这表示会从区块3按逻辑上循序次序将扇区A和B复制到中断区块(区块4)。由于区块中逻辑单位的绕回方案并使用页标记(见图3A),即使实例说明在区块4中,扇区A和B会被记录在扇区C和D之后,但仍会将已记录的序列考虑为等同于A、B、C、D的循序次序。根据实施例而定,优选从区块3取得要复制的未处理完成的逻辑单位的当前版本,因其已经是合并的形式,不过也可从尚未被擦除的区块1和区块2中收集。
在中断区块(区块4)上完成最后合并后,会将其指定为逻辑群组的原始区块并跟着更新合适的目录(如,GAT,见图17A)。同样地,会将失败的物理区块(区块3)标示为不良并将其排除。其它区块,区块1和区块2,将被擦除和再循环。同时,会将LG2的更新记录在和LG2关联的更新区块中。
将中断合并区块变成更新区块的实施例图35A和图35B分别说明图28和图33的实例适用的多阶段合并的阶段I和阶段III操作的第二案例。
图35A说明其中维持中断合并区块为接收主机写入的更新区块而非合并区块的例子。这适用于如更新逻辑群组LG4的主机写入,且在此程序中,也会触发相同逻辑群组的合并。
和图34A的案例一样,将区块1与区块2合并于区块3中会继续进行,直到在处理扇区C时遇到编程失败。然后会在中断合并区块(区块4)上继续合并。在中断区块(区块4)中合并未处理完成的逻辑单位(如,在扇区C和D中)后,并不在阶段III中等待完成其中的逻辑群组合并,而是维持中断区块为更新区块。此案例尤其适于其中主机写入可更新逻辑群组和触发相同逻辑群组的合并的情况。在此实例中,这可将逻辑群组LG4的主机更新的记录记录在中断合并区块(区块4)中,而非记录到新的更新区块。此更新区块(先前为中断合并区块(区块4))可根据其中记录的主机数据而为循序或变成混乱。在所示的实例中,区块4已变成混乱,因扇区C中逻辑单位的后续较新版本使得区块4中的先前版本被废弃。
在中间阶段期间,会将区块3看作LG4的原始区块,且区块4会是关联的更新区块。
图35B说明始于第二例中图35A的多阶段合并的第三和最后阶段。如结合图33所述,会在第一阶段后的适宜时间执行阶段III合并,如在随后不会触发伴随的合并操作的主机写入期间。在所述期间中,主机写入可更新属于逻辑群组的逻辑单位而不会触发另一个额外的合并操作。因此,有利于将时槽中剩余的时间用于阶段III操作,以完成逻辑群组LG4的合并。
然后从区块3和区块4将逻辑群组LG4的垃圾收集到新的合并区块(区块5)。然后将区块3标示为不良,将区块4再循环,且新的合并区块(区块5)将变成逻辑群组LG4的新的原始区块。其它区块,区块1和区块2,也会被擦除和再循环。
阶段性编程失败处置的其它实施例图31A、31B、34A、34B、35A和35B中所述的实例适用于优选的区块管理系统,其中各物理区块(元区块)仅存储属于相同逻辑群组的逻辑单位。本发明同样适用于其它其中并无逻辑群组到物理区块对准的区块管理系统,如WO 03/027828和WO 00/49488中所揭示的区块管理系统。在这些其它系统中实施阶段性编程失败处置方法的一些实例如图36A、36B和36C所示。
图36A说明套用于主机写入触发关闭更新区块且更新区块为循序时的情况的阶段性程序错误处置方法。此例中的关闭是通过以下方式来完成将原始区块2的其余的有效数据(B和C)复制到循序更新区块3。在数据部分C编程起点的编程失败的例子中,会将部分C编程到保留的区块4。然后可将新的主机数据写入新的更新区块5(未显示)。此方法的阶段II和III和混乱区块关闭的情况相同。
图36B说明在更新区块的更新的情况中可应用(局部区块系统)的阶段性程序错误处置方法。在此情况中,会将逻辑群组存储在原始区块1和其它的更新区块中。合并操作包括将原始区块1和其它更新区块2的数据复制到更新区块(根据一些规则选定,图中的区块3)之一。和已经说明的主要情况不同之处在于区块3已经部分被写入。
图36C说明处理垃圾收集操作的阶段性程序错误,或不支持映射到元区块的逻辑群组的存储器区块管理系统中的清除。此种存储器区块管理(循环存储)系统是在WO03/027828A1中说明。循环存储系统明显的特点是不对单一逻辑群组配置区块。其中支持元区块中控制数据的多个逻辑群组。垃圾收集涉及从部分废弃的区块,将可能没有任何关系(随机逻辑区块地址)的有效数据扇区取到其中可能已经有些数据的重新定位区块。如果重新定位区块在操作期间变满,则将打开另一个区块。
无序更新区块索引在上文关于混乱区块索引和结合图16A-16E的段落中,CBI扇区可用来存储可记录随机存储在混乱或无序更新区块中的逻辑扇区位置的索引。
根据本发明的另一方面,在具有支持具无序逻辑单位的更新区块的区块管理系统的非易失性存储器中,缓冲存储在RAM中的无序更新区块的逻辑单位的索引被定期存储在非易失性存储器中。在一实施例中,将索引存储在专用于存储索引的区块中。在另一实施例中,会将索引存储在更新区块中。在另一实施例中,将索引存储在各逻辑单位的标头中。在另一方面,在上一个索引更新之后但在下一个索引更新之前写入的逻辑单位会将其索引信息存储在各逻辑单位的标头中。以这种方式,在电源中断后,不必在初始化期间执行扫描,即可确定最近写入的逻辑单位的位置。在另一方面中,将区块管理成部分循序和部分无序指向一个以上逻辑子群组。
在预定触发事件后存储在CBI区块中CBI扇区的索引指针根据结合图16A-16E所述的方案,会将混乱区块中最近写入扇区的列表保留在控制器RAM中。只在与给定混乱区块关联的逻辑群组的预定数量的写入后,含有最新索引信息的CBI扇区才被写入快闪存储器(CBI区块620)。以这种方式,可减少CBI区块更新的数量。
在逻辑群组中CBI扇区的下一个更新之前,会将逻辑群组中最近写入扇区的列表保留在控制器RAM中。此列表在存储器装置遭遇电源关闭时将会遗失,但可在电源启动后的初始化中通过扫描更新区块加以重建。
图37说明在每N个扇区写入相同的逻辑群组后将CBI扇区写入关联的混乱索引扇区区块的时间安排实例。此实例显示两个同时进行更新的逻辑群组LG3和LG11。起初,会将LG3的逻辑扇区按循序次序存储在原始区块中。群组中逻辑扇区的更新会按照主机指定的次序被记录在关联的更新区块上。此实例显示混乱更新序列。同时,也会以和其更新区块相同的方式更新逻辑群组LG11。在每一逻辑扇区写入后,会将其在更新区块中的位置保留在控制器RAM中。在每一预定的触发事件后,会以混乱索引扇区的形式将更新区块中逻辑扇区的当前索引写入非易失性混乱索引扇区区块。例如,预定的触发事件可发生在每N个写入之后,其中N为3。
虽然提供的实例有关作为扇区的数据逻辑单位,但熟习本技术者应明白,逻辑单位也可以是一些其它集合体,如含有一个扇区或一组扇区的页。还有,循序区块中的第一页不一定是逻辑页0,因为绕回的页标记可能是第一页。
在预定触发事件后存储在混乱更新区块中CBI扇区的索引指针在另一实施例中,会在其中每N个写入后,将索引指针存储在混乱更新区块本身中的专用CBI扇区中。此方案和上述其中也将索引存储在CBI扇区中的实施例相同。其中的差异在于上述实施例中,CBI扇区被记录在CBI扇区区块中,而不是更新区块本身中。
此方法是基于将所有混乱区块索引信息保持在混乱更新区块本身中。图38A、38B和38C分别说明同样按照三个不同阶段存储CBI扇区的更新区块的状态。
图38A说明直到在预定数量的写入后在其中记录CBI扇区时的更新区块。在此实例中,在主机已经循序写入逻辑扇区0-3后,接着将会发出再次写入逻辑扇区1的另一版本的指令,因而破坏数据写入的循序序列。然后实施CBI扇区中载送的混乱区块索引,将更新区块转换为混乱更新区块。如上述,CBI是含有混乱区块的所有逻辑扇区的索引的索引。例如,第0个条目代表第0个逻辑扇区的更新区块的偏移,类似地,第n个条目代表第n个逻辑扇区的偏移。可将CBI扇区写入更新区块中的下一个可用位置。为了避免频繁的快快闪存储器取,会在每N个数据扇区写入后写入CBI扇区。在此实例中,N为4。如果这时损失电源,则最后写入的扇区成为CBI扇区,并将此区块看作混乱更新区块。
图38B说明图38A的进一步在索引扇区后在其中记录逻辑扇区1、2和4的更新区块。逻辑扇区1和2的较新版本可取代先前在更新区块中记录的旧版本。在这时的电源周期的情况中,必须先找到最后写入的扇区,然后必须扫描多达N个扇区,以定位最后写入的索引扇区和最近写入的数据扇区。
图38C说明图38B的具有另一写入以触发索引扇区下一个记录的逻辑扇区的更新区块。在另N个(N=4)扇区写入后的相同更新区块可记录CBI扇区的另一个当前版本。
此方案的优点是不需要分离的CBI区块。同时还不必担心物理快闪扇区的额外开销数据区是否大到足以容纳混乱更新区块中有效扇区的索引所需条目的数量。然后,混乱更新区块含有所有的信息,且地址转换不需要外部的数据。这可让算法比较简单,其中可缩减有关CBI区块压缩的控制更新数;也可让串接控制更新比较简短。(请见上文有关CBI区块管理的部分)。
关于存储在混乱更新区块中数据扇区标头的最近写入的扇区的信息根据本发明的另一方面,会在每N个写入后,将记录在区块中的逻辑单位的索引存储在非易失性存储器中,且将有关中间写入的逻辑单位的当前信息存储在各逻辑单位写入的额外开销部分。以这种方式,在电源重新启动后,不必扫描区块,即可从区块中最后写入逻辑单位的额外开销部分快速取得有关从上一个索引更新后写入的逻辑单位的信息。
图39A说明存储在混乱更新区块中各数据扇区标头的中间写入的中间索引。
图39B说明在写入的各扇区标头中存储中间写入的中间索引的实例。在此实例中,在写入四个扇区LS0-LS3后,会写入CBI索引作为区块中的下一个扇区。其后,会将逻辑扇区LS′1、LS′2和LS4写入区块。每次,标头都会存储从上一个CBI索引后写入的逻辑单位的中间索引。因此,LS′2中的标头将具有提供上一个CBI索引和LS′1的偏移(即,位置)的索引。类似地,LS4中的标头将具有提供上一个CBI索引和LS′1和LS′2的偏移(即,位置)的索引。
最后写入的数据扇区永远含有与多达N个最后写入的页相关的信息(即,一直到最后写入的CBI扇区)。只要电源重新启动时,上一个CBI索引可提供逻辑单位在CBI索引扇区之前写入的索引信息,且随后写入的逻辑单位的索引信息可在最后写入的数据扇区的标头中找到。这具有如下优点在初始化时不必为其后写入的扇区扫描区块以确定其位置。
在数据扇区的标头中存储中间索引信息的方案同样适用于无论CBI索引扇区是存储在更新区块本身或在分离的CBI扇区区块中,如前文所述。
存储在混乱更新区块中数据扇区标头的索引指针在另一实施例中,会将整个CBI索引存储在混乱更新区块中各数据扇区的额外开销部分。
图40说明在混乱更新区块的各数据扇区标头中存储的混乱索引字段中的信息。
扇区标头的信息容量有限,因此可将由任何单一扇区所提供的索引范围设计为层级索引方案的一部分。例如,存储器特定平面内的扇区可提供索引给仅在所述平面内的扇区。还有,可将逻辑地址的范围划分成一些子范围,以允许采用间接索引方案。例如,如果可将有64个逻辑地址的扇区存储在一个平面中,则每一扇区可以有3个字段用于扇区偏移值,每一字段能够存储4个偏移值。第一字段可定义逻辑偏移范围0-15、15-31、32-47、和48-63内最后写入扇区的物理偏移。第二字段可定义在其相关范围内各4个扇区的4个子范围的物理偏移值。第三字段可定义在其相关子范围内4个扇区的物理偏移值。因此,通过读取多达3个扇区的间接偏移值,即可确定混乱更新区块内逻辑扇区的物理偏移。
此方案的优点也是不需要分离的CBI区块或CBI扇区。然而,这却只适用于物理快闪扇区的额外开销数据区大到足以容纳混乱更新区块中有效扇区索引所需的条目数量时。
混乱更新区块的逻辑群组内受限的逻辑范围在逻辑群组内,可缩减可无序写入的扇区的逻辑范围。此技术的主要优点如下由于只需要读取一个多重扇区页(在多个芯片的例子中,可以并行读取页),即可取得目的地页的所有数据(假设来源和目的地已对准,若未对准,则需要另一个读取),使得循序写入数据的复制能够更快速地完成,因此范围外的扇区在原始区块中保持循序写入,且垃圾收集操作能在更短的时间内完成。还有,使用芯片上的副本特点,可将循序数据从来源复制到目的地,而不用在控制器之间来回传送数据。如果源数据已经分散,如混乱区块中所发生的,则需要每一扇区读取多达一个页,才能收集所有要写入目的地的扇区。
在一实施例中,实际上并不将逻辑范围限制在某个数量的扇区,而是经由限制CBI的数量来完成(只限制大群组/元区块的混乱范围很合理,因其需要多个混乱区块索引才能涵盖整个逻辑群组的范围)。例如,如果元区块/群组有2048个扇区,则其将需要多达8个CBI扇区,各涵盖一个子群组256个扇区的连续逻辑范围。如果将CBI的数量限制为4,则混乱区块可用来写入多达4个子群组的扇区(其中任何一个)。因此,允许逻辑群组有多达4个部分或完全混乱子群组,且最少有4个子群组将维持完全循序。如果一个混乱区块有4个和其关联的有效CBI扇区,和主机写入在这些CBI扇区范围外(混乱子群组)的扇区,则应合并和关闭混乱逻辑群组。但是这却极不可能发生,因为在真实的应用中,主机在2048个扇区的范围(逻辑群组)内不需要多于4个256个扇区的混乱范围(子群组)。结果,在正常的情况中,垃圾收集也不会受到影响,但限制规则的防范却形成垃圾收集太长(会触发主机的逾时)的极端情况。
部分循序混乱更新区块的索引当循序更新区块在将区块转换为混乱管理模式之前被部分写入时,逻辑群组的循序更新扇区的全部或部分可继续被处理成已经循序更新,且可将混乱更新管理仅应用于逻辑群组的地址范围的子集。
控制数据完整性与管理存储在存储器装置中的数据可能会因为电源中断或特定存储器位置变成有缺陷而成为已毁损。如果碰到存储器区块缺陷,则将数据重新定位到不同的区块且将缺陷区块丢弃。如果错误不会扩大,则可通过和数据一起存储的错误校正码(ECC)在执行中进行校正。然而,还是会有ECC无法校正已毁损数据的时候。例如,当错误位的数量超过ECC的容量时。这对于如与存储器区块管理系统关联的控制数据的关键数据是无法接受的。
控制数据的实例为目录信息和与存储器区块管理系统关联的区块配置信息,如结合图20所述。如上述,可将控制数据维持在高速RAM和较慢的非易失性存储器区块中。任何经常改变的控制数据会被维持在具有定期控制写入的RAM中,以更新存储在非易失性元区块中的同等信息。以这种方式,不必经常存取,即可将控制数据存储在非易失性但较慢的快闪存储器中。如图20所示GAT、CBI、MAP、和MAPA的控制数据结构的层级会被维持在快闪存储器中。因此,控制写入操作造成RAM中控制数据结构的信息可更新快闪存储器中同等的控制数据结构。
关键数据复制根据本发明的另一方面,如部分或全部控制数据的关键数据如果被维持在复制项中,则保证额外等级的可靠性。复制的执行方式对于采用两次编程(two-pass)编程技术以连续编程相同组存储器单元的多位的多状态存储器系统而言,第二次编程中的任何编程错误都无法毁损第一次编程建立的数据。复制还有助于检测写入中止、检测误测(即,两个副本有良好的ECC但数据不同),且可增加额外等级的可靠性。若干数据复制的技术均已考虑。
在一实施例中,在早先编程过程中编程给定数据的两个副本后,后续的编程过程可避免编程用于存储所述两个副本中至少一个的存储器单元。以这种方式,在后续编程过程在完成之前中止和毁损早先编程的数据时,所述两个副本中至少一个也不会受到影响。
在另一实施例中,某一给定数据的两个副本会被存储在两个不同的区块中,而且所述两个副本中至多仅有其中一个的存储器单元会在后面的编程过程中被编程。
在另一实施例中,在一编程过程中存储某一给定数据的两个副本之后,便不再对用于存储所述两个副本的存储器单元组实施任何进一步的编程。在所述存储器单元组的最终编程过程中来编程所述两个副本便可达成此目的。
在另一实施例中,可在二进制编程模式中将某一给定数据的所述两个副本编程到多状态的存储器中,使得不会对所述已编程的存储器单元进行任何进一步的编程。
在另一实施例中,对于采用两次编程技术以连续编程相同组存储器单元的多位的多状态存储器系统而言,会采用容错码以编码多个存储器状态,使早先编程过程所建立的数据不会受后续编程过程中错误的影响。
在各存储器单元可存储一位以上数据的多状态存储器中会引发数据复制的复杂性。例如,一个4状态存储器可以两个位来表示。一个现有技术是使用2次编程来编程此种存储器。第一位(下页位)可由第一次编程进行编程。其后,可在第二次编程中编程相同单元以代表所要的第二位(上页位)。为了不要改变第二次编程中第一位的值,会使第一位的存储器状态表示取决于第二位的值。因此,在第二位的编程期间,如果因电源中断或其它原因而发生错误或造成不正确的存储器状态,那么也会毁损第一位的值。
图41A说明当各存储器单元存储两个位的数据时,4状态存储器阵列的临界电压分布。此四个分布代表四个存储器状态「U」、「X」、「Y」和「Z」的总体。在编程存储器单元之前,会先将其擦除到其「U」或「未写入」状态。在存储器单元逐渐被编程时,会累进达到存储器状态「X」、「Y」和「Z」。
图41B说明现有使用格雷码(Gray code)的2次编程方案。此四个状态可以两个位表示,即,下页位和上页位,如(上页位,下页位)。对于要并行编程的单元的页,实际上有两个逻辑页逻辑下页和逻辑上页。第一编程过程只会编程逻辑下页。通过合适的编码,不用重设逻辑下页,单元相同页上的后续第二编程过程会编程逻辑上页。一般使用的程序代码是格雷码,其中只有一个位会在转换到相邻的状态时改变。因此,此程序代码具有如下优点对于错误校正的要求较少,因只涉及一个位。
一般使用格雷码的方案是假设「1」代表「未编程」条件。因此,已擦除的存储器状态「U」可表示为(上页位,下页位)=(1,1)。在编程逻辑下页的第一次编程中,任何存储数据「0」的单元将因此具有其从(x,1)到(x,0)的逻辑状态转换,其中「x」代表上位的「任意(don′t care)」值。然而,由于上位尚未被编程,因此为了一致,可将「x」标示为「1」。(1,0)逻辑状态可通过编程单元为存储器状态「X」来表示。也就是说,在第二次编程之前,下位值「0」可以表示为存储器状态「X」。
执行第二次编程可存储逻辑上页的位。只有这些需要上页位值「0」的单元才会被编程。在第一次编程后,页中的单元在逻辑状态(1,1)或(1,0)。为了保存第二次编程中下页的值,必须区分下位值「0」或「1」。对于从(1,0)到(0,0)的转换,会将讨论中的存储器单元编程为存储器状态「Y」。对于从(1,1)到(0,1)的转换,会将讨论中的存储器单元编程为存储器状态「Z」。以这种方式,在读取期间,通过确定在单元中编程的存储器状态,即可解码下页位和上页位。
然而,格雷码的2次编程方案在第二次编程错误时会成为问题。例如,在下位为「1」时将上页位编程为「0」,将造成(1,1)转换成(0,1)。这需要将存储器单元累进从「U」编程通过「X」和「Y」而到「Z」。如果在完成编程前发生电源中断,则存储器单元将停止于转换存储器状态之一,如「X」。在读取存储器单元时,会将「X」解码为逻辑状态(1,0)。这对上位和下位造成不正确的结果,因其应为(0,1)。类似地,如果编程在达到「Y」时受到中断,其将对应于(0,0)。虽然上位现在是正确的,但下位还是错的。
因此,可以看出上页编程的问题可毁损已经在下页的数据。尤其当第二次编程涉及在中间存储器状态上通过时,程序中止会使编程停止于所述存储器状态,导致解码不正确的下页位。
图42说明通过存储复制的各扇区以防卫关键数据的方式。例如,可将扇区A、B、C、和D存储在复制副本中。如在一个扇区副本中有数据毁损,则可以读取另一个来取代。
图43说明其中通常将复制扇区存储在多状态存储器的非稳固性。如上述,在实例的4状态存储器中,多状态页实际上包括分别在两次编程中进行编程的逻辑下页和逻辑上页。在所示的实例中,页为四个扇区宽。因此,扇区A和其复制会同时被编程在逻辑下页中,类似地,对于扇区B和其复制也是如此。然后在逻辑上页中后续的编程的第二次编程中,会同时编程扇区C,C,且对于扇区D,D也是如此。如果在编程扇区C、C的中间发生程序中止,则会毁损下页中的扇区A,A。除非,在上页编程之前先读取并缓冲下页扇区,否则一旦毁损将无法复原。因此,同时存储两个关键数据的副本,如扇区A,A,无法防止其为其上页中后续扇区C、C的有问题的存储所毁损。
图44A说明将关键数据错开的复制副本存储到多状态存储器的一实施例。基本上,会以和图43的相同方式存储下页,即,扇区A,A和扇区B,B。然而,在上页编程中,扇区C和D会和其复制交错成C、D、C、D。如果支持局部页编程,则可同时编程两个扇区C的副本,且对于两个扇区D的副本也是如此。如果两个扇区C的程序遭到中止,则只会在扇区A的一个副本和扇区B的一个副本上毁损下页。另一个副本将维持不受影响。因此,如果存储在第一次编程中的关键数据有两个副本,则其将不会同时经受后续的第二次编程。
图44B说明只将关键数据的复制副本存储到多状态存储器的逻辑上页的另一实施例。这时,未使用下页的数据。关键数据和其复制,如扇区A、A和扇区B、B只会被存储到逻辑上页。以这种方式,如果有程序中止,则可将关键数据再写入另一个逻辑上页,而下页数据的任何毁损将无关紧要。此办法基本上使用各多状态页一半的存储容量。
图44C说明以多状态存储器的二进制模式存储关键数据的复制副本的另一实施例。这时,会依二进制模式编程各存储器单元,其中仅将其临界范围分成两个区域。因此,其中只有一次编程,且在发生程序中止时可在不同位置中重新启动编程。此办法也使用各多状态页一半的存储容量。依二进制模式操作多状态存储器是在美国专利第6,456,528B1号中说明,其整个揭示内容在此以参考的方式并入本文中。
图45说明同时将关键数据的复制副本存储到两个不同元区块的另一实施例。如果区块之一变成不可用,则可从另一个区块读取数据。例如,关键数据被包含在扇区A、B、C、D和E、F、G、H和I、J、K、L内。各扇区会被存储在复制中。这两个副本将被同时写入两个不同的区块,区块0和区块1。如果将一个副本写入逻辑下页,则会将另一个副本写入逻辑上页。以这种方式,永远会有编程到逻辑上页的副本。如果发生程序中止,则可将其重新编程到另一个逻辑上页。同时,如果下页已经毁损,则在其它区块中永远会有另一个上页副本。
图46B说明使用容错码同时存储关键数据的复制副本的另一实施例。图46A和图41A同在显示4状态存储器阵列的临界电压分布并显示为图46B的参考。容错码实质上可避免在任何中间状态中转换的任何上页编程。因此,在下页编程的第一次编程中,逻辑状态(1,1)转换为(1,0),如表示为编程已擦除的存储器状态「U」为「Y」。在上页位为「0」的第二次编程中,如果下页位为「1」,则逻辑状态(1,1)转换为(0,1),如表示为编程已擦除的存储器状态「U」为「X」。如果下页位为「0」,则逻辑状态(1,0)转换为(0,0),如表示为编程存储器状态「Y」为「Z」。由于上页编程仅涉及编程为下一个相邻的存储器状态,因此程序中止无法改变下页位。
串行写入关键数据的复制副本优选如上述同时写入。另一个避免同时毁损两个副本的方式是循序写入副本。此方法较慢,但副本本身代表其在控制器检查两个副本时编程是否成功。
图47是说明两个数据副本的可能状态和数据有效性的表格。
如果第一和第二副本没有ECC错误,则可将数据的编程看作完全成功。有效数据可从任一个副本取得。
如果第一副本没有ECC错误,但第二副本有ECC错误,便表示编程在第二副本编程的中间受到中断。第一副本含有有效数据。即使错误为可校正,第二副本数据已不可靠。
如果第一副本没有ECC错误且第二副本已经清空(擦除),便表示编程在第一副本编程停止后但在第二副本开始前受到中断。第一副本含有有效数据。
如果第一副本有ECC错误且第二副本已经清空(擦除),便表示编程在第一副本编程的中间受到中断。即使错误为可校正,第一副本仍含有无效数据。
为了读取维持在复制中的数据,以下技术为优选,因其利用复制副本的存在。读取和比较两个副本。此例中,图47所示两个副本的状态可用来确保没有任何错误误测。
在另一实施例中,控制器只读取一个副本,为了顾及速度和简单性,副本读取优选在两个副本之间轮替。例如,在控制器读取控制数据时,其可读取如副本1,下一个控制读取(任何控制读取)则应来自副本2,然后再是副本1等。以这种方式,即可读取和定期检查两个副本的完整性(ECC检查)。其可减少以下风险无法在因变质的数据保留所导致的时间错误中进行检测。例如,如果通常只读取副本1,则副本2会逐渐变质到其中错误无法为ECC挽救的程度,因而无法再使用第二副本。
先占式数据重新定位如结合图20所述,区块管理系统在其操作期间可在快闪存储器中维持一组控制数据。此组控制数据会被存储在和主机数据相同的元区块中。因此,控制数据本身会受到区块管理,因而会受到更新的影响,且因此也受到垃圾收集操作的影响。
其中还说明控制数据的阶层,其中较低层级中的控制数据更新比较高层级中的频繁。例如,假设每一控制区块有N个要写入的控制扇区,则通常会发生以下控制更新和控制区块重新定位的序列。再次参考图20,每N个CBI更新可填满CBI区块并触发CBI重新定位(再写入)和MAP更新。如果混乱区块遭受关闭,则其也会触发GAT更新。每一GAT更新可触发MAP更新。每N个GAT更新可填满区块和触发GAT区块重新定位。此外,当MAP区块变满时,也会触发MAP区块重新定位和MAPA区块(如果存在的话,否则BOOT区块会直接指向MAP)更新。此外,当MAPA区块变满时,也会触发MAPA区块重新定位、BOOT区块更新和MAP更新。此外,在BOOT区块变满时,将会触发另一个BOOT区块的作用中BOOT区块重新定位。
由于阶层的形成为顶部的BOOT控制数据,接着是MAPA、MAP、然后GAT,因此,在每N3个GAT更新中,将有「串接控制更新」,其中所有的GAT、MAP、MAPA和BOOT区块都会被重新定位。此例中,在因主机写入导致的混乱或循序更新区块关闭造成GAT更新时,也会有垃圾收集操作(即,重新定位或再写入)。在混乱更新区块垃圾收集的情况中,会更新CBI,而这也会触发CBI区块重新定位。因此,在此极端的情况中,必须同时收集大量元区块的垃圾。
从图中可见,阶层的各控制数据区块在取得填充和接受重新定位上有其自己的周期性。如果各控制数据区块进行正常,则将有发生以下情形的时候大量区块的阶段进行整顿,因而触发大量同时涉及所有这些区块的重新定位垃圾收集。许多控制区块的重新定位将会花费很长的时间,因此应加以避免,因为部分主机不容许因大量控制操作所导致的长时间延迟。
根据本发明的另一方面,在具有区块管理系统的非易失性存储器中,可实施存储器区块的「控制垃圾收集」或先占式重新定位,以避免发生大量的更新区块均恰巧同时需要进行重新定位的情形。例如,在更新用于控制区块管理系统操作的控制数据时会发生此情况。控制数据类型的层级可和不同程度的更新次数共存,导致其关联的更新区块需要不同速率的垃圾收集或重新定位。会有一个以上控制数据类型的垃圾收集操作同时发生的特定次数。在极端的情况中,所有控制数据类型的更新区块的重新定位阶段会进行整顿,导致所有的更新区块都需要同时重新定位。
本发明可避免这种不想要的情况,其中当前的存储器操作无论何时均可容纳自发性的垃圾收集操作,更新区块的先占式重新定位可预先在完全填充区块前发生。尤其,会将优先权提供给具有最慢速率的最高阶层数据类型的区块。以这种方式,在重新定位最慢速率区块后,将不再需要另一个相对较长时间的垃圾收集。还有,阶层中较高的较慢速率区块没有太多可触发的重新定位的串接。可将本发明方法看作为了避免讨论中的各种区块的阶段对准,而将某种抖动引入事物的整体混合。因此,只要有机会,即可以先占式的方式重新定位略微不被完全填充的边限的缓慢填充区块。
在具有阶层中较低的控制数据因串接效应而改变快于阶层中较高的控制数据的控制数据层次的系统中,会将优先权提供给阶层中较高的控制数据的区块。一个执行自发性先占式重新定位的机会的实例发生在以下情况当主机写入本身无法触发重新定位,因此可利用其等待时间中的任何剩余时间来进行先占式重新定位操作。一般而言,务必重新定位的区块前的边限是在区块全满前的预定数量的未写入存储器单位。所考虑的是足以加速在完全填充的区块前但又不会过早的重新定位的边限,以免资源浪费。在优选实施例中,预定数量的未写入存储器单位是在一到六个存储器单位之间。
图48说明先占式重新定位存储控制数据的存储器区块的流程图。
步骤1202将非易失性存储器组织成区块,各区块已划分成可一起擦除的存储器单位。
步骤1204维持不同类型的数据。
步骤1206对不同类型的数据指派等级。
步骤1208存储复数个区块中所述不同类型数据的更新,使得各区块实质上存储相同类型的数据。
步骤1210响应于具有少于预定数量的清空存储器单位和具有所述复数个区块中最高阶层数据类型的区块,将所述区块的数据的当前更新重新定位到另一个区块。若未受到中断,到步骤1208。
实施图20所示控制数据的先占式重新定位的实例算法如下如果((没有任何因用户数据而导致的垃圾收集)或(MAP留有6个或更少的未写入扇区)或(GAT留有3个或更少的未写入扇区)则如果(BOOT留有1个未写入扇区)则重新定位BOOT(即,重新定位到区块)否则如果(MAPA留有1个未写入扇区)则重新定位MAPA和更新MAP
否则如果(MAP留有1个未写入扇区)则重新定位MAP否则如果(上一个更新或最大的GAT留有1个未写入扇区)则重新定位GAT否则如果(CBI留有1个未写入扇区)则重新定位CBI否则否则离开因此,先占式重新定位通常在其中未发生任何用户数据垃圾收集时完成。在最糟的情况中,当每一主机写入触发用户数据垃圾收集,但还有足够的时间进行一个区块的自发性重新定位时,一次可执行一个控制区块的先占式重新定位。
由于用户数据垃圾收集操作和控制更新可能和物理错误同时发生,因此,最好具有较大的安全性边限,其是通过事先如在区块还有2个或更多未写入的存储器单位(如,扇区)时,早先进行先占式重新定位或控制的垃圾收集。
虽然已经针对特定实施例说明本发明的各种方面,但应明白,本发明有权受到附加申请专利范围的完整范畴的保护。
权利要求
1.一种在一组织成区块的非易失性存储器中存储数据的方法,其中每一区块已划分成可一起擦除的存储器单位,每一存储器单位用于存储一数据逻辑单位,所述方法包含在一第一区块中存储一连串数据逻辑单位;响应于存储一些所述逻辑单位后所述第一区块处的存储失败,在用作所述第一区块的一中断区块的一第二区块中存储后续的逻辑单位;响应于一预定义事件,将存储在所述第一区块中的所述逻辑单位传送到一第三区块;和丢弃所述第一区块。
2.根据权利要求1所述的方法,其中所述第三区块和所述第二区块相同。
3.根据权利要求1所述的方法,其中所述第三区块和所述第二区块不同。
4.根据权利要求1所述的方法,其中从所述第一区块将所述一些逻辑单位传送到所述第三区块仅涉及其上的所述逻辑单位的当前版本。
5.根据权利要求1所述的方法,其中所述非易失性存储器具有浮栅存储器单元。
6.根据权利要求1所述的方法,其中所述非易失性存储器是快闪EEPROM。
7.根据权利要求1所述的方法,其中所述非易失性存储器是NROM。
8.根据权利要求1所述的方法,其中所述非易失性存储器是在一存储器卡中。
9.根据权利要求1到8中任一权利要求所述的方法,其中所述非易失性存储器具有各自存储一位数据的存储器单元。
10.根据权利要求1到8中任一权利要求所述的方法,其中所述非易失性存储器具有各自存储一位以上数据的存储器单元。
11.一种非易失性存储器,其包含一组织成区块的存储器,每一区块已划分成可一起擦除的存储器单位,每一存储器单位用于存储一数据逻辑单位;一控制器,其用于控制所述区块的操作;所述控制器用于在一第一区块中存储一连串的逻辑单位;响应于在所述第一区块中存储一些逻辑单位后在所述第一区块处的存储失败,所述控制器可在作为所述第一区块的一中断区块的一第二区块中存储后续的逻辑单位;响应于一预定义事件,所述控制器将存储在所述第一区块中的所述逻辑单位传送到一第三区块。
12.根据权利要求11的非易失性存储器,其中所述第三区块和所述第二区块相同。
13.根据权利要求11的非易失性存储器,其中所述第三区块和所述第二区块不同。
14.根据权利要求11的非易失性存储器,其中仅逻辑单位的当前版本由所述控制器从所述第一区块传送到所述第三区块。
15.一种非易失性存储器,其包含一组织成区块的存储器,每一区块已划分成可一起擦除的存储器单位,每一存储器单位用于存储一数据逻辑单位,一存储数据的方法;用于在一第一区块中存储一连串逻辑单位的构件;响应于在所述第一区块中存储一些所述逻辑单位后在第一区块处的存储失败,在用作所述第一区块的一中断区块的一第二区块中存储后续逻辑单位的构件;响应于一预定义事件,将存储在所述第一区块中的所述逻辑单位传送到一第三区块的构件;和用于弃置所述第一区块的构件。
16.根据权利要求15所述的非易失性存储器,其中所述第三区块和所述第二区块相同。
17.根据权利要求15所述的非易失性存储器,其中所述第三区块和所述第二区块不同。
18.根据权利要求15所述的非易失性存储器,其中仅逻辑单位的当前版本由所述控制器从所述第一区块传送到所述第三区块。
19.根据权利要求11所述的非易失性存储器,其中所述非易失性存储器具有浮栅存储器单元。
20.根据权利要求11所述的非易失性存储器,其中所述非易失性存储器是快闪EEPROM。
21.根据权利要求11所述的非易失性存储器,其中所述非易失性存储器是NROM。
22.根据权利要求11所述的非易失性存储器,其中所述非易失性存储器是在一存储器卡中。
23.根据权利要求11到22中任一权利要求所述的非易失性存储器,其中所述非易失性存储器具有各自存储一位数据的存储器单元。
24.根据权利要求11到22中任一权利要求所述的非易失性存储器,其中所述非易失性存储器具有各自存储一位以上数据的存储器单元。
25.一种在一组织成区块的非易失性存储器中用于存储和更新数据的方法,其中每一区块已划分成可一起擦除的存储器单位,每一存储器单位用于存储一数据逻辑单位,所述方法包含将数据组织成复数个逻辑群组,每一逻辑群组是一逻辑单位群组;接收封装在逻辑单位中的主机数据;通过根据一第一次序在一第一区块中存储所述群组的逻辑单位的一第一版本,建立所述逻辑群组的一原始区块;和通过根据一第二次序在一第二区块中存储包括所述群组的逻辑单位的后续版本,建立所述逻辑群组的一更新区块;响应于一用于合并的预定义事件,通过类似于所述第一次序在一第三区块中存储从所述原始和更新区块搜集的所述群组的所述逻辑单位的当前版本,建立所述逻辑群组的一合并区块;响应于所述合并区块处的一存储失败,通过类似于所述第一次序在一第四区块中存储从所述合并区块丢失的所述群组的那些逻辑单位,提供一中断合并区块;和用所述第二区块取代所述第一区块,并用所述第三区块取代所述第二区块。
26.根据权利要求25所述的方法,其进一步包含响应于所述中断合并区块的完全合并的一预定义事件,类似于所述第一次序在所述中断合并区块中存储从中丢失的所述群组的那些逻辑单位;和用所述完全合并的中断合并区块取代所述群组的所述原始区块。
27.根据权利要求25所述的方法,其中每一逻辑单位是一主机数据的扇区。
28.根据权利要求25所述的方法,其中每一逻辑单位是可存储在所述存储器的一存储器页中的数据的一逻辑页。
29.根据权利要求28所述的方法,其中每一逻辑页包含一个或一个以上数据扇区。
30.根据权利要求25所述的方法,其中所述非易失性存储器具有浮栅存储器单元。
31.根据权利要求25所述的方法,其中所述非易失性存储器是快闪EEPROM。
32.根据权利要求25所述的方法,其中所述非易失性存储器是NROM。
33.根据权利要求25所述的方法,其中所述非易失性存储器是一存储器卡。
34.根据权利要求25到33中任一权利要求所述的方法,其中所述非易失性存储器具有各自存储一位数据的存储器单元。
35.根据权利要求23到33中任一权利要求所述的方法,其中所述非易失性存储器具有各自存储一位以上数据的存储器单元。
全文摘要
在具有区块管理系统的存储器中,可通过继续进行中断区块(breakout block)中的编程操作来处置一时间紧要的存储器操作期间一区块中的编程失败。稍后,在较不紧要的时间,可将中断前记录在失败区块中的数据传送到可能也是中断区块的其它区块。接着就可丢弃失败的区块。以这种方式,在编程中遇到缺陷区块时,可在不损失数据且不因必须当场传送缺陷区块中存储的数据而超过指定的时间限制的情况下对缺陷区块加以处置。这种错误处置对于垃圾收集操作尤其重要,因此在紧要时间期间不必在全新区块上重复整个操作。随后,在适当的时间,可通过重新定位到其它区块来挽救缺陷区块的数据。
文档编号G11C11/56GK1922580SQ200480042136
公开日2007年2月28日 申请日期2004年12月22日 优先权日2003年12月30日
发明者瑟吉·阿纳托利耶维奇·戈罗别茨 申请人:桑迪士克股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1