CN101346703A - 具有可块擦除单元的非易失性存储器 - Google Patents

具有可块擦除单元的非易失性存储器 Download PDF

Info

Publication number
CN101346703A
CN101346703A CNA2006800488004A CN200680048800A CN101346703A CN 101346703 A CN101346703 A CN 101346703A CN A2006800488004 A CNA2006800488004 A CN A2006800488004A CN 200680048800 A CN200680048800 A CN 200680048800A CN 101346703 A CN101346703 A CN 101346703A
Authority
CN
China
Prior art keywords
piece
control circuit
pointer
mapping
physical block
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.)
Granted
Application number
CNA2006800488004A
Other languages
English (en)
Other versions
CN101346703B (zh
Inventor
维克托·M·G·艾科特
尼克拉斯·兰伯特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips Electronics NV
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Publication of CN101346703A publication Critical patent/CN101346703A/zh
Application granted granted Critical
Publication of CN101346703B publication Critical patent/CN101346703B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

主存储器(10)包括多个存储单元的物理块。所述主存储器(10)支持每次至少一个物理块的擦除。指向信息存储在块的子集(40、42)中,用来标识分配给各自功能的物理块的各自部分。指向信息的连续版本存储在子集(40、42)中的第一块(40)中的最初互相不同的存储单元处。至少在第一块(40)被填满后,指向信息的比连续版本更新的随后版本被存储在子集(40、42)的第二块(42)中。在存储随后版本后,擦除第一块(40)。在主存储器的启动时,通过测试包含指向信息的最新版本的子集(40、42)的块复原指向信息。

Description

具有可块擦除单元的非易失性存储器
技术领域
本发明涉及存储器件及操作这种器件的方法。
背景技术
美国专利No 6,711,663公开了一种闪存器件。数据能从闪存器件中读取,或多或少从任意半导体存储器件。写入数据更为复杂。典型地,写入包括擦除存储器单元的块,然后在已擦除的块中编程数据页。典型地,可以仅能对整个块集体地执行擦除,由此在此情况中形成擦除单元。编程通常可以通过限定所谓的页在更小的单元完成。
闪存器件具有遭受磨损的问题。在用坏数据块之前,只能对所述数据块进行有限次数的擦除和编程,之后数据块将不能可靠地使用。如果将特定地址的闪存器件的块比其它块更经常地擦除和编程,这些块的使用寿命将限制闪存器件的使用寿命。
通过使用物理地址映射的时变逻辑已经解决了此问题。可以将所述映射用于使地用于存取闪存的逻辑地址能够在不同时间指的是闪存的不同物理块中的单元。因此,能够将需要频繁擦除和编程的逻辑地址每次映射到不同物理块中,以避免每当擦除和编程逻辑块时,不得不擦除和编程相同物理块(此处使用的“逻辑块”指在物理块中映射到完整的可映射地址集的地址集,和可选地和宽松地,映射到在这些单元中存储的数据的地址集)。
对于物理映射的有效逻辑需要映射表,所述映射表包括根据与它们相对应的逻辑地址存储的物理地址。原则上,当进行物理地址到逻辑地址的映射改变时,必须每次更新这种映射表。通常,用于闪存的这种映射表存储在RAM存储器中。在上电时,所述映射表根据存储在闪存中的“标签”重建,对于不同物理存储区(例如,块),所述“标签”表示其当前逻辑地址。
美国专利No 6,711,663描述了存储在闪存本身中的映射表的使用。美国专利No 6,711,663使用按段组织的映射。将存储器组织为多个块的段。为每个段提供映射表,所述映射表把用于段的逻辑地址翻译成段中的物理地址。选择段的尺寸,使得每个映射表的尺寸与存储器页相对应,也就是闪存的编程单元。
美国专利No 6,711,663在每个段中设置“存储器更新块”,用于存储所述段的映射表的连续版本。使用存储器更新块的最后编程页作为映射表。每次当段的映射表变化时,将更新的映射表编程在存储器更新块的下一页中。在每个变化后,将使用新的页来存储映射表,直至将存储器更新块的所有页都编程为止。当存储器表的下一更新在将所有页编程后发生时,擦除存储器更新块,并且将新的存储器表写进已擦除的块的第一页中。
所述方法具有优点:在上电时,不需要时间根据标签来重建映射表。相反,可以从闪存中直接恢复映射表。
然而,如果类似从电源断开的中断发生在擦除存储器更新块之后和编程第一新的映射表之前,这样的恢复是不可能的。在这种情况,需要基于映射重建的费时的标签。
发明内容
其中,本发明的目的是提供一种存储器件,所述存储器件存储映射表,所述存储器件在中断后,不需要显著增加的时间以用于产生映射表。
提供了根据权利要求1的设备,其中指向信息的连续的版本存储在主存储器(例如闪存)中的第一和第二块中的相互不同的存储单元中。指向主存储器中的物理块的指向信息表示物理块存储用于某些功能的数据(例如,物理块存储用于各自逻辑地址或指向其它块的指针的数据)。映射控制电路在向第二块中存储指向信息的最新版本后,擦除第一块。在启动时,映射控制电路通过测试在主存储器的所有块的预定子集中的哪个块包括指向信息的最新版本来恢复指向信息。第一和第二块是子集的一部分。通过这种方法,针对在指向信息的更新中的电源故障中断,装置是鲁棒性的。在一个实施例中,子集包括第一和第二块,但在一个可供选择的实施例中,子集也可包含主存储器的更多块,例如也可在其它时间轮流用作第一或第二块;在每种情况,子集比所有块的集合小得多,子集包含不多于比如四个或十六个块。可使用预先确定的子集,但在一个实施例中,映射控制电路在主存储器中存储信息,以识别在子集中的块。
在一个实施例中,仅当第一块为满时,开始写入第二块。在此或另一实施例中,在擦除第一块后,映射控制电路交换第一和第二块的作用。当子集包含更多块时,来自子集的另一块可承担第二块的作用。
在一个实施例中,通过搜索在子集中用于部分填充的仅部分写入的块,和使用来自所述部分填充块的指向信息的上一次写入的版本,执行测试,如果未找到部分填充的块,使用来自满的块的指向信息的最后写入的版本。
在一个实施例中,映射控制电路在块中写入版本号以及指向信息的版本。在该实施例中,映射控制电路从版本号识别指向信息的最新版本。在另一实施例中,指向信息的版本存储在第一块中,随后在具有开端地址的第二块中,所述地址具有与版本产生顺序对应的顺序。在这种情况,映射控制电路例如通过在第二块中的第一搜索,搜索具有随后的最新地址的版本,如果在第二块中不包含任何(完全的)版本,或通过在第一块中的搜索,并且如果该第一块为满的,测试第二块是否为空。
在一个实施例中,指向信息包括映射地址,该映射地址映射逻辑地址到相应的块或块组。在又一实施例中,映射控制电路存储相应映射表的版本,该相应映射表用于在主存储器的块中相互独立的逻辑地址空间的各自段。在又一实施例中,映射控制电路存储用于在第一块中互相混合的段的不同映射表,并且在擦除第一块之前,复制相应映射表的最新版本到来自第一块的第二块中,对于所述映射表,没有版本存储在子集的第二块中。通过这种方法,用于所有段的最新版本在主存储器中总是可用的。
在一个实施例中,映射控制电路存储在子集的各自不同块中用于段的不同相应映射表的版本。在该实施例中,第二块可以是用于所有各自不同块的备份块。在又一实施例中,在擦除后,映射控制电路使用第一块作为用于代替各自不同块的任何一个的备份块。
在一个实施例中,映射控制电路配置用于维护存储在块的相应指针链,指向在链中包含下一块的各自块的每个非最终指针,链中指向来自子集的块的最终指针。通过这种方法,可以使用动态变化的子集。链可以是相应的指针树分,具有指向子集中的不同块的最终节点。在另一实施例中,指向信息本身可包括指针的这种链或树,或可包含这种链或树。
在一个实施例中,指针信息的每个版本包括识别各自物理块的信息,该物理块包含数据和另一信息,该信息识别更多在版本生产时为空闲的物理块。在该实施例中,映射控制电路使用所述另一信息来选择来代替识别的各自包含数据的物理块。这使得通过在识别的空闲块中搜索,来搜索代替块成为可能,即使在新版本的指向信息存储之前,其中已经说明代替。通过这种方法,指向信息的较少频率的版本就足够,这减小了磨损。
附图说明
根据附图中所示示范实施例的描述,这些和其它目的及有益方面将显而易见。
图1为具有存储器的设备;
图2为执行写入操作的流程图;
图3为上电流程图;
图4a-d为具有指针的连续版本的存储器的块;
图5为具有不同映射表段指针的存储器的块;
图6为具有不同映射表段指针的存储器的块;
图7a-c为具有指针链的存储器的块;
图8a-c为具有指针树的存储器的块;
图9a-b为具有指针链的存储器的块;
图10a-b为具有指针链的存储器的块;
图11为空闲列表的使用;
图12a-b为空闲列表的使用。
具体实施方式
图1为具有存储器的设备。所述设备包括闪存10、映射表存储器12、映射控制电路14、处理器16和多路器18a、b。作为示例,映射控制电路14可以实现为用计算机程序编程的可编程电路,所述计算机程序使得所述映射控制电路执行映射控制的功能。处理器16具有与映射控制电路14的控制连接。处理器16和映射控制电路14的数据输入-输出与闪存10的数据输入-输出相连。映射控制电路14和处理器16具有用于相应块地址(可选地也包括相应页地址)的地址输出和剩余地址。来自处理器16和映射控制电路14的块地址输出和剩余地址输出经由多路器18a、b的相应多路器与闪存10的块地址输入和剩余地址输入相连。来自处理器16的地址输出经由映射表存储器12与多路器18b相连。映射控制电路14具有与映射表存储器12和多路器18a、b相连的控制输出。
闪存10是这种类型,它允许每次存储单元的至少一个块的擦除操作。因此,将擦除单位称为块。能一次一页地对存储单元进行编程。典型地,每个块包括多个页。
在正常的读取操作中,处理器16向存取存储单元输出读取地址。所述地址包括块地址和剩余地址。通过映射表存储器12将读取地址的块地址翻译成物理块地址,并且提供给闪存10。典型地,翻译包括使用逻辑块地址作为用于映射表存储器12的地址以恢复相应的物理地址。无需翻译,将剩余地址提供给闪存10。在更先进的实施例中,读取地址翻译可以包括地址的页地址和块地址组合的翻译。
图2表示写入操作的流程图。在第一步骤21中,处理器16向映射控制电路14发出用于写入操作的请求以及应该应用于写入操作的逻辑块地址。在第二步骤22中,映射控制电路14选择将用于写入的物理块。在更先进的实施例中,映射控制电路14选择将用于写入的物理块和物理页。所选择的块和页应该为未用于另一逻辑块地址的已擦除的块,或者在先进的实施例中,应该为未使用的已擦除页。可选地,如果还未擦除那个块,映射控制电路14使得闪存10擦除所述未使用的块。如果没有擦除任一个未使用的块,在任何情况下这些都将执行。
映射控制电路14向处理器16请求写入的逻辑块(或页)分配所选择的物理块(或页)。在第三步骤23中,映射控制电路14构造用于将逻辑地址映射到物理地址的新映射表,以说明新近分配的块(或页)。在实施例中,映射控制电路14更新在映射表存储器12中的映射表,并使得闪存对用于在物理块(或页)的存储单元中的逻辑块(或页)的新数据进行编程。
在第四步骤24中,映射控制电路14识别块集合(a set of blocks)的最初一个,分配所述块用于存储包括至少一个已编程页的映射表。
然后,映射控制电路14在所述已分配块的所述最初块中搜索连续地第一个未使用页或页集合。在第五步骤25中,映射控制电路14测试是否找到了所述页或页集合。如果找到,映射控制电路14执行第六步骤26,在已经找到的页或多个页中编程新的映射表。如果映射控制电路14在所述块集合的最初块中找到未使用的页,映射控制电路14分支到第七步骤27,其中映射控制电路14选择分配用于存储映射表的块集合的下一个块集合。在第八步骤28中,映射控制电路14在所述已分配块集合的下一个块集合中的连续地第一个未使用页或页集合中编程新的映射表。在第九步骤29中,映射控制电路14控制闪存10擦除已分配块集合的初始块集合。
图3为设备的上电流程图。在第一步骤31中,映射控制电路14识别块集合的最初一个,所述块集合分配用于存储包括至少一个已编程页的映射表。然后,映射控制电路14在所述已分配块的最初一个中搜索连续地最后使用的页或页集合。在第二步骤32中,映射控制电路14从最后使用的页将映射表复制到映射表存储器12中。在第三步骤33中,映射控制电路14开始系统的正常操作。
应当注意,在第九步骤29中擦除所述块的最初一个之前,在第八步28骤中,映射控制电路14将新的映射表编程到闪存10中。如果此过程由于某种原因(例如去除了(一部分)系统的电源)而中断,则存在将执行第八步骤28而没有执行第九步骤29的风险。映射控制电路14配置用于通过检测分配用于存储映射表的块中之一是满的并且这些已分配块的至少一个其它块不是空的,来在上电时进行检测。如果是这样,优选地,映射控制电路14在上电时没有完全充满的已分配块之一中使用连续地最后使用的页或页集合,并且使得闪存10擦除已充满的已分配块。可替代地,映射控制电路14可以使用已完全分配块的随后使用的页或页集合。在这种情况,可能错过新近编程的数据,但是如果图2的过程更早中断,无论如何就是这种情况。
图4a-c为分配用于存储映射表的块集合中的页的使用的三个阶段。在每幅图中,示出了两个块40、42的相同集合。用阴影表示已经用映射表编程的页。用无阴影表示已擦除的(空闲)块。在实施例中,对每页中的标记比特进行编程以表示页是空闲的还是已编程的。可替代地,空闲块可通过测试在块中的所有数据是否为已擦除状态(例如,逻辑比特值1)而检测,可选地如果有ECC(在块中使用纠错码),就通过测试ECC是否表示错误而检测。可替代地,如果将标签和数据一起写入,通过测试现有的正确标签的存在而检测。
举例来说,将这些页显示为向下增加的地址,以使得最高的所示页具有最低的地址。
在第一阶段(图4a)中,使用映射表对第一块40的部分页进行编程。当块40、42处于此状态时,映射控制电路14在上电时将使用的非空闲块40中的最低所示的已编程页。当处理器16要求写入时,映射控制电路14将选择在非空闲块40中的最高所示的空闲页,用于对新的映射表进行编程。
在第二阶段(图4b)中,使用映射表对第一块40的所有页进行编程,并且第二块42为空闲的。在这种情况,映射控制电路14在上电时进行,与如图4a中的情况相同。当处理器16要求写入时,映射控制电路14在第二块中选择第一个空闲页,用于对新的映射表进行编程。在对新的映射表进行编程之后,映射控制电路14擦除满的块,这将导致如图4c所示的第三阶段。
在第三阶段(图4c)中,第一块40为空闲的,并且已经对第二块42的一部分进行编程。当块40、42处于该状态时,这些块的作用与图4a中的相反。
图4d表示由于供电电源的过早断开,可能在第二阶段(图4b)之后而出现的状态。一个块40是满的,并且其它块42为非空闲的。如果映射控制电路14在上电时遇到这种状态,映射控制电路14将擦除满的块,并且使用来自未满的块42的映射表。
在替代实施例中,映射控制电路14写入伴随映射表的版本号,每次当写入表(或根据预定顺序改变)时,版本号增长。在此实施例中,可以通过选择具有最前面版本号的映射表识别映射表的有效版本。在又一实施例中,映射控制电路14可将带有版本号的更新写入中间块的任何一个中,例如如果其它块是满的,写完之后擦除其它块。
在另一实施例中,在写入新的块以协助在上电时选择正确的块之前,映射控制电路可以配置用于在满的块中设置“脏”标志。在这种情况,映射控制电路14首先试图使用来自未标记为脏块的最新的映射表。如果此块为空闲的(由于错误),映射控制电路14将求助于脏块。
版本号可循环变化。版本号可与在块中具有映射表的页的位置一起使用,以代替为搜索正确块的目的而测试满的和空闲的块。在这种情况,短循环,比如四个不同版本号可以满足要求。虽然有实施例已经示出其中整数的映射表适应一个块,但应意识到这不是必需的。当映射表的尺寸使得整数的映射表不能填满块时,映射控制电路14可从一个块溢出到其它块来写入最新的映射表。在这种情况,如果在溢出的映射表之后没有存储另一映射表,映射控制电路14在启动时使用所示溢出映射表,并且映射控制电路14不会擦除第一块直至它在下一块中写满映射表为止。
至此,假设存储了完整闪存的映射表。在另一实施例中,多个映射表配置用于逻辑地址的各自段(范围)。
在又一实施例中,映射控制电路14为从分配用于存储映射表的块集合中的各个独立可选择的页中的各自范围编程和载入地址表。在又一实施例中,映射控制电路14配置用于使对映射表应用到闪存10的页的段的标识进行编程,其中闪存10的页中存储有映射表。在上电时,映射控制电路14搜索以分配的块,以找到包含各自段的标识的最后顺序的页。优选地,映射控制电路14将这些页复制到映射表存储器12中,用于在地址翻译期间使用。
当处理器16需要写入新的页时,映射控制电路14像以前那样产生的新的映射表,但是仅对于段中的逻辑地址,所述段包括处理器16需要写入的逻辑地址。相应地,映射控制电路14仅把用于所述段的新映射表加入块集合的映射表中,所述块集合分配用于存储映射表。举例来说,使用图4a、b中不同形式的阴影表示用于不同段的映射表。
图5为在当分配的块为满时在写入期间发生的情况。在这种情况,映射控制电路14将用于已更新段的新映射表写入到块集合中空闲块42中,所述块集合分配用于存储映射表。此外,在一些实施例中,映射控制电路14将用于其它段的当前映射表复制到所述块的空闲块42中。这由图中的箭头示意性地示出,尽管代替从闪存10复制,所述映射表的内容当然也可以从映射表存储器12中复制。然后映射控制电路14使闪存10来擦除满块40。这使在上电时,映射控制电路14能够表示包含有效映射表的块。
如果错误地未擦除旧的块40,映射控制电路14检测到满块40与非空闲块42结合一起的,并且在上电时擦除满块。优选地,映射控制电路14首先验证用于在非满块42中存储所有段的映射表。如果没有,映射控制电路14首先在满块40中搜索用于未复制段的顺序上最新的映射表,并且在擦除满块40前,将这些映射表复制到非满块42。
作为替代,当首先将新的映射表写入空闲块42时,未复制用于其它段的映射表,并且未擦除满块40。在这种情况,在上电时映射控制电路14仍然能够恢复块,与错误断开时的情况一样。能够将满块40的擦除延迟直至其它块42变满为止,因为在上电时,映射控制电路14仍能通过检测哪个块未满来检测哪个块是最后写入的块。在此替代中,只有当未满的块变满时,映射控制电路14需要擦除满块40。优选地,在这种情况,映射控制电路14首先复制用于还没有在未满块42中存储映射表页的那些段的映射表,如果有的话。也就是,在加入所述还没有在未满块42中编程的映射表后,可延迟擦除,直至非满块42具有正好足够的空间来以留出空闲的页为止。
在另一实施例中,分配用于存储映射表的块集合包括多于两个块。这是有益的,例如,如果存储在块(例如:映射表)中的数据太大,使得它们能从一个块溢出到另一块中。在这种情况,例如可以按照预定顺序中使用所分配的块。如果是这样,优选地首先擦除至少集合中的最新更新的块,重新用来存储映射表。在启动期间,映射控制电路14定位空闲块,并且使用所述空闲块来确定所述序列的开始/结束,并且根据所述映射控制电路定位存储数据的最新版本。
图6表示了其中将不同块用于不同段的实施例。在这种情况,设置四个块60作为多个段,并且将备用块63配置用于块60之一变满的情况。在操作中,当映射控制电路14处理写入请求时,映射控制电路14将用于通过写入请求而改变的段的新映射表编程到包含用于所述段的前一个映射表的块中。如果用于所述段的块是满的,映射控制电路14将新的映射表编程到空闲块62中。然后,备用块成为用于所述段的块,然后映射控制电路14擦除用于所述段的旧块。在一个实施例中,将所述段的标识编程到新块中,可替代地当写入所述页时,可以在块的每一页中编程所述标识。
在上电时,映射控制电路14测试每个已分配的块60、62,以确定将所述块用于哪一段。然后,将来自所述块的最新的映射表用作所述段的映射表。如果由于供电中断,存在两个包含段的数据的已分配块60、62,映射控制电路14从那些块中选择未满的块,擦除其他块,然后使用来自未满的块的顺序上最新的映射表。
在一个实施例中,映射表存储器12包括并行地用于所有段的表,使得存储器映射表可以立刻翻译任何逻辑地址。在此实施例中,映射控制电路14将用于所有段的映射表载入映射表存储器12中。在替代实施例中,映射表存储器12存储仅用于段的有限子集的映射表,例如同时仅用于一段。在此实施例中,当在映射表未在映射表存储器12中的段中接收逻辑地址时,映射控制电路14使用来自已分配的块60、62或40、42的映射表,用另一个段的映射表代替一个段的映射表。
虽然实施例表明其中用于段的整数数量的映射表适合于块,应当理解的是这不是必需的。当用于段的映射表的尺寸使整数数量用于段的映射表不能填满块时,映射控制电路14可写入用于最后段的映射表,在图5的情况中所述最后段从一个块溢出到其它的块。在这种情况,如果没有将另一映射表存储在溢出映射表的后面,映射控制电路14在启动时使用所述溢出的映射表,并且映射控制电路14不会擦除第一块直至在下一块中写满映射表为止。在图6的情况中,用于所述段的满的映射表优选地写入到新近分配的块,因此立刻释放先前分配的块。
在一个实施例中,将预定的块集合分配用于存储映射表。在此实施例中,预定的块集合位于预定的地址,使得能够将映射控制电路14设计用于参考在所述预定地址中的块。然而,这可以具有已分配的块将更快地磨损的缺点。作为替代,可以分配变化的块或多个块以存储映射表,并且可以将支持RAM的存储器配置用于存储指向已分配的块或多个块的指针。
在可替代实施例中,可以将连接的列表结构用于限定块集合,所述块集合分配用来存储映射表。如图7a所示。其中示意性地示出了整个闪存71,分割成块。将在闪存中的预定物理地址的基础块70(例如,地址零)用来存储一个或多个基础指针。示出了所述基础块的放大70a以及基础指针未知72。来自所述位置的基础指针指示存储另外指针的另一个块74。示出了所述另一个块的放大74a和具有指针的基础指针位置75,所述指针指向分配用于存储映射表的块76。
在上电期间,映射控制电路14首先从基础块70载入指针72,使用所述指针来选址其它块74,映射控制电路14从所述其它块将指针载入分配用于存储映射表的块76。映射控制电路14保存所述指针作为随后的使用,并且使用所述指针从分配用于存储映射表的块76将当前的映射表载入映射表存储器12中。这可通过例如前述方法中的任何一个来做到。
应当注意,块70和74中的每个仅包括一个有效指针。因此,在考虑到具有映射表的块76能恰好与在基础块70或中间块74中的直接指针一起找到时,这些块在读出时是多余的。加入多余的块以降低基础块需要更新的频率。
而且,此结构这样的具有以下益处:可以将不同物理块分配作为块76以存储映射表,以便避免比其它的块更频繁地擦除相同的块。每次已分配块76变化时,将新指针75写入指向已分配块76的块74中。优选地,至少可代替的块(已分配块76和中间块74)中每个均存储计数值,所述计数值表示已经擦除的次数,使得当所述计数值超过阈值时,可以将映射控制电路14配置用于用不同的块代替相关的块。例如每次在将擦除块之后写入时,计数值可以增长1。
类似地,在一定时间的过程中,可以将不同物理块用作中间块74,以便避免在存储新的指针值之前,过于频繁地擦除相同的块。每次中间块74变化时,将新的指针72写入指向中间块74的基础块70中。应当注意到,中间块74的变化不如已分配块76的变化频繁。在一个示例中,每次擦除已分配块76N1次(例如N1=8)之后,选择不同物理块用于已分配块76。因此中间块74仅需要每N2次更新一次,其中擦除已的块(例如,N2=100000,或更一般地,比块的可擦除且仍能用来存储数据的最大次数少的整数数量)。当将与中间块74对应的物理块擦除N2次时,它依次被代替。因此,这样的代替发生在擦除已分配块76的N1*N2次之后。因此,对于中间块74会发生较慢的磨损,甚至对于基础块70也会发生较慢的磨损。
可替代地,没有中间块74可使用,基础块70中的指针72立刻指向已分配块76。这提供了闪存的更有效的使用和映射表更快的恢复。然而增加了基础块的磨损。应当注意到,在一段时间后,不得不擦除具有指针值的块,这不可避免地导致增加的磨损。为减小这种磨损,在基础块70和已分配的块之间使用在中间块74中的中间指针。
作为另一替代,可使用中间块的链,除了指向已分配块76的最新的块,在基础块70中的指针72指向链中的第一块,每个下一块指向链中的下一块。这样,能够减少基础块的磨损。中间块越来自于已分配块,所述块越不需要更新。因此,具有预定物理地址的基础块70可以与使它磨损的频繁的更新相隔离。
可使用固定预定长度的链。替代地,也可使用动态自适应长度的链。在这种情况,优选地,在所述链中的最新的中间块存储指示,所述指示指向已分配的块(或与所述链的末端相距预定距离的块指示沿所述链的预定距离的块存储该指针)。在实施例中,当映射控制电路14检测到在阈值以上的更新频率时(例如,已经擦除基础块70的次数超过阈值T),映射控制电路增加链的长度。因此,链的长度能根据使用的类型来调整以避免基础块70的太多磨损。在一个实施例中,使用链长度的延长以避免多于阈值次数地更新基础块70。例如,当已经更新基础块70阈值数目的次数(T=100000)时,这可以通过例如在链中增加额外的中间块来实现,例如,在最后一次擦除基础块70后,将指针写入基础块70中的新块,并且将指针写入新的中间块中的下一中间块。如果已经擦除新的中间块阈值数量的次数,这能通过新的中间块用作部分基础块来重复,等等。
在另一实施例中,所述链是树结构的部分。也就是,存储来自链的指针的一些块也存储指向其它块的其它有效指针,所述其它块依次存储一个或多个其它指针或逻辑到物理地址的映射表的(一部分)。在启动时,映射控制电路14跟踪树的所有分支的指针以找到(部分)映射表。
存储多个有效指针的块同时于所述树(分支点)中带有分叉的节点相对应。树中的最后节点(页节点)指向映射表部分。可以使用任意深度的树。优选地,至少树中的一部分节点不是分叉节点,而是在树中仅指向一个下一节点的节点。这些节点仅用作增加树的深度(根部和叶子之间的节点数量),并且不增加叶子节点的数量。因此,能够减小存储用于根部节点的指针或多个指针的块的更新频率。
优选地,串联地使用这么多个这种无分支的节点。优选地,将节点的整个层(在给定深度、与根部节点的相同距离的所有节点)制作为无分支,并且更优选地,将多个连续层的节点制作为无分支。所述层仅仅用来增加树的深度(根部和叶子之间的节点的数量),而不增加叶子节点的数量。因此,可以减少存储用于根节点的指针或多个指针的块的更新频率。另外当需要时,树的深度可动态地增加以减小更新频率。
在另一实施例中,多个块分配用来存储映射表或部分映射表。例如,能够将这应用到实施例,其中在擦除旧的已分配的块中的旧的映射表之前,将新的映射表存储到新分配的块中。可替代地,例如,可应用到实施例,其中用于逻辑块地址的各自段的映射表存储在各自的块中。
图7b描述了此实施例。在此实施例中,基础块70包括指向各自中间块74、78的第一和第二指针72a、b,它们的每个依次包括指向各自分配块76、79的指针75、75a。在此实施例中,在上电过程中,映射控制电路14首先从基础块70载入指针72、72a,然后使用这些指针来选址其它块74、78,并且将指针载入已分配的块76、79,用于存储映射表。映射控制电路14保存这些指针供后续使用,并且使用所述指针来从分配用于存储映射表的块76将当前的映射表或或当前映射表的段载入到到映射表存储器12。例如,这可使用上述方法中的任何一个做到。
当开始使用另一块代替已分配块76、79中的一个来存储映射表时,映射控制电路14在中间块74、78指向所代替的已分配块76、79的哪一个中间块中改变指针。优选地,在改变指针之前,映射控制电路14在新的分配块中存储新的映射表(或映射表的段)。
虽然显示了其中两个指针72、72a被存储在基础块中的结构,应该意识到,替换是可能的。例如,代替两个指针,可以存储指向单个中间块的单个指针,所述中间块存储指向已分配块76、79的两个指针。这具有需要更少的块的益处,但其导致更多的磨损,因为其需要更多的擦除操作。作为另一实施例,当使用多于两个的分配块76、79时,可存储多于两个的指针(在基础块70或中间块74、78中)。作为替代,当在将具有相互预定物理关系的块(例如,连续的物理地址)用于中间块74、78或用于已分配块76、79时,可将单个指针用到中间块74、78中的一个或用于一个已分配块76、79。
在前面的例子中,示出了只有有效指针存储在每个块中,这意味着每次当在所述块中的指针值变化时,映射控制电路14擦除和重新写入基础块70和中间块74、78(或代替中间块74、78)。替代地,映射控制电路14可以配置用于将每个新的指针值写入到基础块70或具有指针的中间块74、78中的新的页,不需擦除先前存储的指针。
图7c表示了用于连续的指针72、75的连续页的使用。包括指针值的页通过阴影表示。在每种情况,最低的阴影页(具有包括指针值的最高地址的页)包括有效指针值。更高的页(具有更低的地址)包括更旧的(无效的)指针值。在可替代实施例中,映射控制电路14写入伴随指针的版本号,每次当写入(或另外根据预定序列改变)表时,版本号增长。在此实施例中,映射表的有效版本能通过选择具有最靠前版本号的映射表来识别。
在启动期间,映射控制电路14例如通过搜索具有按照某种预定顺序的页紧接着空页的指针的页,从无效指针中区分有效(最新存储)的指针。例如,所述预定顺序可以是物理地址的顺序。例如,搜索可为二进位的搜索(首先测试块中部的页是否为空,然后测试第一或第二半页中部的页,分别得到第一被测试的页是否为空,等等,直至已经在相邻的两边测试被测试的页)。此实施例具有需要较少频率的擦除操作的益处,以在启动中更长的搜寻时间为代价。
在替代实施例中,映射控制电路14写入伴随指针的版本号,每次当写入新的指针时(或根据预定顺序改变时),版本号增加。在此实施例中,指针的有效版本能通过选择具有最靠前的版本号的指针识别。在另一实施例中,映射控制电路14可将带有版本号的更新写入到中间块的任何一个,例如,如果其它块为满,在写入后擦除其它块。
版本号可循环变化。版本号与在块中具有指针的页的单元一起使用,代替为了找到正确块的目的而测试满的和空的块。在这种情况,短周期的、比如四个不同版本号可以满足。
在另一实施例中,可以将映射控制电路配置用于在启动时写入新的中间块以助于正确块的选择之前,在满的中间块中设置“脏”标签。在这种情况,映射控制电路首先试图使用未标记为脏的中间块。如果此块为空(由于错误),映射控制电路14将求助于空块。
在其中并行使用多个有效指针的实施例中(如图7b中的例子),可以一起存储指针值和它们在多个并行指针值中的等级标识(identification of their rank)。在这种情况,在启动过程中,映射控制电路14为每个等级标识搜索有效的(最新存储的)指针值,所述指针的值为在预定顺序中比相同等级标识的其它指针的值位于更靠前的单元。
当映射控制电路14已经使用了用于存储指针值的所有页,并且必须写入新的指针值时,映射控制电路14擦除块,并且从顶部重新开始。图8a-c表示了其中将多个块用于指针值的替代实施例。在基础块70中的指针72、82指的是第一中间块74和第二中间块84。开始,如图8a所示,每次一个指针值变化时,将变化的指针的值75写入第一中间块74中的新页,并且第二中间块84仍保持空。当第一中间块74为满时,映射控制电路14将下一变化的指针值75写入第二中间块84的第一页,如图8b所示,然后,擦除如图8c所示的指针值的旧的块。
以这种方式,由于能容易地恢复由于更新中断造成的错误。在上电期间,映射控制电路14测试第一中间块74是否为满,如果为满,测试来自第二中间块84的一个或多个指针是否可用。如果是,映射控制电路14使用来自第二中间块84的最新的指针。如果不是,映射控制电路14使用来自第一中间块74的最后指针值。如果第一中间块为空,映射控制电路14使用来自第二中间块84的最后指针值。
应当注意,指向第二中间块84的指针值的加入和旧的第二中间块的擦除可遍布在时间中(延迟擦除,例如直至将多个指针值写入第二中间块84中),由于可以将映射控制电路14配置用于通过测试中间块是否为满,在启动时来确定决定包括正确指针值的中间块;如果块为非空,使用来自其它中间块的最后指针的值,否则,使用来自先前中间块的最后指针值。
该技术也可应用到基础块70。例如,当使用基础块70的所有页时,映射控制电路14将下一指针值写入在预定辅助的基础块(例如,具有块地址1的块)的第一页,然后擦除基础块70。例如,在第二中间块84的变化的情况,映射控制电路向指向旧的中间块的指针值82之后的第二中间块84(如果必要)添加指针值,将指针值写入到第二中间块84的第一页中。
图9a表示了其中并行地使用多于一个有效指针值的例子,例如如图7b中的情况。并行指针值与各自等级相对应(例如,对应用于连续逻辑地址范围的映射表的连续段的等级:将并行地指针标注为第一和第二指针)。分配各自的中间块以用于各自等级的指针值的存储,将识别分配的等级的信息(例如对应于等级的数字)存储在每个包括指针值的中间块中。
有效的并行指针是各自存储在各自中间块74、78中的最新占用的单元中。将额外的指针92存储在基础块70中,其指向额外的中间块94。当其它的中间块74、78都不为满时,所述额外的中间块94保存为空。在这种情况,映射控制电路14将新的指针值写入中间块74、78中的连续的页中。当中间块74、78中的一个为满,并且必须加入新的指针值时,映射控制电路14将新的指针的值写入额外的中间块94。此外,映射控制电路14将指针的等级的指示写入额外的块94。如图9b所示,然后映射控制电路14擦除填充的中间块。现在,该擦除的块作为额外的中间块的部分:当中间块又为满,当指针的值必须加入时,映射控制电路14将指针值写入现有的空块,并且擦除填充的块。
在启动时,映射控制电路14从基础块70载入指针,并且确定指向用于每个等级的中间块的指针。如果两个所述中间块与相同的等级相对应,然后映射控制电路14选择所述中间块的一个,所述块为非满或空以将指针载入分配的块,如果另一个中间块为满,在擦除它。如果用于等级的一个块为满,并且另一个为空,映射控制电路14使用来自满的块的上一次写入的指针的值。
图10a、b为实施例,其中将不同等级的指针值105a、105b一起存储在相同的块中,每个都包括它的等级的标识。在此实施例中,映射控制电路14向相同的中间块74中加入用于所有等级的新的指针值,直至所述块变满为止。当必须写入用于等级的下一新的指针的值时,映射控制电路14将用于所述等级的新的指针值写入额外的块94,并且将其它用于等级或多个等级的有效指针的值或多个值复制到额外的块94。然后,映射控制电路14擦除填充的块。在启动时,映射控制电路14使用基础块70中的指针值以确定中间块,并且搜索非空和非满的中间块,如果这不导致用于所有等级的指针的值使用来自所述块的上一次写的指针的值;如果这是满的,映射控制电路14载入来自其它块的用于所有剩余的等级的最后写的指针值。
应该意识到,在实施例中的任何一个中,其中不得不从多于一个的可能块中选择有效指针值,映射控制电路14可以配置用于使用任何机制,例如如果非空的其它块是可用的时使用满的块的擦除、使用版本号、使用脏标识等等来确定将被使用的块。同样,如果发生不一致,映射控制电路14可以标识最新的可靠版本。例如,如果映射控制电路确定指针指的是无效的映射表(例如,空的映射表或将不同逻辑地址映射到相同物理地址的表),映射控制电路可求助于指针的更早的版本。当确保映射控制电路14在完成用于信息的替代之前不擦除信息时,这导致最佳的可能的错误校正。
在又一实施例中,减少更新的数量。这通过和映射表一起存储一“空闲”块的表单来完成,所述表单描述当更新映射表时应该进入映射表中的块。因此,如果逻辑地址映射到第一块的物理地址,并且在第一块中的数据的后续更新中,映射控制电路14选择通过第二块(例如,避免第一块的更多磨损)替代所述第一块,映射控制电路14从空闲列表中选择的第二块,并且在第二块中存储逻辑地址的指示(例如,“标签”)。在这种情况,映射控制电路14省略写新的映射表。替代地,在随后的启动中,映射控制电路14使用与旧的地址映射表一起存储的空闲的列表,来确定是否将在空闲的列表上任何块用于更新。如果是,映射控制电路14根据所述块中的逻辑地址的指示推断映射表的校正。只有当空闲块的列表上的所有块都被使用时,需要存储新版本的映射表。
图11为在此实施例中使用的来自具有映射表信息的存储器的块10。所述块包括映射表的连续的版本112a-c,每个由具有空闲块的地址的“空闲的列表”114a-c伴随。将映射表112c的最新版本及其伴随的空闲列表114c定义为当前的版本。在操作时,当其地址出现在映射表12c的当前版本中的物理块不得不使用替换的块更新时,映射控制电路14使用来自关联的空闲列表114c的第一可用地址,并且将更新写入通过由第一可用地址选址的块。此外,映射控制电路14将标签写入所述新的块,所述新的块辨识更新所应用的逻辑块地址。在新的块中的更新完成后,映射控制电路14擦除仍出现在当前的映射表112c中的旧的块。
优选地,映射控制电路14相应地更新在映射表存储器12中的映射表。当映射控制电路14检测到在当前空闲列表114c中的所有块都被用来更新时,映射控制电路14将映射表的新版本和被擦除的旧的块的列表写入旧的空闲列表114c后的块110中(或写入用于映射表数据的另一块中)。优选地,每个空闲的列表包括多个块的地址。在这种情况,一旦将旧的空闲列表耗尽时,优选地写映射表的新的版本和空闲列表。
在启动时,映射控制电路14恢复空闲列表114c的当前版本,例如,通过搜索块110中的最后非空页。然后,映射控制电路14参考由所述空闲列表114c上的地址选址的页,并且决定是否将数据写入这些页。如果是,映射控制电路14根据标签确定哪种校正必须应用到映射表的当前版本。因此,确定一个或多个校正,每个表示逻辑块的地址和具有用于所述逻辑块的更新的数据的物理块的地址。在一个实施例中,映射控制电路14从块110复制映射表112c的当前版本到映射表存储器12中,并且应用校正到映射表存储器12中的映射表。在另一实施例中,映射控制电路14在映射表存储器12中存储校正的列表,并且当其从块110载入时,将这些应用到整个映射表。
优选地,映射控制电路14按照这些块的地址出现在空闲的列表114c中的顺序使用来自用于更新的空闲列表114c的块。在这种情况,在启动时,映射控制电路14优选地按照这些块的地址出现在空闲的列表中的顺序,测试用于更新的空闲列表114c上的块,并且一旦确定一个块未被更新时,就停止测试。这加速了启动,但是即使不使用此顺序,当仅有部分块出现在空闲的列表114c上时,启动也相当快。
优选地,一旦已经完全写入块的更新版本,将擦除每个出现在当前映射表112c中的旧的块。因此没有数据丢失。然而,可延迟擦除直至正好在写映射表的新版本和空闲的列表(优选地,其中所有的擦除块出现)之前。而且,虽然描述了其中映射表112a-c和空闲的列表114a-c被接连地存储的一个实施例,应该意识到,映射表和空闲的列表之间的联合能以其它方法实现,例如通过包括具有两个的版本号,其中能任意地存储映射表和空闲列表。而且,映射表和关联的空闲列表能存储在不同的块中,例如,以提供联合相同的顺序。
应该意识到此技术可以与所有前述实施例联合应用,或其单独应用。例如,可使用多个块可来存储空闲的列表和关联的映射表的版本,仅仅在将新版本写入新块后擦除满的块,以使在启动时能够通过搜索发现最新的版本。
作为另一实施例,可使用段的映射表,在这种情况中,需要存储用于更新的段的新版本。在这种情况,各自空闲的列表能用于各自段,使用所述段的空闲列表执行用于段的块的更新。但是,优选地,使用用于所有段的公共空闲列表,使用用于所有段的相同的共享的空闲的列表执行用于任何段的块的更新。这减少了需要存储的映射表的更新的数量。应当注意到在这种情况,优选地,在指向各自段的块地址上没有任何限制,这意味着在用于段的映射表中,需要比当每个段映射到与各自的物理块集合时稍长的地址,所述物理块集对于确定的地址位具有相同的地址。
而且,当使用段时,在一实施例中,映射表存储器12仅对段的部分(例如,对仅一段)缓存映射表部分。这使得使用小的映射表存储器12成为可能。在这种情况,优选地,用于所有段的校正连同缓存的映射表一起存储在映射表存储器12中。在这种情况,当需要时,映射控制电路14从闪存的块中向映射表存储器中载入用于新的段的映射表,并在映射表存储器12中应用存储的校正。在又一实施例中,在从闪存10中载入用于段的映射表前,映射控制电路14可以配置用于试图使用校正映射逻辑地址。这增加了存取速度。
作为又一示例,指针链可被用来标识块110(或块集合),其中存储有映射表和空闲的列表。这样,可以交换块110(或用于一起或分别存储映射表和空闲的列表的块集合),而不存在磨损的问题。
空闲的列表的使用也可应用到指针链。在一实施例中,在链中指向中间块的指针与指向块的空闲的列表相关联,所述块将被用作新的中间块。当新的中间块产生时,使用标识在空闲的列表的块,并且将新的指针的值写到所述块。此外,将一些信息存储在此块中作为有效块(例如,通过包括版本号),并且未更新在基础块中指向中间块的指针。只有当空闲的列表耗尽时,更新基础块,以及到新的中间块的指针值和空闲的列表。
虽然示出了实施例,其中整数数量的映射表加上空闲的列表适合一个块,应该意识到这不是必需的。当映射表加上空闲的列表的尺寸以使一个块不能被整数数目映射表加上空闲列表所填满时,映射控制电路14可从一个块溢出到另一块写入最后的映射表加上空闲的列表。在这种情况,如果没有更多的映射表加上空闲的列表存储在溢出的映射表后,映射控制电路14在启动时使用溢出的映射表加上空闲的列表,并且映射控制电路14直到它在下一块中写一满的映射表加上的空闲的列表才擦除第一块。
图12a为其中没有立刻完全更新块的实施例。显示了存储用于逻辑块的的原始完整的数据集合的第一块120。显示了存储用于逻辑块的更新数据123的第二块122。
在实施例中,映射控制电路14配置用于响应命令来更新部分逻辑块,所述逻辑块例如从空闲的列表114c中通过选择空块映射到第一块120。所述空闲块成为第二块122。映射控制电路14仅将块的数据123的更新部分写入第二块122。当映射控制电路14接收这种的后续命令时,对于相同逻辑块中的单元,所述单元与先前更新的单元不重合,映射控制电路14将新的更新数据写入第二块122。映射控制电路14对于后续命令重复它。
如果在后续命令中的更新的确重叠,映射控制电路14复制第一块120的剩余(还未更新)单元到第二块122。映射控制电路14也将信息写入第二块122,这表明已完成第二块122。此后,第二块接管第一块120的部分,并且映射控制电路14(例如,从空闲的列表114c中)选择新的块以作为存储更新的第二块。随后,擦除原始的第一块120。
任何时候,例如当没有空闲块可用时,映射控制电路14可将第一块120的剩余(还未更新)单元复制到第二块122。然后,映射控制电路14也将信息写入到第二块122,这表示第二块已完成。此后,映射控制电路使用第二块122担任第一块120的作用,然后,擦除原始的第一块120。在实施例中,当装置关机时,映射控制电路14也执行此操作。
在读取期间,如果映射控制电路14接收来自逻辑块的读取命令,映射控制电路14确定第一和第二块120、122是否可用于逻辑块有效;如果是,决定读取操作是否涉及来自第二块122用于更新的单元的更新数据,或来自第一块120用于未更新值的原始数据。在前者中,映射控制电路14指导读取操作到第二块122,在后者中,映射控制电路指导读取操作到第一块。
优选地,映射控制电路14在映射表存储器12中存储另一校正,更新表示块的部分(或多个部分),用来识别在读操作中的更新数据123。例如,当已经写入更新时,所述另一校正存储在映射表存储器12中。
在实施例中,映射控制电路14在启动时,使用空闲的列表114c恢复更新。在此实施例中,映射控制电路14在列在空闲列表114c上的一个或更多的块上执行测试,以得到所述块是否包括数据和用于表示逻辑块的标签。如果是,映射控制电路14执行测试,以得到所述块是否包括表示块已经完成的信息。如果是,映射控制电路14使用所述块,来代替在映射表112c中用于逻辑块指示的块。如果映射控制电路14找到包括数据但未完成的块,映射控制电路14使用所述块作为第二块122,并且所述块在映射表122c中以与第一块的相同的逻辑块列出。在实施例中,映射控制电路14生成在这种情况下的另外校正,并且在映射表存储器中存储所述另外校正。
图12b示出一实施例,其中,除更新数据123之外,复制的数据也存储用于在更新数据123之前的地址。这简化了用于读取的另外校正:到更新数据123的末端的数据能从第二块122读出,并且跟随更新数据123的数据需要从第一块120读。这对于闪存10是特别有用的,在其中只能依次写块。在这种情况,在写操作中,映射控制电路14首先从第一块120复制一直到更新数据的数据到第二块122,然后将更新的数据123写到第二块122。
在另一实施例中,映射控制电路14测试另一写命令,以确定写入命令是否是到用于第一块120和第二块122使用的逻辑地址。如果是,映射控制电路14测试是否写命令被指导在更新数据后的块的单元中。如果是,映射控制电路14从第一块120复制数据到第二块122,从更新数据123的末端到另外写命令的地址的起始,然后在第二块122中写入另一写命令的数据。如果新的写命令的单元在部分被写的第二块之前或与之重叠,映射控制电路14选择空闲块作为第三块124,并且在从第二块122数据的复制之前,将用于新写命令的数据写入所述第三块124中。
在实施例中,映射控制电路14保持第一、第二和第三块120、122、124在使用中。当另一写操作发生在相同逻辑块,甚至可使用更多块。在此实施例中,映射控制电路14依靠读地址,完成来自所述块120、122、124中一个的读操作。相应地,映射控制电路14可存储表明所述块120、122、124的每个的另一校正,以及一直到存储最新数据的块中的单元。而且在任何时候(例如,当没有更多空闲的块可得到时),存储器映射控制电路14可清除所有的校正,以填补最小填充的块124(采用最新块122之前的下一部分,等等),并且在所述已完成的第三块124中存储信息。然后,映射控制电路14能擦除其它块120、122,并且将更新的存储器映射表和空闲的列表写入闪存10。
在启动时,映射控制电路14搜索列出在空闲列表123上的块,以确定所述块是否包括数据。如果用于逻辑块的块包括已完成的标识,映射控制电路14对于所述逻辑块使用所述块,以代替在映射表中列出的块。如果映射控制电路14发现一个或更多来自空闲列表的块包含用于相同逻辑块的数据,但是所述块中的任何一个都没有标识它是完成的,映射控制电路14建造参考已找到的块122、124的进一步校正信息。
原则上,当映射控制电路14接收写命令时,多于一个额外的块122、124用于逻辑块时,所述写入对在每个额外的块122、124中的最新更新的单元后的单元中的数据进行更新。映射控制电路14可以选择在哪里写入更新。在最旧的(最满的)额外块中写具有这种益处,在较新的块中将更多的空间留下用作更新,这减小了对额外的块的需要。然而,也可使用在较新的额外的块中的写,这具有这样的效果:在最新的块中的更新数据可延伸到在较旧的块中之外。在这种情况,映射控制电路14优选地擦除更旧的块。优选地,映射控制电路14也在块中写入信息,以表明在此情况中的更新的顺序,以用于在启动中形成另一校正。
如这里使用的,将链中的指针和映射表中的物理块的地址以及空闲的列表中的块地址定义为指向信息,以用来识别被指定各自功能的物理块的各自块。所述功能的典型例子是对于逻辑块地址作为块的功能的块,提供指针的块以及提供空闲列表的块。
例如,映射控制电路14作为可编程的处理电路实现,通过使用这里描述的块以指令的程序编程。可替代地,可实现部分或全部映射控制电路14以专门用于执行所述功能的电路。
虽然显示的是其中使用指向单个块的指向信息,并且使用单个块存储指向信息(作为擦除单元的块)的实施例,应该意识到,代替的指向信息,可以使用指向这种擦除单元的组的信息,和/或使用单元的组来存储连续的有效指针值。
虽然所示实施例,其中将(另外)校正的列表存储在映射表存储器12中,它最好为RAM存储器,例如SRAM或DRAM,应当理解,可替代地,可以设置额外的RAN存储器(未示出),与更新控制电路14耦合,以存储校正的列表。同样,其它信息,例如从随后的指针链得到的最后指针,可以将在写后续更新等中使用的非空块的标识存储在映射表存储器12或这样的额外的RAM存储器中,以使仅在启动时,并且可选地,在稍后的一些例外时间点,例如,在重置信号或错误信号的接受以后,需要通过闪存10搜索整个信息。
应该理解的是,一些物理块可在时间过程中成为不能用的,例如在将这些块擦除多于一定数量的次数后,由于磨损,或由于出现在块中的其它错误。当上述情况发生时,映射控制电路14避免使用所述块。一旦块被放弃,所述块从映射表和空闲的列表移除。可选地,映射控制电路14保持代表映射控制电路14将不再在闪存10中使用的物理块地址的“坏的列表”的信息。当一个块被放弃时,将所述块加入“坏的列表”,但并不需要在闪存10中的空闲的列表或映射表中立刻更新。可延迟稍后的更新直至空闲的列表耗尽。在启动时,映射控制电路14测试坏的列表,得到是否在空闲的列表或映射表中参考的块也在坏的列表上,并且如果是,映射控制电路14按照所述块未在这些列表上的方式执行。

Claims (14)

1、一种存储器设备,所述设备包括:
非易失性主存储器(10),包括多个存储单元的物理块,所述主存储器(10)支持每次至少一个物理块的擦除;
映射控制电路(14),配置用于维护指向信息,所述指向信息用来识别分配给各个功能的相应物理块,以定义物理块的子集(40、42),并且在来自所述子集(40、42)的第一和第二物理块(40、42)的中存储指向信息的连续版本,所述映射控制电路(14)配置用于在将指向信息的第一版本存储到第二物理块(42)中后,擦除所述第一物理块(40),所述第一版本不比第一物理块(40)中的指向信息更新,所述映射控制电路(14)配置用于至少在所述设备启动时,通过测试所定义的子集(40、42)中的哪一个物理块包含指向信息的最新版本来恢复所述指向信息。
2、根据权利要求1所述的存储器设备,其中所述映射控制电路(14)配置用于通过在子集中搜索部分填充的块来执行所述测试,所述部分填充的块仅部分地被写入,并且使用来自所述部分填充块的指向信息的最后写入版本,如果未找到部分填充的块,所述映射控制电路配置用于使用来自已填满的块的指向信息的最后写入版本。
3、根据权利要求1所述的存储器设备,其中所述映射控制电路(14)配置用于与所述指向信息版本一起写入版本号,通过搜索具有最新版本号的指向信息的版本执行所述测试。
4、根据权利要求1所述的存储器设备,其中映射控制电路(14)配置用于允许将从第一物理块(40)溢出的指向信息的版本写入第二物理块(42),仅在第二物理块(42)中已写满映射表后,擦除第一物理块(40)。
5、根据权利要求1所述的存储器设备,其中所述映射控制电路(14)配置用于维护映射表,所述映射表将逻辑地址映射到物理块或物理块组,所述指向信息包括映射表,所述映射控制电路(14)配置用于针对所述子集的一个或多个块(40、42、60、62)中彼此独立的逻辑地址空间的各段,存储映射表的各个版本。
6、根据权利要求5所述的存储器设备,其中所述映射控制电路(14)配置用于针对第一物理块(40)中彼此混合的不同段,存储映射表部分的各个版本,将针对至少一个所述段的映射表部分的新版本写入第二物理块(42),在擦除第一物理块(40)前,将第二物理块(42)中没有存储任何版本的映射表部分的最新版本从第一物理块(40)复制到第二物理块(42)中。
7、根据权利要求5所述的存储器设备,其中所述映射控制电路(14)配置用于针对所述子集(60、62)中的不同块(62)的不同段,存储映射表部分的各个版本,第二物理块(62)是不同于其他块的备份块,所述映射控制电路(14)配置用于在擦除第一物理块(60)后,使用第一物理块(60)作为用于代替映射表部分的子集(60、62)的不同块的任何一个的备份块。
8、根据权利要求1所述的存储器设备,其中所述映射控制电路(14)配置用于维护存储在各个块(70、74)中的指针链(72、75),每个非最终指针(72)指向包含指针链中的下一块的相应块(74),指针链中的最终指针(75)指向来自子集(40、42)的块()。
9、根据权利要求1所述的存储器设备,其中所述映射控制电路(14)配置用于维护存储在各自块中的指针链(72、75),指针链中的每个非最终指针(72)指向包含指针链中的下一块的相应块,指针链中的最终指针(75)指向至少包含部分映射表的块,所述映射表用于将逻辑地址映射到块或块组,所述指向信息包括至少一个指针。
10、根据权利要求1所述的存储器设备,其中所述映射控制电路(14)配置用于维护指针树(72、72a、75、75a),指针树中的每个非最终指针(72,72a)指向包含指针树中的下一块的相应块(74、74a),指针树中的最终指针(72、72a)指向来自子集(40、42)的各个块,至少当第一指针指向包括第二指针的块时,将第一和第二指针(72、72a、75、75a)存储在相互不同块中。
11、根据权利要求1所述的存储器设备,其中指针的每个版本包括用于识别物理块中的使用块的信息和用于识别物理块中的空闲块的另一信息,所述使用块已被分配给相应的功能,所述空闲块在生成所述版本时仍未被分配,所述映射控制电路(14)配置用于使用所述另一信息来选择空闲块以代替使用块,并使用来自主存储器(10)的所述另一信息,在启动时,搜索至少一个空闲块,以确定是否任何一个使用块已被所述至少一个空闲块所代替。
12、根据权利要求1所述的存储器设备,其中所述主存储器(10)为闪存。
13、根据权利要求1所述的存储器设备,包括RAM存储器,所述映射控制电路(14)配置用于存储直接指针,所述直接指针直接指向RAM存储器中的指向信息的最新版本,并且在启动后的操作期间使用直接指针定位指向信息。
14、一种操作非易失性主存储器(10)的方法,所述主存储器(10)包括多个存储单元的物理块,所述主存储器(10)支持每次至少一个物理块的擦除,所述方法包括:
在物理块的子集(40、42)中存储指向信息,以用于识别分配给各自功能的相应物理块;
识别所述物理块的子集(40、42);
初始在子集(40、42)的第一物理块(40)中相互不同的存储单元处存储指向信息的连续版本;
至少在已填满第一块(40)后,在第二物理块(42)中存储指向信息的后续版本,所述后续版本比前述连续版本更新;
在存储后续版本后,擦除第一块(40),
至少在主存储器启动时,通过测试子集(40、42)中的哪一个物理块包括指向信息的最新版本,来恢复所述指向信息。
CN2006800488004A 2005-12-21 2006-12-13 具有可块擦除单元的非易失性存储器 Active CN101346703B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP05112626 2005-12-21
EP05112626.6 2005-12-21
PCT/IB2006/054798 WO2007072317A2 (en) 2005-12-21 2006-12-13 Non-volatile memory with block erasable locations

Publications (2)

Publication Number Publication Date
CN101346703A true CN101346703A (zh) 2009-01-14
CN101346703B CN101346703B (zh) 2012-11-21

Family

ID=38091192

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2006800488004A Active CN101346703B (zh) 2005-12-21 2006-12-13 具有可块擦除单元的非易失性存储器

Country Status (5)

Country Link
US (1) US9213627B2 (zh)
EP (1) EP1966700A2 (zh)
JP (1) JP2009521045A (zh)
CN (1) CN101346703B (zh)
WO (1) WO2007072317A2 (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101923516A (zh) * 2009-05-15 2010-12-22 旺宏电子股份有限公司 以区块为基础的快闪存储装置及其操作方法
CN102591589A (zh) * 2010-11-15 2012-07-18 三星电子株式会社 数据存储设备、用户设备以及数据写方法
US8745357B2 (en) 2009-11-30 2014-06-03 Hewlett-Packard Development Company, L.P. Remapping for memory wear leveling
CN107943711A (zh) * 2016-10-12 2018-04-20 慧荣科技股份有限公司 数据储存装置及其数据维护方法
CN107957848A (zh) * 2016-10-14 2018-04-24 上海交通大学 重删处理方法及存储设备
CN111758086A (zh) * 2020-05-22 2020-10-09 长江存储科技有限责任公司 用于ssd的映射表的刷新方法
CN113050877A (zh) * 2019-12-27 2021-06-29 北京兆易创新科技股份有限公司 一种映射表存储的方法、装置、电子设备及存储介质

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7769945B2 (en) 2007-01-18 2010-08-03 Sandisk Il Ltd. Method and system for facilitating fast wake-up of a flash memory system
WO2008087634A1 (en) * 2007-01-18 2008-07-24 Sandisk Il Ltd. A method and system for facilitating fast wake-up of a flash memory system
TWI372396B (en) 2007-09-28 2012-09-11 Phison Electronics Corp Method of protecting data for power failure and controller using the same
US9208108B2 (en) * 2008-12-19 2015-12-08 Nvidia Corporation Method and system for improved flash controller commands selection
US8694750B2 (en) * 2008-12-19 2014-04-08 Nvidia Corporation Method and system for data structure management
US8732350B2 (en) * 2008-12-19 2014-05-20 Nvidia Corporation Method and system for improving direct memory access offload
US8239614B2 (en) * 2009-03-04 2012-08-07 Micron Technology, Inc. Memory super block allocation
US8595572B2 (en) 2009-04-08 2013-11-26 Google Inc. Data storage device with metadata command
US8205037B2 (en) 2009-04-08 2012-06-19 Google Inc. Data storage device capable of recognizing and controlling multiple types of memory chips operating at different voltages
US8560770B2 (en) * 2009-11-13 2013-10-15 Seagate Technology Llc Non-volatile write cache for a data storage system
US8683293B2 (en) * 2009-12-16 2014-03-25 Nvidia Corporation Method and system for fast two bit error correction
US20110161553A1 (en) * 2009-12-30 2011-06-30 Nvidia Corporation Memory device wear-leveling techniques
US9594675B2 (en) * 2009-12-31 2017-03-14 Nvidia Corporation Virtualization of chip enables
JP4987997B2 (ja) * 2010-02-26 2012-08-01 株式会社東芝 メモリシステム
US9465728B2 (en) 2010-11-03 2016-10-11 Nvidia Corporation Memory controller adaptable to multiple memory devices
CN108595345B (zh) 2012-07-25 2021-11-23 慧荣科技股份有限公司 管理闪存中所储存的数据的方法及相关记忆装置与控制器
DE102012218363A1 (de) * 2012-10-09 2014-04-10 Continental Automotive Gmbh Verfahren zur Steuerung eines getrennten Ablaufs von verknüpften Programmblöcken und Steuergerät
US9455048B2 (en) * 2013-06-28 2016-09-27 Sandisk Technologies Llc NAND flash word line management using multiple fragment pools
US9990278B2 (en) * 2014-10-20 2018-06-05 Cypress Semiconductor Corporation Overlaid erase block mapping
TWI579696B (zh) * 2015-11-06 2017-04-21 群聯電子股份有限公司 資料重建方法與系統及其記憶體控制電路單元
US9857988B1 (en) * 2016-07-10 2018-01-02 Winbond Electronics Corporaiton Data management in multiply-writeable flash memories
WO2019222958A1 (en) 2018-05-24 2019-11-28 Alibaba Group Holding Limited System and method for flash storage management using multiple open page stripes
US11816043B2 (en) 2018-06-25 2023-11-14 Alibaba Group Holding Limited System and method for managing resources of a storage device and quantifying the cost of I/O requests
US11327929B2 (en) 2018-09-17 2022-05-10 Alibaba Group Holding Limited Method and system for reduced data movement compression using in-storage computing and a customized file system
US11061735B2 (en) 2019-01-02 2021-07-13 Alibaba Group Holding Limited System and method for offloading computation to storage nodes in distributed system
TWI745695B (zh) 2019-05-22 2021-11-11 慧榮科技股份有限公司 用來進行無預警斷電復原管理之方法、記憶裝置及其控制器以及電子裝置
US10860223B1 (en) 2019-07-18 2020-12-08 Alibaba Group Holding Limited Method and system for enhancing a distributed storage system by decoupling computation and network tasks
US11126561B2 (en) * 2019-10-01 2021-09-21 Alibaba Group Holding Limited Method and system for organizing NAND blocks and placing data to facilitate high-throughput for random writes in a solid state drive
US11617282B2 (en) 2019-10-01 2023-03-28 Alibaba Group Holding Limited System and method for reshaping power budget of cabinet to facilitate improved deployment density of servers
US11449455B2 (en) 2020-01-15 2022-09-20 Alibaba Group Holding Limited Method and system for facilitating a high-capacity object storage system with configuration agility and mixed deployment flexibility
US11379447B2 (en) 2020-02-06 2022-07-05 Alibaba Group Holding Limited Method and system for enhancing IOPS of a hard disk drive system based on storing metadata in host volatile memory and data in non-volatile memory using a shared controller
US11449386B2 (en) 2020-03-20 2022-09-20 Alibaba Group Holding Limited Method and system for optimizing persistent memory on data retention, endurance, and performance for host memory
US11385833B2 (en) 2020-04-20 2022-07-12 Alibaba Group Holding Limited Method and system for facilitating a light-weight garbage collection with a reduced utilization of resources
US11301173B2 (en) 2020-04-20 2022-04-12 Alibaba Group Holding Limited Method and system for facilitating evaluation of data access frequency and allocation of storage device resources
US11281575B2 (en) 2020-05-11 2022-03-22 Alibaba Group Holding Limited Method and system for facilitating data placement and control of physical addresses with multi-queue I/O blocks
US11461262B2 (en) 2020-05-13 2022-10-04 Alibaba Group Holding Limited Method and system for facilitating a converged computation and storage node in a distributed storage system
US11494115B2 (en) 2020-05-13 2022-11-08 Alibaba Group Holding Limited System method for facilitating memory media as file storage device based on real-time hashing by performing integrity check with a cyclical redundancy check (CRC)
US11556277B2 (en) 2020-05-19 2023-01-17 Alibaba Group Holding Limited System and method for facilitating improved performance in ordering key-value storage with input/output stack simplification
US11507499B2 (en) 2020-05-19 2022-11-22 Alibaba Group Holding Limited System and method for facilitating mitigation of read/write amplification in data compression
US11263132B2 (en) 2020-06-11 2022-03-01 Alibaba Group Holding Limited Method and system for facilitating log-structure data organization
US11354200B2 (en) 2020-06-17 2022-06-07 Alibaba Group Holding Limited Method and system for facilitating data recovery and version rollback in a storage device
US11422931B2 (en) 2020-06-17 2022-08-23 Alibaba Group Holding Limited Method and system for facilitating a physically isolated storage unit for multi-tenancy virtualization
US11354233B2 (en) 2020-07-27 2022-06-07 Alibaba Group Holding Limited Method and system for facilitating fast crash recovery in a storage device
US11372774B2 (en) 2020-08-24 2022-06-28 Alibaba Group Holding Limited Method and system for a solid state drive with on-chip memory integration
US11487465B2 (en) 2020-12-11 2022-11-01 Alibaba Group Holding Limited Method and system for a local storage engine collaborating with a solid state drive controller
US11734115B2 (en) 2020-12-28 2023-08-22 Alibaba Group Holding Limited Method and system for facilitating write latency reduction in a queue depth of one scenario
US11416365B2 (en) 2020-12-30 2022-08-16 Alibaba Group Holding Limited Method and system for open NAND block detection and correction in an open-channel SSD
US11726699B2 (en) 2021-03-30 2023-08-15 Alibaba Singapore Holding Private Limited Method and system for facilitating multi-stream sequential read performance improvement with reduced read amplification
US11461173B1 (en) 2021-04-21 2022-10-04 Alibaba Singapore Holding Private Limited Method and system for facilitating efficient data compression based on error correction code and reorganization of data placement
US11476874B1 (en) 2021-05-14 2022-10-18 Alibaba Singapore Holding Private Limited Method and system for facilitating a storage server with hybrid memory for journaling and data storage

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4046877B2 (ja) 1998-12-14 2008-02-13 株式会社ルネサステクノロジ 一括消去型不揮発性メモリおよび携帯電話
GB9903490D0 (en) * 1999-02-17 1999-04-07 Memory Corp Plc Memory system
US6282605B1 (en) * 1999-04-26 2001-08-28 Moore Computer Consultants, Inc. File system for non-volatile computer memory
JP3495709B2 (ja) 2001-01-12 2004-02-09 三洋電機株式会社 データ記録装置
US6763424B2 (en) 2001-01-19 2004-07-13 Sandisk Corporation Partial block data programming and reading operations in a non-volatile memory
US6711663B2 (en) * 2001-11-15 2004-03-23 Key Technology Corporation Algorithm of flash memory capable of quickly building table and preventing improper operation and control system thereof

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101923516A (zh) * 2009-05-15 2010-12-22 旺宏电子股份有限公司 以区块为基础的快闪存储装置及其操作方法
CN101923516B (zh) * 2009-05-15 2013-02-06 旺宏电子股份有限公司 以区块为基础的快闪存储装置及其操作方法
US8745357B2 (en) 2009-11-30 2014-06-03 Hewlett-Packard Development Company, L.P. Remapping for memory wear leveling
CN102591589A (zh) * 2010-11-15 2012-07-18 三星电子株式会社 数据存储设备、用户设备以及数据写方法
US9563549B2 (en) 2010-11-15 2017-02-07 Samsung Electronics Co., Ltd. Data storage device, user device and data write method
CN107943711A (zh) * 2016-10-12 2018-04-20 慧荣科技股份有限公司 数据储存装置及其数据维护方法
CN107957848A (zh) * 2016-10-14 2018-04-24 上海交通大学 重删处理方法及存储设备
CN107957848B (zh) * 2016-10-14 2020-01-10 上海交通大学 重删处理方法及存储设备
CN113050877A (zh) * 2019-12-27 2021-06-29 北京兆易创新科技股份有限公司 一种映射表存储的方法、装置、电子设备及存储介质
CN113050877B (zh) * 2019-12-27 2024-03-01 兆易创新科技集团股份有限公司 一种映射表存储的方法、装置、电子设备及存储介质
CN111758086A (zh) * 2020-05-22 2020-10-09 长江存储科技有限责任公司 用于ssd的映射表的刷新方法

Also Published As

Publication number Publication date
JP2009521045A (ja) 2009-05-28
WO2007072317A3 (en) 2008-01-31
CN101346703B (zh) 2012-11-21
US9213627B2 (en) 2015-12-15
EP1966700A2 (en) 2008-09-10
US20080270681A1 (en) 2008-10-30
WO2007072317A2 (en) 2007-06-28

Similar Documents

Publication Publication Date Title
CN101346703B (zh) 具有可块擦除单元的非易失性存储器
CN101346704B (zh) 具有可擦除块单元的存储器和定位具有指针信息地块的联结指针链
CN101346702B (zh) 具有可块擦除单元的存储器
CN101169751B (zh) 具有闪存设备的系统及其数据恢复方法
CN101025712B (zh) 使用非易失性存储器的存储设备及其映射信息恢复方法
US7761655B2 (en) Storage system and method of preventing deterioration of write performance in storage system
CN100419714C (zh) 闪存存取方法、闪存文件系统的块替换方法及其管理装置
EP1435576B1 (en) Method and apparatus for block-oriented memory management provided in smart card controllers
CN101681314B (zh) 存储器系统
US8239612B2 (en) Memory controller, flash memory system with memory controller, and control method of flash memory
JP4828816B2 (ja) メモリカード、半導体装置、及びメモリカードの制御方法
CN105122220A (zh) 固态驱动器中的原子写入命令支持
CN102063380B (zh) 一种向非易失性存储器写入数据的方法及装置
CN105027090A (zh) 用于固态驱动器中的物理到逻辑映射的方法、设备和系统
JP2002169729A (ja) 不揮発性メモリユニットのコントローラ、同コントローラを有するメモリシステム及び不揮発性メモリユニットの制御方法
CN101689140A (zh) 存储器系统
US9471485B2 (en) Difference L2P method
US9710378B2 (en) Writing an address conversion table for nonvolatile memory wear leveling
CN101901189A (zh) 更新用户数据的方法以及恢复用户数据的方法
CN104516959A (zh) 一种管理数据库日志的方法及装置
JP2009211215A (ja) メモリシステム
JP2009205689A (ja) フラッシュディスク装置
WO2007096844A2 (en) Memory with block-erasable locations
WO2010145967A1 (en) Memory device for managing the recovery of a non volatile memory
CN115202579A (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