專利名稱:具有可擦除塊單元的存儲器和定位具有指針信息地塊的聯(lián)結(jié)指針鏈的制作方法
技術(shù)領域:
本發(fā)明涉及存儲器件及其制造方法。
背景技術(shù):
美國專利No 6,711,663公開了一種閃存器件。數(shù)據(jù)能從閃存器件中 讀取,或多或少從任意半導體存儲器件。寫入數(shù)據(jù)更為復雜。典型地, 寫入包括擦除存儲器單元的塊,然后在已擦除的塊中編程數(shù)據(jù)頁。典 型地,可以僅能對整個塊集體地執(zhí)行擦除,由此在此情況中形成擦除 單元。編程通??梢酝ㄟ^限定所謂的頁在更小的單元完成。
閃存器件具有遭受磨損的問題。在用壞數(shù)據(jù)塊之前,只能對所述 數(shù)據(jù)塊進行有限次數(shù)的擦除和編程,之后數(shù)據(jù)塊將不能可靠地使用。 如果將特定地址的閃存器件的塊比其它塊更經(jīng)常地擦除和編程,這些 塊的使用壽命將限制閃存器件的使用壽命。
通過使用物理地址映射的時變邏輯己經(jīng)解決了此問題。可以將所 述映射用于使地用于存取閃存的邏輯地址能夠在不同時間指的是閃存 的不同物理塊中的單元。因此,能夠?qū)⑿枰l繁擦除和編程的邏輯地 址每次映射到不同物理塊中,以避免每當擦除和編程邏輯塊時,不得 不擦除和編程相同物理塊(此處使用的"邏輯塊"指在物理塊中映射 到完整的可映射地址集的地址集,和可選地和寬松地,映射到在這些 單元中存儲的數(shù)據(jù)的地址集)。
對于物理映射的有效邏輯需要映射表,所述映射表包括根據(jù)與它 們相對應的邏輯地址存儲的物理地址。原則上,當進行物理地址到邏 輯地址的映射改變時,必須每次更新這種映射表。通常,用于閃存的 這種映射表存儲在RAM存儲器中。在上電時,所述映射表根據(jù)存儲在 閃存中的"標簽"重建,對于不同物理存儲區(qū)(例如,塊),所述"標簽"表示其當前邏輯地址。
美國專利No 6,711,663描述了存儲在閃存本身中的映射表的使用。 美國專利No 6,711,663使用按段組織的映射。將存儲器組織為多個塊的 段。為每個段提供映射表,所述映射表把用于段的邏輯地址翻譯成段 中的物理地址。選擇段的尺寸,使得每個映射表的尺寸與存儲器頁相 對應,也就是閃存的編程單元。
美國專利No6,711,663在每個段中設置"存儲器更新塊",用于存 儲所述段的映射表的連續(xù)版本。使用存儲器更新塊的最后編程頁作為 映射表。每次當段的映射表變化時,將更新的映射表編程在存儲器更 新塊的下一頁中。在每個變化后,將使用新的頁來存儲映射表,直至 將存儲器更新塊的所有頁都編程為止。當存儲器表的下一更新在將所 有頁編程后發(fā)生時,擦除存儲器更新塊,并且將新的存儲器表寫進已 擦除的塊的第一頁中。
所述方法具有優(yōu)點在上電時,不需要時間根據(jù)標簽來重建映射 表。相反,可以從閃存中直接恢復映射表。
然而,由于頻繁的更新,存儲映射表的塊可能遭受增多的磨損。
發(fā)明內(nèi)容
其中,本發(fā)明的目的是提供一種具有存儲器的裝置,所述設備存儲 映射表,并且避免由于映射表的更新導致的不受限制的磨損。
提供根據(jù)權(quán)利要求l的設備。其中映射控制電路在主存儲器(例如 閃存)的塊的各個部分存儲指針的鏈。在鏈中的每個非最終指針指向 各個塊,該各個塊包含在鏈中的下一指針。映射控制電路在主存儲器 中也存儲指向信息。在鏈中的最終指針指向包含指向信息的塊。初始 的指針優(yōu)選地存儲在預先設定的塊中。通過這種方法,映射控制電路 能夠通過下述鏈在動態(tài)選擇的塊中定位指向信息。
在一個實施例中,在多次更新塊中的指向信息后,映射控制電路代 替包含指向信息的塊。然后,更新最終指針以指向代替塊。因此,當 寫指向信息的新版本時,直到代替包含指向信息的塊,才需要更新最 終指針,因此遭受較小的磨損。在一個實施例中,其中使用更長的鏈,在多次更新后,也可代替包含沿著鏈的指針。在這種情況,沿鏈的上 游,代替頻率能變得更低,以使在鏈的根部能避免過多的磨損。在另 一實施例中,例如,如果發(fā)生多于閾值數(shù)量的更新,通過擴充鏈,鏈 的長度為動態(tài)變化以保持在需要的范圍內(nèi)到鏈的根部的更新的數(shù)量。
在另一實施例中,使用指針樹,所述鏈為樹的一部分。因此,樹中 的節(jié)點可通過多個指針分支到多個后繼者。
在另一實施中,將每個指針的連續(xù)的版本寫到各個用于指針的塊中 的相互不同的單元。在該實施例中,映射控制電路通過搜索用于最新 版本的塊恢復特定指針的最新版本。通過這種方法,每次當指針變化 時,不需要擦除塊,這減小磨損,同時僅需要在塊中有限的搜索,或 在啟動時,用于塊的一些替代。在又一實施例中,當用于指針的原始 塊為滿時,保留備用塊以寫指針的新的版本。隨后,擦除用于指針的 原始塊。這避免了由于中斷導致的指針的丟失。在啟動時,映射控制 擴充用于指針的搜索到備用塊,至少當映射控制電路檢測用于特定指 針的塊為滿時。在另一實施例中,將指向原始塊和備用塊的另外的指 針一起存儲在主存儲器的塊中。
在另一實施例中,備用塊可用于不同指針的多個不同塊共享。在這 種情況,每次當將指針寫到備用塊時,用于指針的原始塊隨后可用作 所有指針的備用塊。
在另一實施例中,鏈為指針樹的一部分。在這種情況,在樹中,來 自相同節(jié)點用于不同分支的另外的指針可指向原始塊和備用塊,以至 于能很快地識別這些塊能。來自節(jié)點的另外的指針也可指向用于不同 指針的塊和它們共享的備用塊。在另一實施例中,將這些來自相同節(jié) 點的另外的指針一起存儲在相同的塊中。
在另一實施例中,鏈為樹的一部分,并且樹中的不同最終指針指向 包含指向信息的各個塊。因此,能夠容易地找到在多于一個塊上重新 分配的指向信息。
在另一實施例中,指向來自相同節(jié)點的不同分支的指針的連續(xù)的版 本,以取決于指針更新的順序的動態(tài)選擇的次序,作為新的版本到達 而存儲。在啟動時,映射控制電路通過搜索塊恢復用于每個分支的指
針的最新版本。通過這種方法,需要用于存儲指針的塊的數(shù)量能保持 很小。在又一實施例中,可設置備用塊,當先前使用的塊為滿時,將 指針的新版本寫到來自節(jié)點的分支。在這種情況,將用于來自該節(jié)點 的其它分支的指針的版本復制到備用塊和先前使用的塊。在啟動時, 當映射控制電路檢測各個塊為滿時,映射控制電路通過備用塊搜索用 于分支的指針。
根據(jù)附圖中所示示范實施例的描述,這些和其它目的及有益方面 將顯而易見。
圖l為具有存儲器的設備; 圖2為執(zhí)行寫入操作的流程圖3為上電流程圖4a-d為具有指針的連續(xù)版本的存儲器的塊;
圖5為具有不同映射表段指針的存儲器的塊;
圖6為具有不同映射表段指針的存儲器的塊;
圖7a-c為具有指針鏈的存儲器的塊;
圖8a-c為具有指針樹的存儲器的塊;
圖9a-b為具有指針鏈的存儲器的塊;
圖10a-b為具有指針鏈的存儲器的塊;
圖ll為空閑列表的使用;
圖12a-b為空閑列表的使用。
具體實施例方式
圖1為具有存儲器的設備。所述設備包括閃存10、映射表存儲器12、 映射控制電路14、處理器16和多路器18a 、 b。作為示例,映射控制電 路14可以實現(xiàn)為用計算機程序編程的可編程電路,所述計算機程序使 得所述映射控制電路執(zhí)行映射控制的功能。處理器16具有與映射控制 電路14的控制連接。處理器16和映射控制電路14的數(shù)據(jù)輸入-輸出與閃 存10的數(shù)據(jù)輸入-輸出相連。映射控制電路14和處理器16具有用于塊地
址部分(可選地也包括頁地址部分)的地址輸出和剩余地址部分。來
自處理器16和映射控制電路14的塊地址部分輸出和剩余地址部分輸出 經(jīng)由多路器18a、 b的相應多路器與閃存10的塊地址輸入和剩余地址輸 入相連。來自處理器16的地址輸出經(jīng)由映射表存儲器12與多路器18b 相連。映射控制電路14具有與映射表存儲器12和多路器18a、 b相連的
控制輸出。
閃存10是這種類型,它允許每次存儲單元的至少一個塊的擦除操 作。因此,將擦除單位稱為塊。能一次一頁地對存儲單元進行編程。 典型地,每個塊包括多個頁。
在正常的讀取操作中,處理器16向存取存儲單元輸出讀取地址。 所述地址包括塊地址部分和剩余地址部分。通過映射表存儲器12將讀 取地址的塊地址部分翻譯成物理塊地址,并且提供給閃存IO。典型地, 翻譯包括使用邏輯塊地址作為用于映射表存儲器12的地址以恢復相應 的物理地址。無需翻譯,將剩余地址部分提供給閃存IO。在更先進的 實施例中,讀取地址翻譯可以包括地址的頁地址部分和塊地址部分組 合的翻譯。
圖2表示寫入操作的流程圖。在第一步驟21中,處理器16向映射控 制電路14發(fā)出用于寫入操作的請求以及應該應用于寫入操作的邏輯塊 地址。在第二步驟22中,映射控制電路14選擇將用于寫入的物理塊。 在更先進的實施例中,映射控制電路14選擇將用于寫入的物理塊和物 理頁。所選擇的塊和頁應該為未用于另一邏輯塊地址的己擦除的塊, 或者在先進的實施例中,應該為未使用的已擦除頁??蛇x地,如果還 未擦除那個塊,映射控制電路14使得閃存10擦除所述未使用的塊。如
果沒有擦除任一個未使用的塊,在任何情況下這些都將執(zhí)行。
映射控制電路14向處理器16請求寫入的邏輯塊(或頁)分配所選 擇的物理塊(或頁)。在第三步驟23中,映射控制電路14構(gòu)造用于將邏 輯地址映射到物理地址的新映射表,以說明新近分配的塊(或頁)。在 實施例中,映射控制電路14更新在映射表存儲器12中的映射表,并使
得閃存對用于在物理塊(或頁)的存儲單元中的邏輯塊(或頁)的新 數(shù)據(jù)進行編程。
在第四步驟24中,映射控制電路14識別塊集合(a set of blocks) 的最初一個,分配所述塊用于存儲包括至少一個已編程頁的映射表。
然后,映射控制電路14在所述己分配塊的所述最初塊中搜索連續(xù) 地第一個未使用頁或頁集合。在第五步驟25中,映射控制電路14測試 是否找到了所述頁或頁集合。如果找到,映射控制電路14執(zhí)行第六步 驟26,在已經(jīng)找到的頁或多個頁中編程新的映射表。如果映射控制電 路14在所述塊集合的最初塊中找到未使用的頁,映射控制電路14分支 到第七步驟27,其中映射控制電路14選擇分配用于存儲映射表的塊集 合的下一個塊集合。在第八步驟28中,映射控制電路14在所述已分配 塊集合的下一個塊集合中的連續(xù)地第一個未使用頁或頁集合中編程新 的映射表。在第九步驟29中,映射控制電路14控制閃存10擦除已分配
塊集合的初始塊集合。
圖3為設備的上電流程圖。在第一步驟31中,映射控制電路14識別 塊集合的最初一個,所述塊集合分配用于存儲包括至少一個已編程頁 的映射表。然后,映射控制電路14在所述己分配塊的最初一個中搜索 連續(xù)地最后使用的頁或頁集合。在第二步驟32中,映射控制電路14從 最后使用的頁將映射表復制到映射表存儲器12中。在第三步驟33中, 映射控制電路14開始系統(tǒng)的正常操作。
應當注意,在第九步驟29中擦除所述塊的最初一個之前,在第八 步28驟中,映射控制電路14將新的映射表編程到閃存10中。如果此過
程由于某種原因(例如去除了 (一部分)系統(tǒng)的電源)而中斷,則存 在將執(zhí)行第八步驟28而沒有執(zhí)行第九步驟29的風險。映射控制電路14
配置用于通過檢測分配用于存儲映射表的塊中之一是滿的并且這些已 分配塊的至少一個其它塊不是空的,來在上電時進行檢測。如果是這 樣,優(yōu)選地,映射控制電路14在上電時沒有完全充滿的已分配塊之一 中使用連續(xù)地最后使用的頁或頁集合,并且使得閃存io擦除已充滿的 己分配塊??商娲兀成淇刂齐娐?4可以使用已完全分配塊的隨后 使用的頁或頁集合。在這種情況,可能錯過新近編程的數(shù)據(jù),但是如 果圖2的過程更早中斷,無論如何就是這種情況。
圖4a-c為分配用于存儲映射表的塊集合中的頁的使用的三個階
段。在每幅圖中,示出了兩個塊40、 42的相同集合。用陰影表示己經(jīng) 用映射表編程的頁。用無陰影表示己擦除的(空閑)塊。在實施例中, 對每頁中的標記比特進行編程以表示頁是空閑的還是己編程的??商?代地,空閑塊可通過測試在塊中的所有數(shù)據(jù)是否為已擦除狀態(tài)(例如, 邏輯比特值O而檢測,可選地如果有ECC (在塊中使用糾錯碼),就 通過測試ECC是否表示錯誤而檢測。可替代地,如果將標簽和數(shù)據(jù)一 起寫入,通過測試現(xiàn)有的正確標簽的存在而檢測。
舉例來說,將這些頁顯示為向下增加的地址,以使得最高的所示 頁具有最低的地址。
在第一階段(圖4a)中,使用映射表對第一塊40的部分頁進行編 程。當塊40、 42處于此狀態(tài)時,映射控制電路14在上電時將使用的非 空閑塊40中的最低所示的已編程頁。當處理器16要求寫入時,映射控 制電路14將選擇在非空閑塊40中的最高所示的空閑頁,用于對新的映 射表進行編程。
在第二階段(圖4b)中,使用映射表對第一塊40的所有頁進行編 程,并且第二塊42為空閑的。在這種情況,映射控制電路14在上電時 進行,與如圖4a中的情況相同。當處理器16要求寫入時,映射控制電 路14在第二塊中選擇第一個空閑頁,用于對新的映射表進行編程。在 對新的映射表進行編程之后,映射控制電路14擦除滿的塊,這將導致 如圖4c所示的第三階段。
在第三階段(圖4c)中,第一塊40為空閑的,并且已經(jīng)對第二塊 42的一部分進行編程。當塊40、 42處于該狀態(tài)時,這些塊的作用與圖 4a中的相反。
圖4d表示由于供電電源的過早斷開,可能在第二階段(圖4b)之 后而出現(xiàn)的狀態(tài)。 一個塊40是滿的,并且其它塊42為非空閑的。如果 映射控制電路14在上電時遇到這種狀態(tài),映射控制電路14將擦除滿的 塊,并且使用來自未滿的塊42的映射表。
在替代實施例中,映射控制電路14寫入伴隨映射表的版本號,每 次當寫入表(或根據(jù)預定順序改變)時,版本號增長。在此實施例中, 可以通過選擇具有最前面版本號的映射表識別映射表的有效版本。在
又一實施例中,映射控制電路14可將帶有版本號的更新寫入中間塊的任何一個中,例如如果其它塊是滿的,寫完之后擦除其它塊。
在另一實施例中,在寫入新的塊以協(xié)助在上電時選擇正確的塊之 前,映射控制電路可以配置用于在滿的塊中設置"臟"標志。在這種
情況,映射控制電路14首先試圖使用來自未標記為臟塊的最新的映射 表。如果此塊為空閑的(由于錯誤),映射控制電路14將求助于臟塊。
版本號可循環(huán)變化。版本號可與在塊中具有映射表的頁的位置一 起使用,以代替為搜索正確塊的目的而測試滿的和空閑的塊。在這種 情況,短循環(huán),比如四個不同版本號可以滿足要求。雖然有實施例已 經(jīng)示出其中整數(shù)的映射表適應一個塊,但應意識到這不是必需的。當 映射表的尺寸使得整數(shù)的映射表不能填滿塊時,映射控制電路14可從 一個塊溢出到其它塊來寫入最新的映射表。在這種情況,如果在溢出 的映射表之后沒有存儲另外的映射表,映射控制電路14在啟動時使用 所示溢出映射表,并且映射控制電路14不會擦除第一塊直至它在下一 塊中寫滿映射表為止。
至此,假設存儲了完整閃存的映射表。在另一實施例中,多個映 射表配置用于邏輯地址的各自段(范圍)。
在又一實施例中,映射控制電路14為從分配用于存儲映射表的塊 集合中的各個獨立可選擇的頁中的各自范圍編程和載入地址表。在又 一實施例中,映射控制電路"配置用于使對映射表應用到閃存10的頁 的段的標識進行編程,其中閃存10的頁中存儲有映射表。在上電時, 映射控制電路14搜索以分配的塊,以找到包含各自段的標識的最后順 序的頁。優(yōu)選地,映射控制電路14將這些頁復制到映射表存儲器12中, 用于在地址翻譯期間使用。
當處理器16需要寫入新的頁時,映射控制電路14像以前那樣產(chǎn)生 的新的映射表,但是僅對于段中的邏輯地址,所述段包括處理器16需 要寫入的邏輯地址。相應地,映射控制電路14僅把用于所述段的新映 射表加入塊集合的映射表中,所述塊集合分配用于存儲映射表。舉例 來說,使用圖4a、 b中不同形式的陰影表示用于不同段的映射表。
圖5為在當分配的塊為滿時在寫入期間發(fā)生的情況。在這種情況,
映射控制電路14將用于己更新段的新映射表寫入到塊集合中空閑塊42
中,所述塊集合分配用于存儲映射表。此外,在一些實施例中,映射 控制電路14將用于其它段的當前映射表復制到所述塊的空閑塊42中。 這由圖中的箭頭示意性地示出,盡管代替從閃存10復制,所述映射表 的內(nèi)容當然也可以從映射表存儲器12中復制。然后映射控制電路14使 閃存10來擦除滿塊40。這使在上電時,映射控制電路M能夠表示包含
有效映射表的塊。
如果錯誤地未擦除舊的塊40,映射控制電路14檢測到滿塊40與非 空閑塊42結(jié)合一起的,并且在上電時擦除滿塊。優(yōu)選地,映射控制電 路14首先驗證用于在非滿塊42中存儲所有段的映射表。如果沒有,映 射控制電路14首先在滿塊40中搜索用于未復制段的順序上最新的映射 表,并且在擦除滿塊40前,將這些映射表復制到非滿塊42。
作為替代,當首先將新的映射表寫入空閑塊42時,未復制用于其 它段的映射表,并且未擦除滿塊40。在這種情況,在上電時映射控制 電路14仍然能夠恢復塊,與錯誤斷開時的情況一樣。能夠?qū)M塊40的 擦除延遲直至其它塊42變滿為止,因為在上電時,映射控制電路14仍 能通過檢測哪個塊未滿來檢測哪個塊是最后寫入的塊。在此替代中, 只有當未滿的塊變滿時,映射控制電路14需要擦除滿塊40。優(yōu)選地, 在這種情況,映射控制電路14首先復制用于還沒有在未滿塊42中存儲 映射表頁的那些段的映射表,如果有的話。也就是,在加入所述還沒 有在未滿塊42中編程的映射表后,可延遲擦除,直至非滿塊42具有正 好足夠的空間來以留出空閑的頁為止。
在另一實施例中,分配用于存儲映射表的塊集合包括多于兩個塊。 這是有益的,例如,如果存儲在塊(例如映射表)中的數(shù)據(jù)太大, 使得它們能從一個塊溢出到另一塊中。在這種情況,例如可以按照預 定順序中使用所分配的塊。如果是這樣,優(yōu)選地首先擦除至少集合中 的最新更新的塊,重新用來存儲映射表。在啟動期間,映射控制電路 14定位空閑塊,并且使用所述空閑塊來確定所述序列的開始/結(jié)束,并 且根據(jù)所述映射控制電路定位存儲數(shù)據(jù)的最新版本。
圖6表示了其中將不同塊用于不同段的實施例。在這種情況,設置
四個塊60作為多個段,并且將備用塊63配置用于塊60之一變滿的情況。 在操作中,當映射控制電路14處理寫入請求時,映射控制電路14將用 于通過寫入請求而改變的段的新映射表編程到包含用于所述段的前一 個映射表的塊中。如果用于所述段的塊是滿的,映射控制電路14將新 的映射表編程到空閑塊62中。然后,備用塊成為用于所述段的塊,然 后映射控制電路14擦除用于所述段的舊塊。在一個實施例中,將所述 段的標識編程到新塊中,可替代地當寫入所述頁時,可以在塊的每一 頁中編程所述標識。
在上電時,映射控制電路14測試每個已分配的塊60、 62,以確定
將所述塊用于哪一段。然后,將來自所述塊的最新的映射表用作所述 段的映射表。如果由于供電中斷,存在兩個包含段的數(shù)據(jù)的已分配塊 60、 62,映射控制電路14從那些塊中選擇未滿的塊,擦除其他塊,然
后使用來自未滿的塊的順序上最新的映射表。
在一個實施例中,映射表存儲器12包括并行地用于所有段的表,
使得存儲器映射表可以立刻翻譯任何邏輯地址。在此實施例中,映射 控制電路14將用于所有段的映射表載入映射表存儲器12中。在替代實 施例中,映射表存儲器12存儲僅用于段的有限子集的映射表,例如同 時僅用于一段。在此實施例中,當在映射表未在映射表存儲器12中的 段中接收邏輯地址時,映射控制電路14使用來自已分配的塊60、 62或 40、 42的映射表,用另一個段的映射表代替一個段的映射表。
雖然實施例表明其中用于段的整數(shù)數(shù)量的映射表適合于,應當理 解的是這不是必需的。當用于段的映射表的尺寸使整數(shù)數(shù)量用于段的 映射表不能填滿塊時,映射控制電路14可寫入用于最后段的映射表, 在圖5的情況中所述最后段從一個塊溢出到其它的塊。在這種情況,如 果沒有將另外的映射表存儲在溢出映射表的后面,映射控制電路14在 啟動時使用所述溢出的映射表,并且映射控制電路14不會擦除第一塊 直至在下一塊中寫滿映射表為止。在圖6的情況中,用于所述段的滿的 映射表優(yōu)選地寫入到新近分配的塊,因此立刻釋放先前分配的塊。
在一個實施例中,將預定的塊集合分配用于存儲映射表。在此實 施例中,預定的塊集合位于預定的地址,使得能夠?qū)⒂成淇刂齐娐?4
設計用于參考在所述預定地址中的塊。然而,這可以具有已分配的塊 將更快地磨損的缺點。作為替代,可以分配變化的塊或多個塊以存儲
映射表,并且可以將支持RAM的存儲器配置用于存儲指向已分配的塊 或多個塊的指針。
在可替代實施例中,可以將連接的列表結(jié)構(gòu)用于限定塊集合,所 述塊集合分配用來存儲映射表。如圖7a所示。其中示意性地示出了整 個閃存71,分割成塊。將在閃存中的預定物理地址的基礎塊70 (例如, 地址零)用來存儲一個或多個基礎指針。示出了所述基礎塊的放大部 分70a以及基礎指針未知72。來自所述位置的基礎指針指示存儲另外指 針的另一個塊74。示出了所述另一個塊的放大部分74a和具有指針的基 礎指針位置75,所述指針指向分配用于存儲映射表的塊76。
在上電期間,映射控制電路14首先從基礎塊70載入指針72,使用 所述指針來選址其它塊74,映射控制電路14從所述其它塊將指針載入 分配用于存儲映射表的塊76。映射控制電路14保存所述指針作為隨后 的使用,并且使用所述指針從分配用于存儲映射表的塊76將當前的映 射表載入映射表存儲器12中。這可通過例如前述方法中的任何一個來 做到。
而且,此結(jié)構(gòu)這樣的具有以下益處可以將不同物理塊分配作為 塊76以存儲映射表,以便避免比其它的塊更頻繁地擦除相同的塊。每 次已分配塊76變化時,將新指針75寫入指向己分配塊76的塊74中。優(yōu) 選地,至少可代替的塊(已分配塊76和中間塊74)中每個均存儲計數(shù) 值,所述計數(shù)值表示已經(jīng)擦除的次數(shù),使得當所述計數(shù)值超過閾值時, 可以將映射控制電路14配置用于用不同的塊代替相關(guān)的塊。例如每次
在將擦除塊之后寫入時,計數(shù)值可以增長l。
類似地,在一定時間的過程中,可以將不同物理塊用作中間塊74, 以便避免在存儲新的指針值之前,過于頻繁地擦除相同的塊。每次中 間塊74變化時,將新的指針72寫入指向中間塊74的基礎塊70中。應當 注意到,中間塊74的變化不如己分配塊76的變化頻繁。在一個示例中, 每次擦除已分配塊76 Nl次(例如Nl-8)之后,選擇不同物理塊用于 己分配塊76。因此中間塊74僅需要每N2次更新一次,其中擦除己的塊
(例如,N2=100000,或更一般地,比塊的可擦除且仍能用來存儲數(shù) 據(jù)的最大次數(shù)少的整數(shù)數(shù)量)。當將與中間塊74對應的物理塊擦除N2 次時,它依次被代替。因此,這樣的代替發(fā)生在擦除己分配塊76的 N"N2次之后。因此,對于中間塊74會發(fā)生較慢的磨損,甚至對于基 礎塊70也會發(fā)生較慢的磨損。
可替代地,沒有中間塊74可使用,基礎塊70中的指針72立刻指向 已分配塊76。這提供了閃存的更有效的使用和映射表更快的恢復。然 而增加了基礎塊的磨損。應當注意到,在一段時間后,不得不擦除具 有指針值的塊,這不可避免地導致增加的磨損。為減小這種磨損,在 基礎塊70和已分配的塊之間使用在中間塊74中的中間指針。
作為另一替代,可使用中間塊的鏈,除了指向已分配塊76的最新 的塊,在基礎塊70中的指針72指向鏈中的第一塊,每個下一塊指向鏈 中的下一塊。這樣,能夠減少基礎塊的磨損。中間塊越來自于已分配 塊,所述塊越不需要更新。因此,具有預定物理地址的基礎塊70可以 與使它磨損的頻繁的更新相隔離。
可使用固定預定長度的鏈。替代地,也可使用動態(tài)自適應長度的 鏈。在這種情況,優(yōu)選地,在所述鏈中的最新的中間塊存儲指示,所 述指示指向己分配的塊(或與所述鏈的末端相距預定距離的塊指示沿 所述鏈的預定距離的塊存儲該指針)。在實施例中,當映射控制電路14 檢測到在閾值以上的更新頻率時(例如,已經(jīng)擦除基礎塊70的次數(shù)超 過閾值T),映射控制電路增加鏈的長度。因此,鏈的長度能根據(jù)使用 的類型來調(diào)整以避免基礎塊70的太多磨損。在一個實施例中,使用鏈 長度的延長以避免多于閾值次數(shù)地更新基礎塊70。例如,當已經(jīng)更新 基礎塊70閾值數(shù)目的次數(shù)(T=100000)時,這可以通過例如在鏈中增 加額外的中間塊來實現(xiàn),例如,在最后一次擦除基礎塊70后,將指針 寫入基礎塊70中的新塊,并且將指針寫入新的中間塊中的下一中間塊。 如果已經(jīng)擦除新的中間塊閾值數(shù)量的次數(shù),這能通過新的中間塊用作 部分基礎塊來重復,等等。
在另一實施例中,多個塊分配用來存儲映射表或部分映射表。例 如,能夠?qū)⑦@應用到實施例,其中在擦除舊的己分配的塊中的舊的映射表之前,將新的映射表存儲到新分配的塊中??商娲?,例如,可 應用到實施例,其中用于邏輯塊地址的各自段的映射表存儲在各自的 塊中。
圖7b描述了此實施例。在此實施例中,基礎塊70包括指向各自中 間塊74、 78的第一和第二指針72a、 b,它們的每個依次包括指向各自 分配塊76、 79的指針75、 75a。在此實施例中,在上電過程中,映射控 制電路14首先從基礎塊70載入指針72、 72a,然后使用這些指針來選址 其它塊74、 78,并且將指針載入已分配的塊76、 79,用于存儲映射表。 映射控制電路14保存這些指針供后續(xù)使用,并且使用所述指針來從分 配用于存儲映射表的塊76將當前的映射表或或當前映射表的段載入到 到映射表存儲器12。例如,這可使用上述方法中的任何一個做到。
當開始使用另一塊代替已分配塊76、79中的一個來存儲映射表時, 映射控制電路14在中間塊74、 78指向所代替的己分配塊76、 79的哪一 個中間塊中改變指針。優(yōu)選地,在改變指針之前,映射控制電路"在 新的分配塊中存儲新的映射表(或映射表的段)。
雖然顯示了其中兩個指針72、 72a被存儲在基礎塊中的結(jié)構(gòu),應該
意識到,替換是可能的。例如,代替兩個指針,可以存儲指向單個中 間塊的單個指針,所述中間塊存儲指向已分配塊76、 79的兩個指針。 這具有需要更少的塊的益處,但其導致更多的磨損,因為其需要更多 的擦除操作。作為另一實施例,當使用多于兩個的分配塊76、 79時, 可存儲多于兩個的指針(在基礎塊70或中間塊74、 78中)。作為替代, 當在將具有相互預定物理關(guān)系的塊(例如,連續(xù)的物理地址)用于中 間塊74、 78或用于已分配塊76、 79時,可將單個指針用到中間塊74、 78中的一個或用于一個已分配塊76、 79。
在前面的例子中,示出了只有有效指針存儲在每個塊中,這意味 著每次當在所述塊中的指針值變化時,映射控制電路14擦除和重新寫 入基礎塊70和中間塊74、 78 (或代替中間塊74、 78)。替代地,映射控 制電路M可以配置用于將每個新的指針值寫入到基礎塊70或具有指針 的中間塊74、 78中的新的頁,不需擦除先前存儲的指針。
圖7c表示了用于連續(xù)的指針72、 75的連續(xù)頁的使用。包括指針值的頁通過陰影表示。在每種情況,最低的陰影頁(具有包括指針值的 最高地址的頁)包括有效指針值。更高的頁(具有更低的地址)包括
更舊的(無效的)指針值。在可替代實施例中,映射控制電路14寫入伴 隨指針的版本號,每次當寫入(或另外根據(jù)預定序列改變)表時,版 本號增長。在此實施例中,映射表的有效版本能通過選擇具有最靠前 版本號的映射表來識別。
在啟動期間,映射控制電路14例如通過搜索具有按照某種預定順 序的頁緊接著空頁的指針的頁,從無效指針中區(qū)分有效(最新存儲) 的指針。例如,所述預定順序可以是物理地址的順序。例如,搜索可 為二進位的搜索(首先測試塊中部的頁是否為空,然后測試第一或第 二半頁中部的頁,分別得到第一被測試的頁是否為空,等等,直至已 經(jīng)在相鄰的兩邊測試被測試的頁)。此實施例具有需要較少頻率的擦除 操作的益處,以在啟動中更長的搜尋時間為代價。
在替代實施例中,映射控制電路14寫入伴隨指針的版本號,每次 當寫入新的指針時(或根據(jù)預定順序改變時),版本號增加。在此實施 例中,指針的有效版本能通過選擇具有最靠前的版本號的指針識別。 在另一實施例中,映射控制電路14可將帶有版本號的更新寫入到中間 塊的任何一個,例如,如果其它塊為滿,在寫入后擦除其它塊。
版本號可循環(huán)變化。版本號與在塊中具有指針的頁的單元一起使 用,代替為了找到正確塊的目的而測試滿的和空的塊。在這種情況, 短周期的、比如四個不同版本號可以滿足。
在另一實施例中,可以將映射控制電路配置用于在啟動時寫入新 的中間塊以助于正確塊的選擇之前,在滿的中間塊中設置"臟"標簽。 在這種情況,映射控制電路首先試圖使用未標記為臟的中間塊。如果 此塊為空(由于錯誤),映射控制電路14將求助于空塊。
在其中并行使用多個有效指針的實施例中(如圖7b中的例子),可
以 一 起存儲指針值和它們在多個并行指針值中的等級標識 (identification of their rank )。在這種情況,在啟動過程中,映射控制
電路14為每個等級標識搜索有效的(最新存儲的)指針值,所述指針
的值為在預定順序中比相同等級標識的其它指針的值位于更靠前的單 兀。
當映射控制電路14已經(jīng)使用了用于存儲指針值的所有頁,并且必 須寫入新的指針值時,映射控制電路14擦除塊,并且從頂部重新幵始。 圖8a-c表示了其中將多個塊用于指針值的替代實施例。在基礎塊70中 的指針72、 82指的是第一中間塊74和第二中間塊84。開始,如圖8a所 示,每次一個指針值變化時,將變化的指針的值75寫入第一中間塊74 中的新頁,并且第二中間塊84仍保持空。當?shù)谝恢虚g塊74為滿時,映 :射控制電路14將下一變化的指針值75寫入第二中間塊84的第一頁,如 圖8b所示,然后,擦除如圖8c所示的指針值的舊的塊。
以這種方式,由于能容易地恢復由于更新中斷造成的錯誤。在上 電期間,映射控制電路14測試第一中間塊74是否為滿,如果為滿,測 試來自第二中間塊84的一個或多個指針是否可用。如果是,映射控制 電路14使用來自第二中間塊84的最新的指針。如果不是,映射控制電 路14使用來自第一中間塊74的最后指針值。如果第一中間塊為空,映 射控制電路14使用來自第二中間塊84的最后指針值。
應當注意,指向第二中間塊84的指針值的加入和舊的第二中間塊 的擦除可遍布在時間中(延遲擦除,例如直至將多個指針值寫入第二 中間塊84中),由于可以將映射控制電路14配置用于通過測試中間塊是
否為滿,在啟動時來確定決定包括正確指針值的中間塊;如果塊為非 空,使用來自其它中間塊的最后指針的值,否則,使用來自先前中間
塊的最后指針值。
該技術(shù)也可應用到基礎塊70。例如,當使用基礎塊70的所有頁時,
映射控制電路14將下一指針值寫入在預定輔助的基礎塊(例如,具有 塊地址l的塊)的第一頁,然后擦除基礎塊70。例如,在第二中間塊84 的變化的情況,映射控制電路向指向舊的中間塊的指針值82之后的第 二中間塊84 (如果必要)添加指針值,將指針值寫入到第二中間塊84 的第一頁中。
圖9a表示了其中并行地使用多于一個有效指針值的例子,例如如 圖7b中的情況。并行指針值與各自等級相對應(例如,對應用于連續(xù) 邏輯地址范圍的映射表的連續(xù)段的等級將并行地指針標注為第一和
第二指針)。分配各自的中間塊以用于各自等級的指針值的存儲,將識 別分配的等級的信息(例如對應于等級的數(shù)字)存儲在每個包括指針 值的中間塊中。
有效的并行指針是各自存儲在各自中間塊74、 78中的最新占用的 單元中。將額外的指針92存儲在基礎塊70中,其指向額外的中間塊94。 當其它的中間塊74、 78都不為滿時,所述額外的中間塊94保存為空。 在這種情況,映射控制電路14將新的指針值寫入中間塊74、 78中的連 續(xù)的頁中。當中間塊74、 78中的一個為滿,并且必須加入新的指針值 時,映射控制電路14將新的指針的值寫入額外的中間塊94。此外,映 射控制電路14將指針的等級的指示寫入額外的塊94。如圖9b所示,然 后映射控制電路14擦除填充的中間塊?,F(xiàn)在,該擦除的塊作為額外的 中間塊的部分當中間塊又為滿,當指針的值必須加入時,映射控制 電路14將指針值寫入現(xiàn)有的空塊,并且擦除填充的塊。
在啟動時,映射控制電路14從基礎塊70載入指針,并且確定指向 用于每個等級的中間塊的指針。如果兩個所述中間塊與相同的等級相 對應,然后映射控制電路14選擇所述中間塊的一個,所述塊為非滿或 空以將指針載入分配的塊,如果另一個中間塊為滿,在擦除它。如果 用于等級的一個塊為滿,并且另一個為空,映射控制電路14使用來自
滿的塊的上一次寫入的指針的值。
圖10a、 b為實施例,其中將不同等級的指針值105a、 105b—起存
儲在相同的塊中,每個都包括它的等級的標識。在此實施例中,映射 控制電路14向相同的中間塊74中加入用于所有等級的新的指針值,直
至所述塊變滿為止。當必須寫入用于等級的下一新的指針的值時,映 射控制電路14將用于所述等級的新的指針值寫入額外的塊94,并且將
其它用于等級或多個等級的有效指針的值或多個值復制到額外的塊 94。然后,映射控制電路14擦除填充的塊。在啟動時,映射控制電路 14使用基礎塊70中的指針值以確定中間塊,并且搜索非空和非滿的中 間塊,如果這不導致用于所有等級的指針的值使用來自所述塊的上一 次寫的指針的值;如果這是滿的,映射控制電路M載入來自其它塊的 用于所有剩余的等級的最后寫的指針值。應該意識到,在實施例中的任何一個中,其中不得不從多于一個
的可能塊中選擇有效指針值,映射控制電路14可以配置用于使用任何 機制,例如如果非空的其它塊是可用的時使用滿的塊的擦除、使用版 本號、使用臟標識等等來確定將被使用的塊。同樣,如果發(fā)生不一致, 映射控制電路14可以標識最新的可靠版本。例如,如果映射控制電路 確定指針指的是無效的映射表(例如,空的映射表或?qū)⒉煌壿嫷刂?映射到相同物理地址的表),映射控制電路可求助于指針的更早的版 本。當確保映射控制電路14在完成用于信息的替代之前不擦除信息時, 這導致最佳的可能的錯誤校正。
在又一實施例中,減少更新的數(shù)量。這通過和映射表一起存儲一 "空閑"塊的表單來完成,所述表單描述當更新映射表時應該進入映 射表中的塊。因此,如果邏輯地址映射到第一塊的物理地址,并且在 第一塊中的數(shù)據(jù)的后續(xù)更新中,映射控制電路14選擇通過第二塊(例 如,避免第一塊的更多磨損)替代所述第一塊,映射控制電路14從空 閑列表中選擇的第二塊,并且在第二塊中存儲邏輯地址的指示(例如, "標簽,,)。在這種情況,映射控制電路14省略寫新的映射表。替代地, 在隨后的啟動中,映射控制電路14使用與舊的地址映射表一起存儲的 空閑的列表,來確定是否將在空閑的列表上任何塊用于更新。如果是, 映射控制電路14根據(jù)所述塊中的邏輯地址的指示推斷映射表的校正。 只有當空閑塊的列表上的所有塊都被使用時,需要存儲新版本的映射 表。
圖ll為在此實施例中使用的來自具有映射表信息的存儲器的塊 10。所述塊包括映射表的連續(xù)的版本112a-c,每個由具有空閑塊的地 址的"空閑的列表"114a-c伴隨。將映射表112c的最新版本及其伴隨的空 閑列表114c定義為當前的版本。在操作時,當其地址出現(xiàn)在映射表120 的當前版本中的物理塊不得不使用替換的塊更新時,映射控制電路14 使用來自關(guān)聯(lián)的空閑列表114c的第一可用地址,并且將更新寫入通過 由第一可用地址選址的塊。此外,映射控制電路14將標簽寫入所述新 的塊,所述新的塊辨識更新所應用的邏輯塊地址。在新的塊中的更新 完成后,映射控制電路14擦除仍出現(xiàn)在當前的映射表112c中的舊的塊。優(yōu)選地,映射控制電路14相應地更新在映射表存儲器12中的映射 表。當映射控制電路14檢測到在當前空閑列表114c中的所有塊都被用 來更新時,映射控制電路14將映射表的新版本和被擦除的舊的塊的列 表寫入舊的空閑列表114c后的塊110中(或?qū)懭胗糜谟成浔頂?shù)據(jù)的另一 塊中)。優(yōu)選地,每個空閑的列表包括多個塊的地址。在這種情況,一 旦將舊的空閑列表耗盡時,優(yōu)選地寫映射表的新的版本和空閑列表。
在啟動時,映射控制電路14恢復空閑列表114c的當前版本,例如, 通過搜索塊110中的最后非空頁。然后,映射控制電路14參考由所述空 閑列表114c上的地址選址的頁,并且決定是否將數(shù)據(jù)寫入這些頁。如 果是,映射控制電路14根據(jù)標簽確定哪種校正必須應用到映射表的當 前版本。因此,確定一個或多個校正,每個表示邏輯塊的地址和具有 用于所述邏輯塊的更新的數(shù)據(jù)的物理塊的地址。在一個實施例中,映 射控制電路14從塊110復制映射表112c的當前版本到映射表存儲器12 中,并且應用校正到映射表存儲器12中的映射表。在另一實施例中, 映射控制電路14在映射表存儲器12中存儲校正的列表,并且當其從塊 IIO載入時,將這些應用到整個映射表。
優(yōu)選地,映射控制電路14按照這些塊的地址出現(xiàn)在空閑的列表 114c中的順序使用來自用于更新的空閑列表U4c的塊。在這種情況, 在啟動時,映射控制電路14優(yōu)選地按照這些塊的地址出現(xiàn)在空閑的列 表中的順序,測試用于更新的空閑列表114c上的塊,并且一旦確定一 個塊未被更新時,就停止測試。這加速了啟動,但是即使不使用此順 序,當僅有部分塊出現(xiàn)在空閑的列表114c上時,啟動也相當快。
優(yōu)選地, 一旦己經(jīng)完全寫入塊的更新版本,將擦除每個出現(xiàn)在當 前映射表112c中的舊的塊。因此沒有數(shù)據(jù)丟失。然而,可延遲擦除直
至正好在寫映射表的新版本和空閑的列表(優(yōu)選地,其中所有的擦除 塊出現(xiàn))之前。而且,雖然描述了其中映射表112a-c和空閑的列表114a-c
被接連地存儲的一個實施例,應該意識到,映射表和空閑的列表之間 的聯(lián)合能以其它方法實現(xiàn),例如通過包括具有兩個的版本號,其中能 任意地存儲映射表和空閑列表。而且,映射表和關(guān)聯(lián)的空閑列表能存 儲在不同的塊中,例如,以提供聯(lián)合相同的順序。應該意識到此技術(shù)可以與所有前述實施例聯(lián)合應用,或其單獨應 用。例如,可使用多個塊可來存儲空閑的列表和關(guān)聯(lián)的映射表的版本, 僅僅在將新版本寫入新塊后擦除滿的塊,以使在啟動時能夠通過搜索 發(fā)現(xiàn)最新的版本。
作為另一示例,可使用段的映射表,在這種情況中,需要存儲用 于更新的段的新版本。在這種情況,各自空閑的列表能用于各自段, 使用所述段的空閑列表執(zhí)行用于段的塊的更新。但是,優(yōu)選地,使用 用于所有段的公共空閑列表,使用用于所有段的相同的共享的空閑的 列表執(zhí)行用于任何段的塊的更新。這減少了需要存儲的映射表的更新 的數(shù)量。應當注意到在這種情況,優(yōu)選地,在指向各自段的塊地址上 沒有任何限制,這意味著在用于段的映射表中,需要比當每個段映射 到與各自的物理塊集合時稍長的地址,所述物理塊集對于確定的地址
位具有相同的地址。
而且,當使用段時,在一實施例中,映射表存儲器12僅對段的部 分(例如,對僅一段)緩存映射表部分。這使得使用小的映射表存儲
器12成為可能。在這種情況,優(yōu)選地,用于所有段的校正連同緩存的 映射表一起存儲在映射表存儲器12中。在這種情況,當需要時,映射 控制電路14從閃存的塊中向映射表存儲器中載入用于新的段的映射 表,并在映射表存儲器12中應用存儲的校正。在又一實施例中,在從 閃存10中載入用于段的映射表前,映射控制電路14可以配置用于試圖 使用校正映射邏輯地址。這增加了存取速度。
作為又一示例,指針鏈可被用來標識塊iio (或塊集合),其中存 儲有映射表和空閑的列表。這樣,可以交換塊iio (或用于一起或分別 存儲映射表和空閑的列表的塊集合),而不存在磨損的問題。
空閑的列表的使用也可應用到指針鏈。在一實施例中,在鏈中指 向中間塊的指針與指向塊的空閑的列表相關(guān)聯(lián),所述塊將被用作新的 中間塊。當新的中間塊產(chǎn)生時,使用標識在空閑的列表的塊,并且將 新的指針的值寫到所述塊。此外,將一些信息存儲在此塊中作為有效 塊(例如,通過包括版本號),并且未更新在基礎塊中指向中間塊的指 針。只有當空閑的列表耗盡時,更新基礎塊,以及到新的中間塊的指
針值和空閑的列表。
雖然所示實施例,其中整數(shù)數(shù)量的映射表加上空閑的列表適合一 個塊,應該意識到這不是必需的。當映射表加上空閑的列表的尺寸以 使一個塊不能被整數(shù)數(shù)目映射表加上空閑列表所填滿時,映射控制電 路14可從一個塊溢出到另一塊寫入最后的映射表加上空閑的列表。在
這種情況,如果沒有更多的映射表加上空閑的列表存儲在溢出的映射
表后,映射控制電路14在啟動時使用溢出的映射表加上空閑的列表,
并且映射控制電路14直到它在下一塊中寫一滿的映射表加上的空閑的
列表才擦除第一塊。
圖12a為其中沒有立刻完全更新塊的實施例。顯示了存儲用于邏輯 塊的的原始完整的數(shù)據(jù)集合的第一塊120。顯示了存儲用于邏輯塊的更 新數(shù)據(jù)123的第二塊122。
在實施例中,映射控制電路14配置用于響應命令來更新部分邏輯 塊,所述邏輯塊例如從空閑的列表114c中通過選擇空塊映射到第一塊 120。所述空閑塊成為第二塊122。映射控制電路14僅將塊的數(shù)據(jù)123 的更新部分寫入第二塊122。當映射控制電路14接收這種的后續(xù)命令
時,對于相同邏輯塊中的單元,所述單元與先前更新的單元不重合, 映射控制電路14將新的更新數(shù)據(jù)寫入第二塊122。映射控制電路14對于
后續(xù)命令重復它。
如果在后續(xù)命令中的更新的確重疊,映射控制電路14復制第一塊 120的剩余(還未更新)單元到第二塊122。映射控制電路14也將信息 寫入第二塊122,這表明已完成第二塊122。此后,第二塊接管第一塊 120的部分,并且映射控制電路14 (例如,從空閑的列表114c中)選擇 新的塊以作為存儲更新的第二塊。隨后,擦除原始的第一塊120。
任何時候,例如當沒有空閑塊可用時,映射控制電路14可將第一 塊120的剩余(還未更新)單元復制到第二塊122。然后,映射控制電 路14也將信息寫入到第二塊122,這表示第二塊已完成。此后,映射控 制電路使用第二塊122擔任第一塊120的作用,然后,擦除原始的第一 塊120。在實施例中,當裝置關(guān)機時,映射控制電路14也執(zhí)行此操作。
在讀取期間,如果映射控制電路14接收來自邏輯塊的讀取命令,映射控制電路14確定第一和第二塊120、 122是否可用于邏輯塊有效; 如果是,決定讀取操作是否涉及來自第二塊122用于更新的單元的更新 數(shù)據(jù),或來自第一塊120用于未更新值的原始數(shù)據(jù)。在前者中,映射控 制電路14指導讀取操作到第二塊122,在后者中,映射控制電路指導讀 取操作到第一塊。
優(yōu)選地,映射控制電路M在映射表存儲器12中存儲另外的校正, 更新表示塊的部分(或多個部分),用來識別在讀操作中的更新數(shù)據(jù) 123。例如,當己經(jīng)寫入更新時,所述另外的校正存儲在映射表存儲器 12中。
在實施例中,映射控制電路14在啟動時,使用空閑的列表114c恢 復更新。在此實施例中,映射控制電路14在列在空閑列表114c上的一 個或更多的塊上執(zhí)行測試,以得到所述塊是否包括數(shù)據(jù)和用于表示邏 輯塊的標簽。如果是,映射控制電路14執(zhí)行測試,以得到所述塊是否 包括表示塊已經(jīng)完成的信息。如果是,映射控制電路14使用所述塊, 來代替在映射表112c中用于邏輯塊指示的塊。如果映射控制電路14找 到包括數(shù)據(jù)但未完成的塊,映射控制電路14使用所述塊作為第二塊 122,并且所述塊在映射表122c中以與第一塊的相同的邏輯塊列出。在 實施例中,映射控制電路14生成在這種情況下的另外校正,并且在映
射表存儲器中存儲所述另外校正。
圖12b示出實施例,其中,除更新數(shù)據(jù)123之外,復制的數(shù)據(jù)也存 儲用于在更新數(shù)據(jù)123之前的地址。這簡化了用于讀取的另外校正到 更新數(shù)據(jù)123的末端的數(shù)據(jù)能從第二塊122讀出,并且跟隨更新數(shù)據(jù)123 的數(shù)據(jù)需要從第一塊120讀。這對于閃存10是特別有用的,在其中只能 依次寫塊。在這種情況,在寫操作中,映射控制電路14首先從第一塊 120復制一直到更新數(shù)據(jù)的數(shù)據(jù)到第二塊122,然后將更新的數(shù)據(jù)123 寫到第二塊122。
在另一實施例中,映射控制電路14測試另外的寫命令,以確定寫 入命令是否是到用于第一塊120和第二塊122使用的邏輯地址。如果是, 映射控制電路14測試是否寫命令被指導在更新數(shù)據(jù)后的塊的單元中。 如果是,映射控制電路14從第一塊120復制數(shù)據(jù)到第二塊122,從更新
數(shù)據(jù)123的末端到另外寫命令的地址的起始,然后在第二塊122中寫入 另外的寫命令的數(shù)據(jù)。如果新的寫命令的單元在部分被寫的第二塊之 前或與之重疊,映射控制電路14選擇空閑塊作為第三塊124,并且在從 第二塊122數(shù)據(jù)的復制之前,將用于新寫命令的數(shù)據(jù)寫入所述第三塊 124中。
在實施例中,映射控制電路14保持第一、第二和第三塊120、 122、 124在使用中。當另外的寫操作發(fā)生在相同邏輯塊,甚至可使用更多塊。 在此實施例中,映射控制電路14依靠讀地址,完成來自所述塊120、122、 124中一個的讀操作。相應地,映射控制電路14可存儲表明所述塊120、 122、 124的每個的另外的校正,以及一直到存儲最新數(shù)據(jù)的塊中的單 元。而且在任何時候(例如,當沒有更多空閑的塊可得到時),存儲器 映射控制電路14可清除所有的校正,以填補最小填充的塊124 (采用最 新塊122之前的下一部分,等等),并且在所述已完成的第三塊124中存 儲信息。然后,映射控制電路14能擦除其它塊120、 122,并且將更新 的存儲器映射表和空閑的列表寫入閃存IO。
在啟動時,映射控制電路14搜索列出在空閑列表123上的塊,以確 定所述塊是否包括數(shù)據(jù)。如果用于邏輯塊的塊包括已完成的標識,映 射控制電路14對于所述邏輯塊使用所述塊,以代替在映射表中列出的 塊。如果映射控制電路14發(fā)現(xiàn)一個或更多來自空閑列表的塊包含用于
相同邏輯塊的數(shù)據(jù),但是所述塊中的任何一個都沒有標識它是完成的, 映射控制電路14建造參考已找到的塊122、 124的進一步校正信息。
原則上,當映射控制電路14接收寫命令時,多于一個額外的塊122、 124用于邏輯塊時,所述寫入對在每個額外的塊122、 124中的最新更新 的單元后的單元中的數(shù)據(jù)進行更新。映射控制電路14可以選擇在哪里 寫入更新。在最舊的(最滿的)額外塊中寫具有這種益處,在較新的 塊中將更多的空間留下用作更新,這減小了對額外的塊的需要。然而, 也可使用在較新的額外的塊中的寫,這具有這樣的效果在最新的塊 中的更新數(shù)據(jù)可延伸到在較舊的塊中之外。在這種情況,映射控制電 路14優(yōu)選地擦除更舊的塊。優(yōu)選地,映射控制電路14也在塊中寫入信 息,以表明在此情況中的更新的順序,以用于在啟動中形成另外的校
正。
如這里使用的,將鏈中的指針和映射表中的物理塊的地址以及空 閑的列表中的塊地址定義為指向信息,以用來識別被指定各自功能的 物理塊的各自塊。所述功能的典型例子是對于邏輯塊地址作為塊的功 能的塊,提供指針的塊以及提供空閑列表的塊。
例如,映射控制電路14作為可編程的處理電路實現(xiàn),通過使用這 里描述的塊以指令的程序編程??商娲兀蓪崿F(xiàn)部分或全部映射控
制電路14以專門用于執(zhí)行所述功能的電路。
雖然顯示的是其中使用指向單個塊的指向信息,并且使用單個塊 存儲指向信息(作為擦除單元的塊)的實施例,應該意識到,代替的 指向信息,可以使用指向這種擦除單元的組的信息,和/或使用單元的 組來存儲連續(xù)的有效指針值。
雖然示出了實施例,其中將(另外)校正的列表存儲在映射表存
儲器12中,它最好為RAM存儲器,例如SRAM或DRAM,應當理解, 可替代地,可以設置額外的RAN存儲器(未示出),與更新控制電路 14耦合,以存儲校正的列表。同樣,其它信息,例如從隨后的指針鏈 得到的最后指針,可以將在寫后續(xù)更新等中使用的非空塊的標識存儲 在映射表存儲器12或這樣的額外的RAM存儲器中,以使僅在啟動時,
并且可選地,在稍后的一些例外時間點,例如,在重置信號或錯誤信 號的接受以后,需要通過閃存10搜索整個信息。
雖然具體實施例已經(jīng)表明其中(另外的)校正的列表存儲在映射 表存儲器12中,它優(yōu)選地為RAM存儲器,例如SRAM或DRAM,應當 理解,可替代地,可設置耦合到更新的控制電路14的額外的RAM存儲 器(未示出),以存儲校正的列表。類似地,其它信息,比如通過下述
指針鏈得到的最終指針,在寫入隨后的更新中使用的非空塊的識別等 等可存儲在映射表存儲器12或這樣額外的RAM存儲器中,以使僅需要
在啟動時和可選地,在后來一些例外的時間點(例如,在接收到重置 信號或錯誤信號后)執(zhí)行通過閃存10搜索該信息。
可意識到, 一些物理塊可在時間過程中成為不能用的,例如在將 這些塊擦除多于一定數(shù)量的次數(shù)后,由于磨損,或由于出現(xiàn)在塊中的
其它錯誤。當上述情況發(fā)生時,映射控制電路14避免使用所述塊。一 旦塊被放棄,所述塊從映射表和空閑的列表移除??蛇x地,映射控制 電路14保持代表映射控制電路14將不再在閃存10中使用的物理塊地址 的"壞的列表"的信息。當一個塊被放棄時,將所述塊加入"壞的列 表",但并不需要在閃存10中的空閑的列表或映射表中立刻更新??裳?遲稍后的更新直至空閑的列表耗盡。在啟動時,映射控制電路14測i式 壞的列表,得到是否在空閑的列表或映射表中參考的塊也在壞的列表 上,并且如果是,映射控制電路14按照所述塊未在這些列表上的方式 執(zhí)行。
權(quán)利要求
1.一種設備,包括非易失主存儲器(10),包括多個存儲單元的物理塊,所述主存儲器(10)支持每次擦除至少一個物理塊;映射控制電路(14)配置用于維護存儲在各個塊(70、74)中的指針鏈(72、75),指針鏈中指向各個塊(74)的每個非最終指針(72)包括指針鏈中的下一指針,所述映射控制電路(14)還配置用于維護存儲在至少另一塊(76)中的指向信息,指針鏈中指向所述另一塊(76)的最終指針(75)包括指向信息,所述映射控制電路(14)配置用于至少在設備啟動時,通過使用來自主存儲器的指針,跟隨所述的指針鏈,來定位所述指向信息。
2. 根據(jù)權(quán)利要求1所述的設備,其中所述映射控制電路(14)配 置用于多次擦除所述另一塊(76),并將更新的指向信息寫入到所述另 一塊(76),而無需更改指針(72、 75),隨后使用替代塊代替所述另 一塊(76)來存儲指向信息,并更改最終指針以指向所述替代塊。
3. 根據(jù)權(quán)利要求2所述的設備,其中所述映射控制電路(14)配 置用于以另一替代塊代替存儲最終指針(75)的相應塊(74),并更改 指向存儲最終指針的塊(74)的非最終指針(72)以指向所述另一替 代塊,以比更改所述最終指針(75)低的頻率更改所述非最終指針(72)。
4. 根據(jù)權(quán)利要求2所述的設備,其中所述映射控制電路(14)配 置用于依賴于指向信息更新的次數(shù)來動態(tài)地調(diào)整指針鏈的長度。
5. 根據(jù)權(quán)利要求1所述的設備,其中所述映射控制電路(14)配 置用于將每個指向相互不同單元的特定指針(75)的連續(xù)版本寫入針 對特定指針的至少一個特定塊(74)中,所述映射控制電路(14)配 置用于至少在設備啟動時,通過在所述至少一個特定塊(74)中搜索 特定指針的最新版本,來恢復所述特定指針(75)的最新版本。
6. 根據(jù)權(quán)利要求5所述的設備,其中所述映射控制電路(14) 配置用于保留空閑塊(94),當針對特定指針(75)的至少一個特定塊(74)被填滿時,將特定指針的新版本寫入所述空閑塊(94),隨后擦除針對特定指針(75)的至少一個特定塊(74),所述映射控制電路(14) 配置用于在啟動時,當所述映射控制電路(14)檢測到針對特定指針 (75)的至少一個特定塊(74)為滿或空時,在空閑塊(94)中搜索 特定指針(75)的最新版本。
7. 根據(jù)權(quán)利要求6所述的設備,其中所述映射控制電路(14) 配置用于將指向針對特定指針(75)的至少一個特定塊(74)和空閑 塊(94)的指針一起存儲在相應塊(70)中。
8. 根據(jù)權(quán)利要求6所述的設備,其中所述映射控制電路(14) 配置用于使用所述空閑塊(94)作為針對多個同時有效的指針的各個 塊所共用的空閑塊。
9. 根據(jù)權(quán)利要求1所述的設備,其中所述映射控制電路(14) 配置用于維護指針樹(72、 72a、 92、 105a、 105b),指針樹中的最終 指針a05a、 b)指向包含指向信息的各個塊,所述指針鏈是指針樹的 一部分,指針樹中的非最終指針(72)指向共享塊(74),將從指針樹 中的一個節(jié)點發(fā)出的不同分支的指針一起存儲在共享塊(74)中。
10. 根據(jù)權(quán)利要求9所述的設備,其中所述映射控制電路(14) 配置用于在主存儲器(10)的共享塊(74)中寫入特定指針(105a、 105b)的連續(xù)版本,其中按照依賴于特定指針(74)更新順序的動態(tài) 選擇次序,將針對各分支的特定指針(105a、 b)寫入所述共享塊(74) 中的相互不同的單元,所述映射控制電路(14)配置用于至少在啟動 時,通過在共享塊(74)中搜索特定指針(105a、 105b)的最新版本, 獲得每個分支的特定指針(105a、 b)的最新版本。
11. 根據(jù)權(quán)利要求IO所述的設備,其中所述映射控制電路(14) 配置用于保留空閑塊(94),當各個塊(74)被填滿時,將一個特定指 針的新版本寫入所述空閑塊,將其它分支的指針(105a、 105b)的最 新版本復制到所述空閑塊(94)中,并隨后擦除共享塊(74),所述映 射控制電路(14)配置用于至少在啟動時,當映射控制電路(14)檢 測到共享塊(74)為滿時,在空閑塊(94)中搜索各分支的指針。
12. 根據(jù)權(quán)利要求11所述的設備,所述映射控制電路(14)配 置用于至少在啟動時和當任何一個存儲特定指針(105a、 b)的塊(74)為滿時,測試信息是否存儲在空閑塊(94)中,如果是,使用來自空 閑塊(94)的信息代替來自已被填滿的塊(74)的信息。
13. 根據(jù)權(quán)利要求l所述的設備,其中所述主存儲器(10)是閃存。
14. 根據(jù)權(quán)利要求1所述的設備,包括RAM存儲器,所述映射 控制電路(14)配置用于將直接指向包含指向信息的塊(76)的直接 指針存儲在RAM存儲器中,且在啟動后的操作中,使用所述直接指 針來定位指向信息。
15. —種操作主存儲器(10)的方法,所述主存儲器(10)包括 多個存儲單元的物理塊,所述主存儲器(10)支持每次擦除至少一個 物理塊,所述方法包括存儲指針(72、 75)的指針鏈,每個指針(72、 75)存儲在相應 塊(70、 74)中,指針鏈中的每個非最終指針(72)指向包含指針鏈 中的下一指針的相應塊(74);在至少另一塊(76)中存儲指向信息,指針鏈中的最終指針指向 所述另一塊(76);在開始使用主存儲器(10)時,通過跟隨所述指針鏈,來定位所 述指向信息。
全文摘要
一種具有主存儲器(10)的設備,所述主存儲器包括多個存儲單元的物理塊。所述存儲器(10),例如閃存,支持每次至少一個物理塊的擦除0。最終指向諸如邏輯地址到物理地址地映射表的指針鏈(72、75)存儲在主存儲器中,每個指針(72、75)存儲在塊(70、74)的各自部分中,每個在鏈中的指向各自塊(74)的非最終指針(72)包括在鏈中的下一個指針。在主存儲器(10)的啟動時,使用來自主存儲器的指針,跟隨所述指針鏈來定位指向信息。在正常操作時,優(yōu)選地使用存儲在RAM中的直接指針。
文檔編號G06F12/02GK101346704SQ200680048804
公開日2009年1月14日 申請日期2006年12月13日 優(yōu)先權(quán)日2005年12月22日
發(fā)明者尼古拉斯·蘭伯特, 維克托·M·G·艾科特 申請人:Nxp股份有限公司