亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

提供閃存系統(tǒng)中的讀狀態(tài)和空閑塊管理信息的控制器和方法

文檔序號(hào):6350143閱讀:228來(lái)源:國(guó)知局
專利名稱:提供閃存系統(tǒng)中的讀狀態(tài)和空閑塊管理信息的控制器和方法
技術(shù)領(lǐng)域
背景技術(shù)
NAND閃存器件通常由諸如個(gè)人計(jì)算機(jī)的主機(jī)用來(lái)存儲(chǔ)數(shù)據(jù)。在許多架構(gòu)中,NAND 控制器用于促進(jìn)主機(jī)和NAND閃存器件之間的通信。在一些控制器架構(gòu)中,NAND控制器使用 NAND接口與NAND閃存器件交互,并且使用標(biāo)準(zhǔn)的非NAND接口、比如USB或者SATA與主機(jī)交互。在這樣的系統(tǒng)中,主機(jī)可以產(chǎn)生糾錯(cuò)碼(error correction code, ECC)以針對(duì)傳輸錯(cuò)誤以及存儲(chǔ)錯(cuò)誤進(jìn)行保護(hù)?;蛘?,控制器可以產(chǎn)生ECC,主機(jī)可以產(chǎn)生錯(cuò)誤檢測(cè)碼(error detection code, EDC)來(lái)保護(hù)數(shù)據(jù)免于可能在主機(jī)和控制器之間的非NAND接口上發(fā)生的傳輸錯(cuò)誤?!癗AND Flash Memory Controller Exporting a NAND hterface” 的美國(guó)專利號(hào)11/326,336(公開(kāi)為美國(guó)專利公開(kāi)號(hào)US2007/0074093)公開(kāi)了向主機(jī)輸出NAND接口的控制器,其通過(guò)參考合并于此。以此方式,控制器向主機(jī)輸出由標(biāo)準(zhǔn)NAND閃存器件輸出到主機(jī)的相同類(lèi)型的接口。該控制器還可以用于產(chǎn)生ECC以保護(hù)要被存儲(chǔ)在NAND閃存器件中的數(shù)據(jù)或者向已經(jīng)受主機(jī)產(chǎn)生的ECC保護(hù)的數(shù)據(jù)提供另外的保護(hù)。

發(fā)明內(nèi)容
以下所述的實(shí)施例提供了用于提供閃存系統(tǒng)中的狀態(tài)和空閑塊管理信息以及用于與主機(jī)協(xié)作來(lái)管理空閑塊分配的控制器和方法。在一個(gè)實(shí)施例中,控制器從主機(jī)接收命令,從閃存取回?cái)?shù)據(jù),并且針對(duì)錯(cuò)誤分析取回的數(shù)據(jù),并將狀態(tài)信息傳輸?shù)街鳈C(jī),其中該狀態(tài)信息包括基于錯(cuò)誤分析的結(jié)果的信息,比如讀錯(cuò)誤?;蛘撸刂破鞔鎯?chǔ)狀態(tài)信息并向主機(jī)傳輸標(biāo)識(shí)關(guān)于錯(cuò)誤的狀態(tài)信息在存儲(chǔ)器中可獲得的錯(cuò)誤指示符。在另一實(shí)施例中,控制器可重新選擇地被初始化為多個(gè)空閑塊管理模式之一,其中在分割管理模式下,控制器可以要求主機(jī)返回對(duì)主機(jī)可用的額外的塊。公開(kāi)了其他實(shí)施例,這些實(shí)施例的每個(gè)可以單獨(dú)使用或者組合在一起使用?,F(xiàn)在將參考附圖描述各實(shí)施例。


圖1是包括控制器、主機(jī)和一個(gè)或多個(gè)閃存器件的實(shí)施例的系統(tǒng)的框圖。圖2A、2B和2C是實(shí)施例的控制器和閃存器件的不同布置的框圖。圖3是實(shí)施例的示例控制器的框圖。圖4是用于向閃存器件寫(xiě)數(shù)據(jù)以及從閃存器件讀數(shù)據(jù)的實(shí)施例的控制器的框圖。圖5是使用實(shí)施例的控制器在閃存器件中寫(xiě)數(shù)據(jù)的方法的流程圖。圖6是使用實(shí)施例的控制器從閃存器件讀數(shù)據(jù)的方法的流程圖。圖7例示被配置用于提供讀狀態(tài)和空閑塊管理控制的實(shí)施例的控制器布置。圖8A、8B、8C和8D是可以由圖7的控制器產(chǎn)生的數(shù)據(jù)消息格式的例子。
圖9是可用于在圖8C的數(shù)據(jù)消息格式中使用的數(shù)據(jù)字段的實(shí)施例。圖10是用于使用圖7的控制器向主機(jī)提供狀態(tài)信息的實(shí)施例的方法的流程圖。圖11是例示使用圖7的控制器管理空閑塊的一個(gè)實(shí)施例的流程圖。圖12A和12B是示例閃存器件內(nèi)的好的、壞的以及空閑塊區(qū)域的例示。圖13A-D是實(shí)施例的示例控制器的框圖。
具體實(shí)施例方式爐以下實(shí)施例針對(duì)閃存控制器以及使用其的方法。在一個(gè)實(shí)施例中,提供了用于在主機(jī)中的主機(jī)控制器和閃存器件之間接口的控制器和方法。在另一實(shí)施例中,公開(kāi)了使用糾錯(cuò)碼檢測(cè)經(jīng)過(guò)NAND接口的傳輸錯(cuò)誤的控制器和方法。在另一實(shí)施例中,公開(kāi)了用于提供讀狀態(tài)和空閑塊管理信息的控制器和方法。應(yīng)該注意,這些實(shí)施例中的任意一個(gè)可以單獨(dú)或以各種組合使用。在轉(zhuǎn)向這些以及其他實(shí)施例之前,提供示例控制器架構(gòu)的一般概況以及NAND接口和NAND接口協(xié)議的討論。示例的控制器架構(gòu)現(xiàn)在轉(zhuǎn)向附圖,圖1是其中控制器100通過(guò)第一接口 125與(具有主機(jī)控制器121 的)主機(jī)120通信并通過(guò)一個(gè)或多個(gè)第二接口 135與一個(gè)或多個(gè)閃存器件130通信的實(shí)施例的系統(tǒng)。(第二接口 135的數(shù)量可以與閃存器件130的數(shù)量相匹配,或者第二接口 135 的數(shù)量可以多于或少于閃存器件130的數(shù)量(例如單個(gè)第二接口 135可以支持多個(gè)閃存器件)。)如在此使用的,短語(yǔ)“與……通信”意味著直接與之通信或者通過(guò)一個(gè)或多個(gè)組件——其可能有或者可能沒(méi)有在此示出或描述——間接與之通信?!爸鳈C(jī)”是能夠直接地或者通過(guò)在此指出或未指出的一個(gè)或多個(gè)組件間接地通過(guò)控制器100存取一個(gè)或多個(gè)閃存器件130的任意實(shí)體。主機(jī)可以呈現(xiàn)任何適當(dāng)?shù)男问剑热绲幌抻趥€(gè)人計(jì)算機(jī)、移動(dòng)電話、游戲設(shè)備、個(gè)人數(shù)字助理(PDA)、電子郵件/文本傳信 (messaging)設(shè)備、數(shù)字相機(jī)、數(shù)字媒體(例如MP3)播放器、GPS導(dǎo)航設(shè)備、個(gè)人導(dǎo)航系統(tǒng) (PND)、移動(dòng)互聯(lián)網(wǎng)設(shè)備(MID)以及TV系統(tǒng)。取決于應(yīng)用,主機(jī)120可以呈現(xiàn)硬件設(shè)備、軟件應(yīng)用或者硬件和軟件的組合的形式?!伴W存器件”指包含多個(gè)閃存單元以及用于在閃存單元內(nèi)存儲(chǔ)數(shù)據(jù)的任意所需的控制電路的器件。在一個(gè)實(shí)施例中,閃存單元是NAND存儲(chǔ)器單元,盡管可以使用其他存儲(chǔ)其技術(shù),比如無(wú)源元件陣列,包括一次可編程存儲(chǔ)器元件和/或可重寫(xiě)存儲(chǔ)器元件。(應(yīng)該注意,在這些實(shí)施例中,非NAND閃存器件仍可以使用NAND接口和/或NAND命令和協(xié)議。)無(wú)源元件陣列的一個(gè)例子是三維存儲(chǔ)器陣列。如在此使用的,三維存儲(chǔ)器陣列指的包括在單個(gè)硅基板上彼此垂直地堆疊的多層存儲(chǔ)器單元的存儲(chǔ)器陣列。以此方式,三維存儲(chǔ)器陣列是單片集成電路結(jié)構(gòu),而不是彼此緊密靠近地封裝或晶片接合的多個(gè)集成電路。盡管三維存儲(chǔ)器陣列是優(yōu)選的,但是替代地,存儲(chǔ)器陣列可以采取二維(平面)陣列的形式。通過(guò)參考合并于此的以下專利文獻(xiàn)描述三維存儲(chǔ)器陣列的適當(dāng)配置,其中三維存儲(chǔ)器陣列被配置為多級(jí),在各級(jí)之間共享字線和/或位線美國(guó)專利號(hào)6,034,882,6, 185,122、6,420,215、 6,631,085和7,081,377。此外,閃存器件130可以是單個(gè)存儲(chǔ)器晶片或者多個(gè)存儲(chǔ)器晶片。 因而,權(quán)利要求中使用的短語(yǔ)“閃存器件”可以指僅一個(gè)閃存器件或者多于一個(gè)閃存器件。
如圖1中所示,控制器100還包括控制模塊140,用于控制控制器100的操作以及基于從主機(jī)120接收的命令(例如讀、寫(xiě)、擦除等)和地址進(jìn)行存儲(chǔ)器操作。如在此使用的,“模塊”可以包括硬件、軟件、固件或其任意組合。例如,“模塊”可以采取的形式的例子包括但不限于微處理器或處理器以及存儲(chǔ)由(微)處理器執(zhí)行的計(jì)算機(jī)可讀程序代碼(例如軟件或固件)的計(jì)算機(jī)可讀介質(zhì)、邏輯門(mén)、開(kāi)關(guān)、專用集成電路(ASIC)、可編程邏輯控制器和嵌入的微控制器中的一個(gè)或多個(gè)。(以下部分提供了“模塊”可以采取的各種形式的例子。)如圖1中所示,控制器100可以包括一個(gè)或多個(gè)另外的模塊150,用于提供其他功能性,包括但不限于數(shù)據(jù)加擾、列替換、(經(jīng)由安全區(qū))處理寫(xiě)異常中止和/或編程故障、 讀清洗(scrubbing)、磨損均衡、壞塊和/或空閑塊管理、糾錯(cuò)碼(ECC)功能性、錯(cuò)誤檢測(cè)碼(EDC)功能性、狀態(tài)功能性、加密功能性、錯(cuò)誤恢復(fù)和地址映射(例如邏輯到物理塊的映射)。以下部分提供了關(guān)于這些功能的更多細(xì)節(jié)以及其他功能的另外的例子。盡管控制器100和閃存器件130在圖1中被示出為兩個(gè)單獨(dú)的框,但是應(yīng)該理解, 控制器100和閃存器件130可以按任何適當(dāng)?shù)姆绞讲贾谩D2A、2B和2C是例示控制器和閃存器件的不同布置的框圖。在圖2A中,控制器200和閃存器件230被包裝在不同的包裝 260、270中。在此實(shí)施例中,晶片間接口可以在控制器200和閃存器件230之間接口。如在此使用的,“晶片間接口”(例如晶片間NAND接口)可操作以在存在于不同晶片上的電子電路的兩個(gè)不同的單元之間接口(例如以提供所需的物理和邏輯構(gòu)造用于不同單元的電子電路例如使用一個(gè)或多個(gè)專門(mén)的協(xié)議彼此通信)。因此,晶片間接口包括用于在存在于分離的晶片上的電子電路的兩個(gè)不同單元之間接口所需的物理元件(例如墊、輸出、輸入驅(qū)動(dòng)器等)ο在圖2B中,控制器200和閃存器件230兩者均存在于公共的多芯片包裝觀0內(nèi)。 在此實(shí)施例中,晶片間接口可以在制造于在公共的多芯片包裝觀0中包裝的兩個(gè)不同的晶片上的控制器200和閃存器件230之間接口。在圖2C中,控制器200和閃存器件230被集成在相同的晶片290上。作為另一替換,控制器200和/或閃存器件230可以被制造在兩個(gè)不同的晶片上,其中這兩個(gè)晶片之一或兩者根本不具有包裝。例如,在許多應(yīng)用中,由于需要節(jié)約空間,存儲(chǔ)器晶片被安裝在電路板上而根本沒(méi)有包裝。應(yīng)該注意,在這些布置的每個(gè)中,控制器200物理上與主機(jī)分離地布置。這允許控制器200和閃存器件230被認(rèn)為是單獨(dú)的電路單元,其可以用在各種主機(jī)中。如上參考圖1所述,控制器100使用第一接口 125與主機(jī)120通信,并使用第二接口 135與閃存器件130通信。通常,第一和第二接口 125、135可以采取任何適當(dāng)?shù)男问健5?,在將在以下結(jié)合圖3描述的當(dāng)前優(yōu)選的實(shí)施例中,第一和第二接口 125、135兩者是使用 NAND接口協(xié)議的NAND接口。在轉(zhuǎn)向圖3之前,以下部分提供了對(duì)NAND接口和NAND接口協(xié)議的一般討論。NAND 接口和 NAND 接口 協(xié)議NAND接口協(xié)議用于使用例如數(shù)據(jù)線和諸如ALE(地址鎖存啟用)、CLE(命令鎖存啟用)和WE#(寫(xiě)啟用)的控制信號(hào)來(lái)協(xié)調(diào)NAND閃存器件和主機(jī)之間的命令和數(shù)據(jù)傳送。 即使措辭“NAND接口協(xié)議”目前為止在形式上還未被標(biāo)準(zhǔn)化主體標(biāo)準(zhǔn)化,但是NAND閃存器件的制造商全部都遵循支持NAND閃存功能性的基本子集的非常類(lèi)似的協(xié)議。這樣做使得在其電子產(chǎn)品內(nèi)使用NAND器件的消費(fèi)者可以使用來(lái)自任意制造商的NAND器件而無(wú)需調(diào)整
7其硬件或軟件用于與專門(mén)廠商的器件一起工作。應(yīng)該注意,即使提供了超過(guò)該功能性基本子集的額外功能性的NAND廠商也至少某種程度上確保提供基本功能性以便提供與其他廠商使用的協(xié)議的兼容性。如果給出的器件(例如控制器、閃存器件、主機(jī)等)包括支持NAND接口協(xié)議所需的元件(例如硬件、軟件、固件或其任意組合)(例如用于使用NAND接口協(xié)議與另一器件交互),則給出的器件被描述為包括、包含或具有“NAND接口”。(如在此使用的,措辭“接口,, 可以指單個(gè)接口或者多個(gè)接口。因而,權(quán)利要求中的措辭“接口,,可以指僅一個(gè)接口或者多于一個(gè)接口。)在本申請(qǐng)中,措辭“NAND接口協(xié)議”(或者簡(jiǎn)稱的“NAND接口”)指發(fā)起設(shè)備和響應(yīng)設(shè)備之間的接口協(xié)議,其一般遵循主機(jī)和NAND閃存器件之間的用于基本的讀、寫(xiě)和擦除操作的協(xié)議,即使其并不完全與所有定時(shí)參數(shù)兼容或者關(guān)于NAND器件支持的其他命令并不完全兼容,或者包含NAND器件不支持的另外的命令。NAND接口協(xié)議的一個(gè)適當(dāng)?shù)睦邮鞘褂迷诠δ苄陨系刃в谟糜谧x(操作碼00H)、寫(xiě)(操作碼80H)和擦除(操作碼60H) 的當(dāng)與 ^Toshiba TC58NVG1S3B NAND 器件(或者 ^Toshiba TC58NVG2D4B NAND 器件)接口時(shí)使用的字節(jié)的序列的傳送的字節(jié)的序列,并且還使用在功能性上等效于以上NAND器件的 CLE、ALE、CE、WE和RE信號(hào)的控制信號(hào)的接口協(xié)議。要注意,NAND接口協(xié)議不對(duì)稱,在于主機(jī)——不是閃存器件——發(fā)起通過(guò)NAND接口的交互。此外,給定的器件(例如控制器)的接口(例如NAND接口或者與另一協(xié)議相關(guān)聯(lián)的接口)可以是“主機(jī)側(cè)接口”(例如給定的器件被適配為使用主機(jī)側(cè)交口與主機(jī)交互) 或者給定器件的接口可以是“閃存器件側(cè)接口”(例如給定器件被適配為使用閃存器件側(cè)接口與閃存器件交互)。措辭“閃存器件側(cè)接口”、“快閃器件側(cè)接口”和“快閃側(cè)接口”在此可互換地使用。這些措辭(即“主機(jī)側(cè)接口 ”和“快閃器件側(cè)接口 ” )不應(yīng)與措辭“主機(jī)類(lèi)型接口 ” 和“快閃類(lèi)型接口”混淆,在此術(shù)語(yǔ)上使用它們來(lái)在兩側(cè)的NAND接口協(xié)議之間區(qū)分,因?yàn)榇藚f(xié)議不是對(duì)稱的。此外,因?yàn)榘l(fā)起交互的是主機(jī),我們注意到如果給定器件包括實(shí)現(xiàn)主機(jī)側(cè)的NAND接口協(xié)議(即用于呈現(xiàn)NAND主機(jī)和發(fā)起NAND協(xié)議交互)所需的硬件和/或軟件, 則該器件被描述為具有“主機(jī)類(lèi)型接口”。類(lèi)似地,因?yàn)榭扉W器件不發(fā)起交互,我們注意到如果給定器件包括用于實(shí)現(xiàn)快閃側(cè)NAND協(xié)議(即用于呈現(xiàn)NAND快閃器件)所需的硬件和/ 或軟件,則該器件被描述為具有“快閃類(lèi)型接口 ”。通常,主機(jī)類(lèi)型接口(即,擔(dān)當(dāng)主機(jī)的角色的接口)是“快閃器件側(cè)接口”(即它們與快閃器件或者與模擬快閃器件的硬件交互),而“快閃器件類(lèi)型接口”(即擔(dān)當(dāng)快閃器件的角色的接口)通常是“主機(jī)側(cè)接口”(即,它們與主機(jī)或者與模擬主機(jī)的硬件交互)。由于NAND器件的復(fù)雜性,在電子系統(tǒng)中“NAND控制器”可以用于控制NAND器件的使用。能夠直接由主機(jī)而沒(méi)有中間的NAND控制器來(lái)操作和使用NAND器件;但是,這樣的架構(gòu)存在許多缺點(diǎn)。首先,主機(jī)需要單獨(dú)操縱NAND器件的控制信號(hào)的每一個(gè)(例如CLE或者 ALE),這對(duì)主機(jī)來(lái)說(shuō)是麻煩和耗時(shí)的。其次,對(duì)糾錯(cuò)碼(ECC)的支持為主機(jī)帶來(lái)負(fù)擔(dān)。至少因?yàn)檫@些原因,“無(wú)控制器”架構(gòu)通常相對(duì)緩慢和低效。在一些傳統(tǒng)的控制器架構(gòu)中,NAND控制器使用NAND接口與閃存器件交互并使用標(biāo)準(zhǔn)的非NAND接口、比如USB或者SATA與主機(jī)交互。也就是說(shuō),在這些傳統(tǒng)的控制器架構(gòu)中,NAND控制器不向主機(jī)輸出NAND接口。確實(shí),這樣預(yù)期是合理的,因?yàn)椴痪哂袃?nèi)置NAND支持性并且為此目的需要外部控制器的主機(jī)處理器通常不具有NAND接口,并且不能直接連接到輸出NAND接口的設(shè)備,因此沒(méi)有使用具有主機(jī)側(cè)NAND接口的控制器。另一方面,具有內(nèi)置的NAND支持性的處理器通常還包括內(nèi)置的NAND控制器,并且可以直接連接到NAND 器件,因此無(wú)需外部NAND控制器。通過(guò)參考合并于此的"NAND Flash Memory Controller Exporting a NAND hterface”的美國(guó)專利號(hào)11/326,336 (公開(kāi)為美國(guó)專利公開(kāi)號(hào)US2007/0074093)公開(kāi)了新的類(lèi)型的NAND控制器,其特征在于其向主機(jī)側(cè)輸出的接口是NAND接口的事實(shí)。以此方式, NAND接口向主機(jī)輸出由標(biāo)準(zhǔn)NAND閃存器件輸出的相同類(lèi)型的接口。優(yōu)選該控制器還具有在閃存器件側(cè)的NAND接口,其中該控制器對(duì)于NAND閃存器件擔(dān)當(dāng)主機(jī)的角色,并且對(duì)于主機(jī)擔(dān)當(dāng)NAND器件的角色。輸出NAND接口的示例NAND閃存控制器回到附圖,圖3是實(shí)施例的示例控制器200的框圖。如圖3所示,控制器300包括控制模塊340,用于控制控制器300的操作,以及可選地包括一個(gè)或多個(gè)另外的模塊350,用于提供其他功能。其他功能的例子包括但不限于數(shù)據(jù)加擾、列替換、(經(jīng)由安全區(qū))處理寫(xiě)異常中止和/或編程故障、讀清洗、磨損均衡、壞塊和/或空閑塊管理、糾錯(cuò)碼(ECC)功能性、錯(cuò)誤檢測(cè)碼(EDC)功能性、狀態(tài)功能性、加密功能性、錯(cuò)誤恢復(fù)和地址映射(例如邏輯到物理塊的映射)。以下段落描述了這些功能中的一些,并且此文檔稍后的部分描述其他這些功能。“數(shù)據(jù)加擾”或“加擾”是輸入位序列到輸出位序列的可逆變換,使得輸出位序列的每位是輸入位序列和輔助位序列的幾位的函數(shù)。存儲(chǔ)在閃存器件中的數(shù)據(jù)可以被加擾以便通過(guò)創(chuàng)建更隨機(jī)化的數(shù)據(jù)樣式而減少依賴于數(shù)據(jù)樣式的敏感性、干擾影響或錯(cuò)誤。可以在以下專利文獻(xiàn)美國(guó)專利申請(qǐng)?zhí)?1/808,906,12/209, 697,12/251, 820,12/165, 141和 11/876,789以及PCT申請(qǐng)?zhí)朠CT/US08/88625中找到關(guān)于數(shù)據(jù)加擾的更多信息?!傲刑鎿Q”指映射或替換整個(gè)壞的列、列的部分或甚至個(gè)別單元的各種實(shí)現(xiàn)方式。 可以在美國(guó)專利號(hào)7,379,330和7,447,066中找到適當(dāng)類(lèi)型的列替換技術(shù)。在向閃存器件寫(xiě)數(shù)據(jù)時(shí)存在幾個(gè)潛在的問(wèn)題,其中在數(shù)據(jù)試圖被寫(xiě)到的位置之外邏輯或物理上相鄰的數(shù)據(jù)可能損壞。一個(gè)例子是如下時(shí)刻,向存儲(chǔ)器的一個(gè)區(qū)域(例如單元、頁(yè)或塊)的寫(xiě)失敗,并且某些周?chē)拇鎯?chǔ)器的內(nèi)容可能損壞。這被稱為“編程故障”或者“編程干擾”。已知為“寫(xiě)異常中止(write abort)”的類(lèi)似的效果是當(dāng)寫(xiě)操作被過(guò)早地終止時(shí),例如當(dāng)非預(yù)期地?cái)嚯姇r(shí)。在這兩種情況下,存在可以用于積極主動(dòng)地將數(shù)據(jù)從“有風(fēng)險(xiǎn)區(qū)”復(fù)制到“安全區(qū)”以處理寫(xiě)異常中止和編程故障的算法,如美國(guó)專利號(hào)6,988,175中所述?!白x清洗”或者更普遍地“清洗”指刷新和校正存儲(chǔ)在閃存器件中的數(shù)據(jù)以補(bǔ)償干擾的技術(shù)。清洗操作需要讀在可能已經(jīng)面臨潛在干擾信號(hào)的區(qū)域中的數(shù)據(jù)和如果此數(shù)據(jù)被確定為已經(jīng)被干擾進(jìn)行某些校正的動(dòng)作。在美國(guó)專利號(hào)7,012,835、7,2 ,607和 7,477,547中進(jìn)一步描述了讀清洗。閃存器件可能被不均勻地寫(xiě)入,并且“磨損均衡”指試圖使存儲(chǔ)器在其使用期限間被寫(xiě)入的次數(shù)均勻的技術(shù)。在美國(guó)專利號(hào)6,230,233和6,594,183中描述了示例的磨損均衡技術(shù)。
通常,以多余數(shù)量(比定義的最小容量更大)的塊制造閃存器件。在工廠測(cè)試期間或者在器件的使用期間,某些塊可能被發(fā)現(xiàn)是“壞的”或者“有缺陷的”,意味著它們不能正確地存儲(chǔ)數(shù)據(jù)并需要被替換。類(lèi)似地,可能存在多余的“好的”塊(比定義的最小容量更大),它們可以被用作“空閑的”,直到另一塊故障或者變?yōu)橛腥毕?。保持跟蹤這些額外的塊分別被稱為壞塊管理和空閑塊管理??梢栽诿绹?guó)專利號(hào)7,171,536中找到關(guān)于壞塊和空閑塊管理的更多信息。如上所述,在此文檔中稍后提供關(guān)于這些不同的功能模塊以及它們?cè)谑纠目刂破骷軜?gòu)中如何使用的另外的信息。回到附圖,還如圖3所示,控制器300包括一個(gè)或多個(gè)閃存器件側(cè)NAND接口 335, 用于與一個(gè)或多個(gè)NAND快閃器件330(例如1-8個(gè)存儲(chǔ)器晶片)接口。此外,注意到,閃存器件側(cè)NAND接口 335也是主機(jī)類(lèi)型NAND接口(即,其被適配為發(fā)起經(jīng)過(guò)NAND接口的交互并向NAND快閃器件330呈現(xiàn)主機(jī))??刂破?00還包括主機(jī)側(cè)NAND接口 325,用于接口到支持NAND接口協(xié)議的(具有主機(jī)控制器321的)主機(jī)320。該主機(jī)側(cè)NAND接口 325也是閃存類(lèi)型NAND接口(例如,控制器300被適配為向主機(jī)320呈現(xiàn)NAND閃存存儲(chǔ)器件)。 NAND接口的例子包括但不限于開(kāi)放NAND快閃接口(ONFI)、觸發(fā)(toggle)模式(TM)和高性能閃存接口,比如在美國(guó)專利號(hào)7,366,029中描述的,其通過(guò)參考合并于此。控制器300 可選地可以包括一個(gè)或多個(gè)另外的主機(jī)側(cè)接口,用于將控制器300接口到使用非NAND接口比如SD、USB、SATA或匪C接口的主機(jī)。此外,接口 325、335可以使用相同或不同的NAND接口協(xié)議。應(yīng)該注意,控制器300和閃存器件330可以用在任何期望的系統(tǒng)環(huán)境中。例如,在一個(gè)實(shí)現(xiàn)方式中,以一個(gè)或多個(gè)控制器300/閃存器件330單元制造的產(chǎn)品用在固態(tài)驅(qū)動(dòng)器 (SSD)中。作為另一例子,控制器300可以用在使用南橋控制器以接口到閃存器件的OEM設(shè)計(jì)中。存在使用向主機(jī)輸出NAND接口的NAND閃存控制器的幾個(gè)優(yōu)點(diǎn)。為了理解這些優(yōu)點(diǎn),首先考慮當(dāng)前控制器架構(gòu)的實(shí)際情況?,F(xiàn)今,存在兩種類(lèi)型的NAND接口 “原始”接口和“管理的”接口。利用原始接口,基本存儲(chǔ)器面臨像讀、編程、和擦除的基本命令,,并且期望外部控制器提供諸如ECC、缺陷管理和快閃翻譯的存儲(chǔ)器管理功能。利用管理的接口,通過(guò)一些較高級(jí)的接口,管理諸如扇區(qū)/頁(yè)/塊或文件的邏輯項(xiàng),并且控制器管理存儲(chǔ)器管理功能。但是,“管理”NAND所需的固件集可以被劃分為兩類(lèi)。第一類(lèi)是主要管理主機(jī)接口、對(duì)象(以及讀/修改/寫(xiě)序列)和緩存的普通快閃軟件。這被稱為“主機(jī)管理”層。第二類(lèi)是進(jìn)行例如ECC、數(shù)據(jù)加擾和具體的錯(cuò)誤恢復(fù)和錯(cuò)誤阻止技術(shù)、像積極主動(dòng)的讀清洗和復(fù)制下頁(yè)塊以防止由于寫(xiě)異常中止、電力故障和寫(xiě)錯(cuò)誤引起的數(shù)據(jù)丟失的快閃專門(mén)的管理功能性。這被稱為“器件管理”層。第一類(lèi)軟件相對(duì)穩(wěn)定,并且可以由各個(gè)公司、包括OS廠商、芯片集和控制器廠商以及嵌入式器件廠商來(lái)提供。通常,假設(shè)存在可能想要在其設(shè)計(jì)中使用快閃的M個(gè)具體系統(tǒng)/0S/ASIC。第二集合是各個(gè)公司潛在私有的,甚至是專用于某些存儲(chǔ)器設(shè)計(jì)和某些代存儲(chǔ)器的。通常,假設(shè)存在N個(gè)不同的存儲(chǔ)器專用設(shè)計(jì)點(diǎn)。現(xiàn)今,這對(duì)快閃管理是要么全有要么全無(wú)(all-or-nothing)的方法——購(gòu)買(mǎi)原始NAND或者管理的NAND。這也意味著解決方案必需將M個(gè)系統(tǒng)和主機(jī)管理環(huán)境之一與N個(gè)存儲(chǔ)器器件管理環(huán)境之一合并。通常,這意味著(1)具有第二種知識(shí)的快閃廠商必需提供所有層的解決方案,包括ASIC控制器和主機(jī)接口軟件,并對(duì)M個(gè)不同的主機(jī)機(jī)會(huì)進(jìn)行M個(gè)不同的設(shè)計(jì),或者(2)任何獨(dú)立的ASIC和固件公司少有機(jī)會(huì)不進(jìn)行N個(gè)不同的設(shè)計(jì)來(lái)定制其對(duì)具體存儲(chǔ)器設(shè)計(jì)的解決方案,或者(3) 兩個(gè)公司需要一起工作,潛在地暴露了有價(jià)值的商業(yè)秘密以及IP和/或?yàn)槊總€(gè)存儲(chǔ)器設(shè)計(jì)實(shí)現(xiàn)不同的解決方案。如果M個(gè)不同的主機(jī)解決方案需要被修改以接受任何新的存儲(chǔ)器設(shè)計(jì),這還可能產(chǎn)生進(jìn)入市場(chǎng)時(shí)間延遲,或者反之亦然。通過(guò)使用向主機(jī)輸出NAND接口的NAND閃存控制器,提供了新的邏輯接口,該新的邏輯接口使用諸如遺留異步、ONFI或TM的現(xiàn)有物理NAND接口和命令來(lái)創(chuàng)建在原始或者物理NAND以上的并且在邏輯或者管理的NAND之下的新的邏輯接口,在主機(jī)控制器中不需要 ECC地來(lái)創(chuàng)建“虛擬的”原始NAND存儲(chǔ)器,并且禁用主機(jī)ECC(因?yàn)橹鳈C(jī)需要OECC來(lái)保護(hù) NAND存儲(chǔ)器)。此新的邏輯接口還可以提供例如“低于”此接口級(jí)的數(shù)據(jù)加擾、清洗、干擾、 安全區(qū)處理、磨損均衡和壞塊管理(以僅暴露好的塊)。此不同的邏輯接口提供了超過(guò)標(biāo)準(zhǔn)快閃接口或者管理的NAND接口(包括ONFI塊抽象化(BA)或者Toshiba LBA)的幾個(gè)優(yōu)點(diǎn)。例如,可能隨著存儲(chǔ)器類(lèi)型和存儲(chǔ)器代(例如NAND相對(duì)3D (或NOR)以及5Xnm相對(duì)4Xnm相對(duì)3Xnm)而變化的存儲(chǔ)器專用功能的分離允許不同量的ECC、對(duì)于錯(cuò)誤阻止和校正方案的廠商唯一和存儲(chǔ)器唯一的方案,比如處理干擾和安全區(qū),并允許廠商唯一的算法以在控制器和固件中保留“秘密”。另外,在此邏輯接口級(jí),技術(shù)(和廠商)之間存在更多的共同性,這使得更迅速進(jìn)入市場(chǎng)。此外,這允許更接近于1 1命令操作,意味著相對(duì)管理的NAND或者其他更高級(jí)接口的改進(jìn)和更可預(yù)測(cè)的性能。存在與此控制器架構(gòu)相關(guān)的另外的優(yōu)點(diǎn)。例如,允許存儲(chǔ)器技術(shù)相對(duì)于主機(jī)和系統(tǒng)的其他部分的獨(dú)立的開(kāi)發(fā)、測(cè)試和演進(jìn)。還可以允許下一代存儲(chǔ)器的更容易和更快速的部署,因?yàn)橹С帜切┐鎯?chǔ)器的改變更加本地化。此外,允許存儲(chǔ)器制造商保護(hù)用于管理原始快閃的秘密算法。此外,可以將頁(yè)管理與文件系統(tǒng)和/或其他邏輯映射集成。因此,與標(biāo)準(zhǔn)外部接口(電和命令集)組合,此架構(gòu)使得在一代代更透明的原始快閃中更容易地進(jìn)行設(shè)計(jì)。由于使用此架構(gòu),至少存在一個(gè)其他的附屬收益——控制器300僅呈現(xiàn)為在外部接口上的單個(gè)電負(fù)荷并驅(qū)動(dòng)MCP內(nèi)部的原始快閃。這允許潛在地更大的系統(tǒng)容量而不用增加快閃信道的數(shù)量、更高速外部接口(因?yàn)楦儇?fù)荷)以及對(duì)原始快閃器件的更高速內(nèi)部接口(因?yàn)榉浅>o密地控制的內(nèi)部設(shè)計(jì)(基板連接)是可能的)。與此實(shí)施例的控制器相關(guān)的另一優(yōu)點(diǎn)是,其可以用于通過(guò)使用潛在地處于不同速度的不同主機(jī)和存儲(chǔ)器總線來(lái)提供“分割總線”架構(gòu)(即,主機(jī)和控制器之間的總線可以不同于控制器和閃存器件之間的總線)。(如在此使用的,“總線”是具有相同接口的多個(gè)器件(例如芯片或晶片)的電連接。例如,點(diǎn)對(duì)點(diǎn)連接是兩個(gè)設(shè)備之間的總線,但是大多數(shù)接口標(biāo)準(zhǔn)支持使多個(gè)設(shè)備連接到相同的電總線。)在可能潛在地具有數(shù)百個(gè)閃存器件的固態(tài)驅(qū)動(dòng)器(SSD)中尤其需要這樣架構(gòu)。在傳統(tǒng)的SSD架構(gòu)中,當(dāng)前的解決方案是將N個(gè)正常的閃存器件包裝在多芯片包裝(MCP)中,但是這仍然在總線上產(chǎn)生了 N個(gè)負(fù)荷,產(chǎn)生了 N倍的電容和電感??偩€上的負(fù)荷越多,其工作得越慢。例如,一個(gè)當(dāng)前的架構(gòu)可以支持以1-4個(gè)器件的80MHz的操作,但是僅可以支持以8-16個(gè)器件的40MHz操作。這與期望的——如果使用更多器件,則速度更高——相反。此外,更多器件意味著需要主機(jī)和存儲(chǔ)器MCP之間的更大的物理分離。例如,如果使用16個(gè)包裝,則在任意的拓?fù)?topology)(例如總線或星形(或任意末端(stub))拓?fù)?中將延伸相對(duì)大的物理距離(例如幾英寸)。這還降低了任意電接口的潛在性能。因此,為了獲得例如300MHz的傳輸(忽略總線寬度),可以使用四條快速總線或者八條慢速總線。但是,快速總線每個(gè)僅可以支持四個(gè)閃存器件,即總共 16個(gè)器件,這對(duì)于現(xiàn)今的大多數(shù)SSD是不夠的。如果總線運(yùn)行得更快,則可以降低接口連接 (管腳和模擬接口)的數(shù)量以及潛在地主機(jī)中的寄存器(register)和邏輯的量。因?yàn)榇藢?shí)施例中的控制器300將主機(jī)和原始閃存器件之間的互連分割為單獨(dú)的主機(jī)側(cè)接口和快閃側(cè)接口,其之間具有緩沖器,因此主機(jī)總線具有更少的負(fù)荷,并且可以2 到4倍更快地運(yùn)行。此外,因?yàn)榇鎯?chǔ)器總線是MCP內(nèi)部的,因此由于短距離以及涉及的有限的負(fù)荷,其可以具有更低的功率、更高速度和更低電壓。此外,兩個(gè)總線可以以不同的頻率和不同的寬度運(yùn)行(例如一側(cè)可以使用8位總線,另一側(cè)可以使用16位總線)。盡管一些架構(gòu)可能插入標(biāo)準(zhǔn)收發(fā)器以對(duì)這些總線去耦合,但是此實(shí)施例的控制器 300可以使用緩沖并且可以以不同的速度運(yùn)行這些接口。這允許控制器300還匹配兩個(gè)不同速度的總線,例如以140MB/秒運(yùn)行的快閃側(cè)接口總線以及以132或者166MB/秒運(yùn)行的 ONFI總線。傳統(tǒng)的總線收發(fā)器設(shè)計(jì)將需要選取兩個(gè)總線中較低者并在此例子中以132MB/ 秒運(yùn)行,而此實(shí)施例的控制器300可以通過(guò)以166MB/秒運(yùn)行ONFI而實(shí)現(xiàn)140MB/秒,并且基本具有空閑時(shí)段。因此,此實(shí)施例的控制器300以潛在更低的成本和/或更低功率提供了更高性能以及不同產(chǎn)品之間的接口靈活性(例如,不同速度和寬度的主機(jī)和存儲(chǔ)器總線、 在典型系統(tǒng)中的主機(jī)上的更少負(fù)荷(這使能更迅速的操作和存儲(chǔ)器總線帶寬與主機(jī)接口的集合),以及具有接口翻譯的主機(jī)和存儲(chǔ)器側(cè)的不同接口)。如上所述,單個(gè)控制器還可以具有與閃存器件的多個(gè)快閃側(cè)接口 335,這還使能夠在原始閃存器件之間的進(jìn)一步并行化以及到控制器的傳輸,這允許快閃側(cè)接口比主機(jī)側(cè)接口 325更慢地(以及更快地)運(yùn)行。單個(gè)控制器還可以具有可以連接到不同主機(jī)控制器接口的多個(gè)主機(jī)側(cè)接口,以允許在訪問(wèn)閃存器件時(shí)的更大并行化、共享控制器或者更好地匹配快閃側(cè)接口的速度(由于上述原因,其可以比主機(jī)側(cè)接口更快)。向主機(jī)輸入NAND接口的另一優(yōu)點(diǎn)涉及分布式控制器架構(gòu)的使用?,F(xiàn)今,閃存器件通常以單級(jí)控制器實(shí)現(xiàn)。在大的固態(tài)驅(qū)動(dòng)器(SSD)中,可能存在數(shù)十甚至數(shù)百個(gè)快閃器件。 在高性能器件中,可能希望具有在盡可能多的這些快閃器件中進(jìn)行的并行操作,這可能受到功率限制。現(xiàn)今存在600MB/秒的接口規(guī)范,并且其仍在增加。達(dá)到此級(jí)別的性能需要非??焖俚目刂破?、存儲(chǔ)器和ECC模塊?,F(xiàn)今,構(gòu)建高性能控制器具有一個(gè)或少量ECC模塊以及一個(gè)或兩個(gè)微處理器來(lái)處理存儲(chǔ)器器件管理。因?yàn)檫@些功能中的一些非常本地化到存儲(chǔ)器器件本身,比如ECC,因此利用此實(shí)施例的控制器300,可以利用雙層(two-tiered)網(wǎng)絡(luò)的器件。具體地,主機(jī)320可以管理主機(jī)接口和邏輯內(nèi)容的高級(jí)映射,并且由于控制器300 和主機(jī)320的并行執(zhí)行以及處理在不同存儲(chǔ)器320上并行的不同操作的多個(gè)控制器300的并行執(zhí)行,一個(gè)或多個(gè)控制器300可以管理一個(gè)或多個(gè)原始NAND閃存器件以提供存儲(chǔ)器器件功能(例如ECC)的本地管理以及在執(zhí)行這些功能時(shí)的并行化。與SSD中的在一處進(jìn)行存儲(chǔ)器器件管理功能的傳統(tǒng)控制器相反,通過(guò)將這些功能分割為兩層,此架構(gòu)可以以兩種方式利用并行性能(例如在主機(jī)和從屬之間以及在許多從屬之間)。這實(shí)現(xiàn)更高的整體性能級(jí)別(例如600MB/秒)而無(wú)需設(shè)計(jì)可以處理該速率的單個(gè)ECC模塊或者微處理器。此架構(gòu)的另一優(yōu)點(diǎn)是,可以開(kāi)發(fā)對(duì)原始存儲(chǔ)器的更高級(jí)的抽象化,使得系統(tǒng)開(kāi)發(fā)者不需要了解存儲(chǔ)器的錯(cuò)誤恢復(fù)或者低級(jí)細(xì)節(jié),比如ECC和數(shù)據(jù)加擾,因?yàn)榭刂破?00除了處理諸如讀、擦除和編程干擾以及安全區(qū)的存儲(chǔ)器專門(mén)功能之外,還可以用于進(jìn)行那些功能。此級(jí)別的支持在此稱為“校正的”快閃,因?yàn)槠溥壿嬌显谠伎扉W和管理的NAND之間。 另一方面,在邏輯級(jí)別的頁(yè)或者塊管理意義上,此架構(gòu)不完全是管理的存儲(chǔ)器,并且可能需要主機(jī)提供頁(yè)和塊的邏輯到物理映射。但是,控制器300仍然可以向主機(jī)及其固件呈現(xiàn)一些閃存管理限制,比如僅可以編程整頁(yè),必需在塊中按順序?qū)?yè)寫(xiě)入,在整個(gè)塊必需被擦除之前頁(yè)僅可被寫(xiě)入一次。物理塊的用于確保其近似均勻地被使用的磨損均衡也可以由控制器300進(jìn)行,但是,主機(jī)320可以負(fù)責(zé)提供此功能。此外,控制器300優(yōu)選為主機(jī)320呈現(xiàn)到NAND的頁(yè)和塊中的整頁(yè)讀和寫(xiě)操作。邏輯頁(yè)尺寸和塊尺寸的特性將很可能與基本的 NAND相同(除非支持部分頁(yè)操作)。原始NAND中的每個(gè)物理頁(yè)中的空閑區(qū)域的大多數(shù)將由控制器300使用用于ECC及其元數(shù)據(jù)??刂破?00可以提供更少量的空閑字節(jié),使用的系統(tǒng)可以利用其用于元數(shù)據(jù)管理。職NAND ^ □糊捕白句棚列參考圖3,在數(shù)據(jù)從主機(jī)320通過(guò)到主機(jī)側(cè)NAND接口 325的NAND接口總線發(fā)送到控制器300時(shí)可能發(fā)生傳輸錯(cuò)誤。因?yàn)樵诳刂破?00內(nèi)產(chǎn)生并校驗(yàn)ECC,所以沒(méi)有ECC保護(hù)通過(guò)主機(jī)側(cè)NAND接口 325傳輸?shù)臄?shù)據(jù)?,F(xiàn)在將結(jié)合圖4討論此問(wèn)題以及提出的解決方案。圖4是用于向一個(gè)或多個(gè)閃存器件430寫(xiě)數(shù)據(jù)以及從其讀數(shù)據(jù)的實(shí)施例的控制器 400的框圖。如圖4所示,此實(shí)施例中的控制器400包括第一 NAND接口 425,被配置為使用NAND接口協(xié)議在控制器400和(具有主機(jī)控制器421的)主機(jī)420之間傳送數(shù)據(jù);以及第二 NAND接口 435,被配置為使用NAND接口協(xié)議在控制器400以及一個(gè)或多個(gè)閃存器件 430之間傳送數(shù)據(jù)。如上所述,每個(gè)接口 425、435使用的NAND接口協(xié)議可以是相同的協(xié)議或者可以是不同的協(xié)議。還如上所述,控制器400和閃存器件430可以被包裝在不同的包裝中,可以都存在于共同的多芯片包裝中,或者可以被集成在相同的晶片上。此外,在一個(gè)實(shí)施例中,主機(jī)420進(jìn)行邏輯到物理映射,使得主機(jī)420通過(guò)第一 NAND接口 425為控制器 400提供物理地址以及對(duì)該物理地址的讀或?qū)懙拿?。在此?shí)施例中,控制器400包括控制器模塊440,用于控制控制器400的操作;錯(cuò)誤檢測(cè)碼(EDC)模塊450 (例如ECC編碼器/解碼器);以及糾錯(cuò)碼(ECC)模塊460 (例如 ECC編碼器/解碼器)。EDC模塊450可操作以基于輸入的數(shù)據(jù)產(chǎn)生錯(cuò)誤檢測(cè)碼,并且ECC 模塊460可操作以基于輸入的數(shù)據(jù)產(chǎn)生糾錯(cuò)碼。在此實(shí)施例中,控制模塊440被配置為使用 ECC碼來(lái)校正錯(cuò)誤(例如控制器模塊440的部分是ECC校正引擎)。在此上下文中使用的數(shù)據(jù)可以包括要被存儲(chǔ)或取回的正常數(shù)據(jù)頁(yè)以及頭部、元數(shù)據(jù)或者用于存儲(chǔ)由主機(jī)420或者控制器400計(jì)算的地址、標(biāo)志或者數(shù)據(jù)的空閑字段。而錯(cuò)誤檢測(cè)碼允許檢測(cè)至少一個(gè)錯(cuò)誤但不校正,糾錯(cuò)碼允許檢測(cè)并校正至少一個(gè)錯(cuò)誤??梢员粰z測(cè)和/或校正的錯(cuò)誤的數(shù)量取決于所使用的錯(cuò)誤檢測(cè)碼方案和糾錯(cuò)碼方案的類(lèi)型。適當(dāng)類(lèi)型的錯(cuò)誤檢測(cè)碼方案包括但不限于一個(gè)或多個(gè)字節(jié)校驗(yàn)和、縱向冗余校驗(yàn)(LRC)、循環(huán)冗余校驗(yàn)(CRC)或者8b/10b碼。 適當(dāng)類(lèi)型的糾錯(cuò)碼方案包括但不限于漢明碼和里德-所羅門(mén)碼。
圖5和6是例示此實(shí)施例中的控制器400如何分別用在寫(xiě)和讀操作中的流程圖 500、600。首先轉(zhuǎn)向圖5的流程圖500,控制器400通過(guò)第一 NAND接口 425從主機(jī)420接收寫(xiě)命令、數(shù)據(jù)以及與該數(shù)據(jù)相關(guān)聯(lián)的錯(cuò)誤檢測(cè)碼(動(dòng)作510)。(因?yàn)橹鳈C(jī)420不一定知道其正向控制器發(fā)出命令的事實(shí),可以假設(shè)其正與其能夠處理的類(lèi)型的標(biāo)準(zhǔn)NAND閃存器件相接口。)可以在數(shù)據(jù)之前、之后或者與數(shù)據(jù)混合地發(fā)送錯(cuò)誤檢測(cè)碼,在一個(gè)實(shí)施例中,錯(cuò)誤檢測(cè)碼是包含該數(shù)據(jù)的數(shù)據(jù)分組的頭部(例如8-16空閑字節(jié))的部分。如上所述,錯(cuò)誤檢測(cè)碼允許檢測(cè)但不校正數(shù)據(jù)中的至少一個(gè)錯(cuò)誤。接下來(lái),EDC模塊450基于該數(shù)據(jù)產(chǎn)生錯(cuò)誤檢測(cè)碼,控制模塊440將產(chǎn)生的錯(cuò)誤檢測(cè)碼與從主機(jī)420接收的錯(cuò)誤檢測(cè)碼相比較(動(dòng)作520)?;诖吮容^,控制模塊440確定產(chǎn)生的錯(cuò)誤檢測(cè)碼是否與從主機(jī)420接收的錯(cuò)誤檢測(cè)碼相匹配(動(dòng)作530)。如果產(chǎn)生的錯(cuò)誤檢測(cè)碼與從主機(jī)420接收的錯(cuò)誤檢測(cè)碼不匹配,則控制模塊440向主機(jī)420發(fā)送指示在數(shù)據(jù)從主機(jī)420向控制器400的傳輸中出現(xiàn)錯(cuò)誤的信號(hào)(動(dòng)作M0)。然后主機(jī)420可以向控制器400重新發(fā)送該數(shù)據(jù)。但是,如果產(chǎn)生的錯(cuò)誤檢測(cè)碼與從主機(jī)420接收的錯(cuò)誤檢測(cè)碼相匹配,則以ECC模塊460基于該數(shù)據(jù)產(chǎn)生糾錯(cuò)碼來(lái)繼續(xù)寫(xiě)處理(動(dòng)作550)。如上所述,糾錯(cuò)碼允許檢測(cè)并校正數(shù)據(jù)中的至少一個(gè)錯(cuò)誤。然后控制模塊440通過(guò)第二 NAND接口 435將該數(shù)據(jù)和糾錯(cuò)碼存儲(chǔ)在閃存器件430中。 此外,根據(jù)NAND接口協(xié)議發(fā)出命令,包括命令字節(jié)、地址字節(jié)、頭部字節(jié)和包含主機(jī)的數(shù)據(jù)字節(jié)和由ECC模塊460產(chǎn)生的相應(yīng)ECC位的數(shù)據(jù)字節(jié)。以此方式,閃存器件430甚至不一定知道它們正經(jīng)由控制器400間接地而不是直接從主機(jī)420接收信息。現(xiàn)在轉(zhuǎn)向圖6,流程圖600例示控制器400如何用在讀操作中。如圖6所示,控制器400從主機(jī)420接收讀命令(動(dòng)作610)??刂破?00然后從閃存器件430讀取數(shù)據(jù)和與該數(shù)據(jù)相關(guān)聯(lián)的糾錯(cuò)碼(動(dòng)作620)。如上所述,糾錯(cuò)碼允許檢測(cè)并校正數(shù)據(jù)中的至少一個(gè)錯(cuò)誤。接下來(lái),ECC模塊460基于該數(shù)據(jù)產(chǎn)生糾錯(cuò)碼,并且控制模塊440 (例如使用ECC校正引擎)將產(chǎn)生的糾錯(cuò)碼與從閃存器件430接收的糾錯(cuò)碼相比較(動(dòng)作630)。基于該比較, 控制模塊440確定產(chǎn)生的糾錯(cuò)碼是否與從閃存器件430接收的糾錯(cuò)碼相匹配(動(dòng)作640)。 如果產(chǎn)生的糾錯(cuò)碼不與從閃存器件430接收的糾錯(cuò)碼相匹配,則控制模塊440嘗試校正數(shù)據(jù)中的錯(cuò)誤(動(dòng)作650)。(如上所述,取決于使用的ECC方案,控制模塊440可能能夠校正一個(gè)或多于一個(gè)檢測(cè)的錯(cuò)誤或者控制模塊可以使用其他手段來(lái)嘗試校正錯(cuò)誤。)如果校正不成功,可以向主機(jī)420發(fā)送指示發(fā)生存儲(chǔ)錯(cuò)誤的信號(hào)。但是,如果產(chǎn)生的糾錯(cuò)碼與從閃存器件430接收的糾錯(cuò)碼相匹配,則以EDC模塊450基于該數(shù)據(jù)產(chǎn)生錯(cuò)誤檢測(cè)碼來(lái)繼續(xù)讀處理(動(dòng)作660)。如上所述,錯(cuò)誤檢測(cè)碼允許檢測(cè)但不校正數(shù)據(jù)中的至少一個(gè)錯(cuò)誤。然后控制模塊440向主機(jī)420發(fā)送該數(shù)據(jù)和錯(cuò)誤檢測(cè)碼(動(dòng)作670)。主機(jī)420然后將基于該數(shù)據(jù)以及可選地基于頭部產(chǎn)生其自己的錯(cuò)誤檢測(cè)碼,并將其與從控制器420接收的錯(cuò)誤檢測(cè)碼相比較。如果各碼不匹配,則主機(jī)420將知道發(fā)生傳輸錯(cuò)誤,并且可以向控制器400發(fā)送重新發(fā)送數(shù)據(jù)的信號(hào)。從這些流程圖500、600可以看出,此實(shí)施例針對(duì)在數(shù)據(jù)通過(guò)第一 NAND接口 425正在主機(jī)420和控制器400之間發(fā)送時(shí)可能發(fā)生的傳輸錯(cuò)誤進(jìn)行保護(hù)。在一些控制器架構(gòu)中, 在寫(xiě)操作中,主機(jī)產(chǎn)生ECC并向控制器發(fā)送該ECC和數(shù)據(jù),控制器將該ECC和數(shù)據(jù)兩者存儲(chǔ)在閃存器件中。類(lèi)似地,在讀操作中,控制器從閃存器件取回?cái)?shù)據(jù)和ECC并將該數(shù)據(jù)和ECC 發(fā)送給主機(jī)。在這些架構(gòu)中,ECC不僅用于針對(duì)存儲(chǔ)器器件錯(cuò)誤進(jìn)行保護(hù),而且還用于針對(duì)在主機(jī)和控制器之間的接口傳輸錯(cuò)誤進(jìn)行保護(hù)。但是,在此實(shí)施例中,產(chǎn)生ECC以將其與數(shù)據(jù)存儲(chǔ)在閃存器件430中的是控制器400——不是主機(jī)420。關(guān)于寫(xiě)通過(guò)使主機(jī)420產(chǎn)生 EDC并使控制器400校驗(yàn)EDC并關(guān)于讀通過(guò)使控制器400產(chǎn)生EDC并使主機(jī)420校驗(yàn)EDC, 此實(shí)施例提供了針對(duì)通過(guò)第一 NAND接口 425的傳輸錯(cuò)誤的保護(hù),即使主機(jī)420不產(chǎn)生ECC 用于存儲(chǔ),像在傳統(tǒng)的控制器架構(gòu)中那樣。此外,盡管在提供對(duì)主機(jī)的非NAND接口(例如 USB)的某些現(xiàn)有控制器架構(gòu)中使用使主機(jī)產(chǎn)生EDC并使控制器校驗(yàn)該EDC然后產(chǎn)生ECC 的處理,但是此實(shí)施例可以用在諸如圖3和4中所示的、其中主機(jī)和控制器使用NAND協(xié)議通過(guò)NAND接口通信的控制器架構(gòu)中。此外,一些現(xiàn)有的主機(jī)接口協(xié)議(尤其是諸如SATA、 SAS、FC和PCIe的串行接口)提供了可以用于檢測(cè)傳輸錯(cuò)誤的某種基于(per)分組的CRC, 并且此信息可以經(jīng)過(guò)主機(jī)420并附于數(shù)據(jù)分組以及用于類(lèi)似目的。但是,經(jīng)過(guò)外部接口(比如SATA)的數(shù)據(jù)傳送可能具有與經(jīng)過(guò)第一 NAND接口發(fā)送到控制器400的頁(yè)不同的傳輸長(zhǎng)度,并且可能需要進(jìn)行適當(dāng)?shù)恼{(diào)整。在以上,由主機(jī)420和由EDC模塊450計(jì)算的EDC還可以是比由ECC模塊450使用的ECC更簡(jiǎn)單形式的ECC。例如,通過(guò)第一 NAND接口 425使用的ECC僅需要檢測(cè)或校正傳輸錯(cuò)誤,而通過(guò)第二 NAND接口 435使用的ECC優(yōu)選用于檢測(cè)并校正NAND存儲(chǔ)錯(cuò)誤,這可能需要更長(zhǎng)或者更復(fù)雜的ECC。胡應(yīng)·胃會(huì)充犬捕相經(jīng)_■、捕白句棚列返回附圖,圖7是實(shí)施例的控制器700的例示,其包括控制模塊740、糾錯(cuò)碼(ECC) 模塊750、狀態(tài)模塊760和空閑塊管理模塊770??刂破?00可以分別經(jīng)由第一和第二接口 725、735與(具有主機(jī)控制器721的)主機(jī)720和閃存器件730通信。第一和第二接口 725、735可以采取任何適當(dāng)?shù)男问剑谝粋€(gè)實(shí)施例中是NAND接口,如以上結(jié)合圖3所述。但是可以使用其他非NAND類(lèi)型接口,比如但不限于USB和SATA。另外,控制器700可以被置于上述的物理布置的任意一個(gè)中,例如在還包含一個(gè)或多個(gè)閃存晶片的存儲(chǔ)器系統(tǒng)中包裝的單獨(dú)的晶片上、與主機(jī)和閃存獨(dú)立地包裝等等。控制器模塊740可以被配置用于控制控制器700的操作并基于從主機(jī)720接收的命令(例如讀、寫(xiě)、擦除等等)和地址進(jìn)行存儲(chǔ)器操作。ECC模塊750用在確定在處理從閃存中的存儲(chǔ)器的塊取回或者向其發(fā)送的數(shù)據(jù)時(shí)是否發(fā)生諸如讀或?qū)戝e(cuò)誤的錯(cuò)誤的處理中。 控制器700可以被配置為應(yīng)用多個(gè)糾錯(cuò)碼(ECC)算法中的任意算法以檢測(cè)讀錯(cuò)誤并在具體糾錯(cuò)碼算法的能力內(nèi)對(duì)于某些檢測(cè)的錯(cuò)誤進(jìn)行矯正。控制器700處理糾錯(cuò)碼的應(yīng)用以便主機(jī)720通過(guò)第一接口 725接收根據(jù)該錯(cuò)誤校正算法處理的數(shù)據(jù)而不是必須在主機(jī)處進(jìn)行錯(cuò)誤校正。(或者,可以在除了 ECC之外還使用或者代替ECC使用其他錯(cuò)誤恢復(fù)技術(shù)的錯(cuò)誤處理模塊來(lái)替換ECC模塊750。在這樣的替換中,控制器700仍將校正數(shù)據(jù),以便通過(guò)第一接口 725發(fā)送的數(shù)據(jù)不需要主機(jī)720的進(jìn)一步錯(cuò)誤處理(例如計(jì)算單個(gè)錯(cuò)誤碼或者以電壓偏移重新讀取)。)相反,在寫(xiě)操作期間,控制器700處理錯(cuò)誤編碼數(shù)據(jù)并通過(guò)第二接口 735 傳送ECC碼和數(shù)據(jù)用于存儲(chǔ)在閃存器件730上。狀態(tài)模塊760與ECC模塊750協(xié)作以為主機(jī)720提供與閃存器件730上的特定操作的狀態(tài)有關(guān)的數(shù)據(jù)。例如,狀態(tài)模塊760可以檢查控制器700中的錯(cuò)誤分析行為并基于是否已經(jīng)檢測(cè)到、已經(jīng)校正讀錯(cuò)誤或者讀錯(cuò)誤是否不可校正來(lái)準(zhǔn)備關(guān)于讀錯(cuò)誤信息的狀態(tài)信息。由于主機(jī)、控制器和閃存布置,其中在數(shù)據(jù)從閃存器件730取回時(shí)在主機(jī)720將通常不處理數(shù)據(jù)的錯(cuò)誤分析或者校正,所以主機(jī)720將不具有讀操作的狀態(tài)的細(xì)節(jié)。狀態(tài)模塊 760允許跟蹤此信息并將其呈現(xiàn)給主機(jī)720,以便主機(jī)720可以在如何或者在哪里向存儲(chǔ)器發(fā)送或請(qǐng)求數(shù)據(jù)方面進(jìn)行任何期望的調(diào)整。主機(jī)720也可以使用此狀態(tài)來(lái)觸發(fā)一些其它積極主動(dòng)或預(yù)防性操作,諸如磨損均衡、數(shù)據(jù)重定位或讀清洗。狀態(tài)模塊760可以按幾種格式之一將狀態(tài)信息呈現(xiàn)給主機(jī)720。在狀態(tài)模塊正準(zhǔn)備用于傳輸給主機(jī)720的讀狀態(tài)信息的情況下,讀狀態(tài)可以附加于從閃存取回的數(shù)據(jù),如圖8A和8C中所示。(應(yīng)該注意,這些圖中示出的字段可以按任意順序出現(xiàn)。)圖8A例示其中從閃存取回的數(shù)據(jù)在由控制器700進(jìn)行的錯(cuò)誤分析處理之后被置于具有頭部802、數(shù)據(jù)有效負(fù)荷部分804和狀態(tài)位806的消息中的數(shù)據(jù)傳送格式800,其可以被填充(pad)到兩個(gè)或更多字節(jié)(因而,權(quán)利要求中所使用的“位”可以指單個(gè)位或者一位或多位,比如一個(gè)或多個(gè)字節(jié))。此狀態(tài)位806可以是由主機(jī)720使用的二進(jìn)制的成功或失敗指示。狀態(tài)位806將不一定要在讀錯(cuò)誤的類(lèi)型或程度之間區(qū)分,但是將向主機(jī)720提供警告其已經(jīng)遇到某種形式的錯(cuò)誤的標(biāo)志?;蛘撸瑺顟B(tài)位可以是用于攜帶與在主機(jī)720中或者由控制器700 維持的查找表中的錯(cuò)誤消息相關(guān)聯(lián)的編碼的值的單個(gè)字段。圖8B類(lèi)似于圖8A,但是狀態(tài)位 806’被包括作為頭部802’的部分,其通常將在讀時(shí)被控制器700填充,而沒(méi)有單獨(dú)的狀態(tài)位字段?;蛘?,如圖8C中可見(jiàn),數(shù)據(jù)傳送格式808可以包括頭部810、數(shù)據(jù)有效負(fù)荷部分 812和狀態(tài)部分814,狀態(tài)部分814具有在狀態(tài)部分814中的多個(gè)字段816中布置的一位或多位。在圖8C的布置中,可以傳送關(guān)于讀錯(cuò)誤的狀態(tài)上的更多詳細(xì)信息,并且主機(jī)720可以獲得該更多詳細(xì)信息。在狀態(tài)消息的一個(gè)實(shí)現(xiàn)方式中,可以僅將讀錯(cuò)誤信息提供給主機(jī) 720。在其他實(shí)現(xiàn)方式中,狀態(tài)信息可以被布置為傳送由控制模塊740檢測(cè)到的并且由控制器700的狀態(tài)模塊760格式化的讀、寫(xiě)和擦除錯(cuò)誤信息中的一個(gè)或多個(gè)。在其他實(shí)施例中, 狀態(tài)部分814的字段816可以還或者替換地呈現(xiàn)與空閑塊管理有關(guān)的數(shù)據(jù)。關(guān)于由控制器 700的空閑塊管理模塊770從事或者報(bào)告的空閑塊管理行為的細(xì)節(jié)在以下部分中提供。圖 8C的多字段實(shí)施例提供了用于要報(bào)告的與存儲(chǔ)器操作相關(guān)聯(lián)的錯(cuò)誤的組合的機(jī)制。圖8D 類(lèi)似于圖8C,但是狀態(tài)字段814’是頭部810’的部分,并且可以類(lèi)似地由多個(gè)字段816’組成。在另一實(shí)施例中,讀的成功/失敗的結(jié)果可以在狀態(tài)寄存器或者擴(kuò)展的狀態(tài)寄存器中在保留的或者廠商唯一的字段之一中指示。但是,在對(duì)忙狀態(tài)的輪詢之外,主機(jī)控制器現(xiàn)今可能不是一定要查找狀態(tài)寄存器或者擴(kuò)展的狀態(tài)寄存器中的讀錯(cuò)誤。響應(yīng)于編程或擦除命令通過(guò)第二接口 735報(bào)告編程和擦除錯(cuò)誤(這是來(lái)自原始NAND器件的標(biāo)準(zhǔn)錯(cuò)誤報(bào)告),并且此信息可以被返回給主機(jī)。對(duì)這種錯(cuò)誤的通常響應(yīng)是分配新的塊,從具有錯(cuò)誤的塊復(fù)制當(dāng)前有效的數(shù)據(jù)頁(yè),以及使任意元數(shù)據(jù)指示其現(xiàn)在是有效塊,然后將具有錯(cuò)誤的現(xiàn)有塊標(biāo)記為壞的。在一個(gè)實(shí)施例中,控制器可以指示編程或擦除故障并將其留給主機(jī)控制器來(lái)進(jìn)行以上復(fù)制和元數(shù)據(jù)管理。在另一實(shí)施例中,控制器可以進(jìn)行這些操作并在控制器內(nèi)管理壞的塊。在此情況下,除了發(fā)生了錯(cuò)誤或者控制器可以指示其采取了此校正的動(dòng)作,這對(duì)主機(jī)控制器可以是完全透明的(例如,主機(jī)可以像已經(jīng)發(fā)生了軟錯(cuò)誤那樣對(duì)其記錄)。因此,總言之,這些位可以指示發(fā)生了主機(jī)必須管理的錯(cuò)誤,發(fā)生了控制器管理的錯(cuò)誤(并且主機(jī)僅僅被通知),或者錯(cuò)誤可以由控制器處理并且對(duì)主機(jī)隱藏。
16
用信號(hào)通知(signal)錯(cuò)誤的替換方式、比如單個(gè)狀態(tài)位806或者806’、具有多個(gè)字段816或816’的狀態(tài)部分814或814’、或者經(jīng)由狀態(tài)寄存器或者擴(kuò)展的狀態(tài)寄存器中的位將統(tǒng)稱為“錯(cuò)誤信號(hào)”。在另一實(shí)施例中,除了這些錯(cuò)誤信號(hào)中的一個(gè)或多個(gè)之外,控制器 700可以被配置為與錯(cuò)誤信號(hào)中的一個(gè)或多個(gè)的使用組合地將詳細(xì)的狀態(tài)信息存儲(chǔ)在已知的位置中。例如,響應(yīng)于接收到錯(cuò)誤信號(hào)中的一個(gè)或多個(gè),控制器700的狀態(tài)模塊760可以將詳細(xì)的狀態(tài)信息(例如讀狀態(tài)數(shù)據(jù))存儲(chǔ)在閃存器件730上的或者控制器700中的主機(jī)可以訪問(wèn)的預(yù)定位置中。因此,狀態(tài)位或字段可以不傳送任何更多的信息,而僅傳送指示如果主機(jī)想要關(guān)于狀態(tài)(例如讀錯(cuò)誤)的另外細(xì)節(jié)則更多信息對(duì)主機(jī)可用的標(biāo)志。此外,由該位或字段標(biāo)記的額外的狀態(tài)信息可以被存儲(chǔ)在由控制器700跟蹤的位置中,主機(jī)可以通過(guò)向控制器700發(fā)送一般命令來(lái)訪問(wèn)該位置以取回狀態(tài)信息,而不是主機(jī)需要知道該位置并取回狀態(tài)信息。如果使用圖8A的附加單個(gè)位的狀態(tài)消息格式,其中該位代表錯(cuò)誤檢測(cè)的成功或失敗的裸賦值(bare assertion)的情況下,該位可以被實(shí)現(xiàn)為對(duì)于諸如可從開(kāi)放NAND快閃接口工作組獲得的ONFI 2.0的可用接口協(xié)議的擴(kuò)展讀格式中的廠商專用位的部分。如上所述也可以使用多位狀態(tài)信息或者單個(gè)或多個(gè)位信息格式,向主機(jī)720警告在狀態(tài)模塊使之被存儲(chǔ)的位置處的更多詳細(xì)信息。圖9示出狀態(tài)字段900的一個(gè)可能的布置,該狀態(tài)字段可以置于圖8A-8D的實(shí)施例中的位置806、806’、814、814’中,或者存儲(chǔ)在其中主機(jī)720可以在狀態(tài)可用性的通知之后請(qǐng)求進(jìn)一步的信息或者從控制器700取回信息的實(shí)施例中的控制器700或者閃存器件 730中。狀態(tài)字段900可以包括指示讀操作的成功或失敗的字段902、提供關(guān)于是否進(jìn)行了諸如ECC校正的校正的信息的字段904、以及標(biāo)記是否存在“硬"ECC故障(即數(shù)據(jù)丟失)的字段906。除了讀狀態(tài)信息之外,狀態(tài)字段900還可以包括表示控制器700是否檢測(cè)到編程或擦除錯(cuò)誤的一個(gè)或多個(gè)字段908。如以下進(jìn)一步討論的,還可以包括關(guān)于空閑塊管理的狀態(tài)信息,比如請(qǐng)求塊復(fù)制和重新映射的字段910、要求主機(jī)返回新的空閑塊的字段912以及向主機(jī)720指示已經(jīng)存在對(duì)閃存器件730中的有缺陷塊的嘗試的操作的字段914??梢圆贾靡粋€(gè)或多個(gè)另外的字段916用于處理可能為具體應(yīng)用所需的其他狀態(tài)信息。例如,這樣的字段916可以指示軟錯(cuò)誤(即通過(guò)ECC校正的錯(cuò)誤)的數(shù)量。圖10例示可在控制器700上操作用于向主機(jī)720提供讀狀態(tài)信息的實(shí)施例的方法的流程圖1000。控制器700首先從主機(jī)720接收讀命令(動(dòng)作1002)。為了讀數(shù)據(jù),控制器700向閃存器件730發(fā)出讀命令(動(dòng)作1004),閃存器件730將數(shù)據(jù)頁(yè)與糾錯(cuò)碼通過(guò)第二接口 735返回到控制器700 (動(dòng)作1006)??刂破?00的ECC模塊760進(jìn)行對(duì)取回的數(shù)據(jù)的錯(cuò)誤分析(動(dòng)作1008)。錯(cuò)誤分析或處理可以是糾錯(cuò)碼算法或者其他錯(cuò)誤校正機(jī)制。如果使用ECC算法,則控制器700計(jì)算從閃存器件730取回的數(shù)據(jù)的ECC字節(jié)并將計(jì)算的ECC字節(jié)與先前存儲(chǔ)的并與數(shù)據(jù)一起取回的ECC字節(jié)相比較。如果計(jì)算的ECC字節(jié)和取回的ECC 字節(jié)不匹配,則控制器700標(biāo)識(shí)錯(cuò)誤(動(dòng)作1010)。如果計(jì)算的ECC和存儲(chǔ)的ECC之間的差可由控制器700校正,則控制器700將在通過(guò)第一接口 725傳送之前完全校正數(shù)據(jù),并將該錯(cuò)誤標(biāo)識(shí)為“軟”或可校正錯(cuò)誤?;蛘?,如果該錯(cuò)誤足夠嚴(yán)重使得ECC算法或其他錯(cuò)誤恢復(fù)過(guò)程不能補(bǔ)償該錯(cuò)誤,則控制器700將標(biāo)識(shí)硬錯(cuò)誤,用于以信號(hào)通知已經(jīng)發(fā)生數(shù)據(jù)丟失。然后從閃存器件730讀取的校正的數(shù)據(jù)通過(guò)第一接口 725被發(fā)送到主機(jī)720,狀態(tài)信息附在諸如以上討論的數(shù)據(jù)消息格式800、800’、808、808’之一的數(shù)據(jù)消息格式中(動(dòng)作1012)。參考提供讀狀態(tài)錯(cuò)誤的方法、在圖10中例示的實(shí)施例,可以僅在由控制器700讀取和分析的每頁(yè)信息的結(jié)束時(shí)計(jì)算并提供讀狀態(tài)錯(cuò)誤,以便多頁(yè)的流(streaming)不被打斷,并且哪些頁(yè)可能包含錯(cuò)誤也是清楚的。另外,在另一實(shí)施例中,構(gòu)思控制器700可以從閃存器件730讀數(shù)據(jù)并在數(shù)據(jù)到來(lái)時(shí)并在閃存的完整頁(yè)已被處理之前計(jì)算ECC。例如,如果如果頁(yè)大小是8千字節(jié)(KB),則控制器700可以以2KB的片段計(jì)算ECC,每個(gè)片段包括少于一頁(yè),以便在進(jìn)行該頁(yè)的每部分之后,可以對(duì)于表示該頁(yè)的該部分的信息校驗(yàn)或校正ECC。 在一個(gè)或多個(gè)2KB的片段已經(jīng)從閃存器件730傳送到控制器700之后,在對(duì)于該頁(yè)的最后的數(shù)據(jù)已經(jīng)從閃存?zhèn)魉偷娇刂破髦?,控制?00可以同時(shí)開(kāi)始通過(guò)第一接口 725傳送錯(cuò)誤校正后的數(shù)據(jù)。好塊、壞塊和空閑塊管理實(shí)施例再參考圖9,如上所述,狀態(tài)字段900可以包括對(duì)于處理管理可能在閃存的使用壽命期間發(fā)展的壞的(有缺陷的)塊所需的空閑塊有用的、與空閑塊管理有關(guān)的信息,例如字段910-914。如圖7所示,在控制器700中可以包括空閑塊管理模塊770以按幾種方式之一工作。取決于采用的特定空閑塊管理模式,可以利用一個(gè)或多個(gè)字段的信息,比如示例的字段910-914。通常,以多余數(shù)量(比定義的最小容量大)的塊制造閃存器件。在工廠測(cè)試期間或者器件的使用期間,某些塊可能被發(fā)現(xiàn)為“壞的”或者“有缺陷的”,意味著它們不能用于正確地存儲(chǔ)數(shù)據(jù)并且需要被替換。類(lèi)似地,可能存在多余的“好的”塊(比定義的最小容量大),其可以被用作“空閑的”,直到另一塊故障或者變得有缺陷。保持跟蹤這些額外的塊分別被稱為壞塊管理和空閑塊管理。將在以下段落中更詳細(xì)地描述這些概念,其涉及圖12A 和12B中所示的示例閃存器件1200的塊。圖12A示出以總共1000個(gè)塊的存儲(chǔ)器的示例設(shè)計(jì)并制造的器件的塊的物理視圖。 在此圖中,按物理順序示出各塊,每個(gè)白色的塊1210表示閃存器件中獨(dú)立的塊(僅示出了 1000個(gè)塊中的幾個(gè))。每個(gè)黑色的塊1220表示在制造時(shí)有缺陷的塊(在此例子中它們隨機(jī)地分布)。圖12B示出相同部分1200的抽象視圖,其中各個(gè)好的和壞的塊被示出為分組在一起(并且不是按物理順序)。對(duì)于諸如1200的部分的示例廠商數(shù)據(jù)單(sheet)可以指示可以依賴它而在其壽命終點(diǎn)時(shí)具有至少900個(gè)好的塊,如1230中所示。對(duì)于我們具體的示例閃存器件1200,有950個(gè)好的(白色)塊(未全部示出)和50個(gè)壞的(黑色)塊(未全部示出)。(在制造或者初始測(cè)試時(shí)的)50個(gè)壞的塊被示出為邏輯上分組在一起為1260。繼續(xù)我們的例子,數(shù)據(jù)單還可以指出不多于10個(gè)塊在其規(guī)定的壽命期間可能故障,因此這些被示出為“最小空閑” 1240。因此,器件1200在制造時(shí)必需具有最少910個(gè)好的塊(否則工廠將不會(huì)出廠這樣的器件,因?yàn)槠鋵⒉环蠑?shù)據(jù)單)。其他40個(gè)好的(白色) 塊(950個(gè)好的塊和910個(gè)保證的好的塊之間的差)被認(rèn)為是“額外空閑”塊,并且被示出為1M0??赡芪幢匾蕾囉陬~外空閑的數(shù)量,并且理論上其可以在90(如果沒(méi)有壞塊,盡管這是非常少見(jiàn)的)和0(表明90個(gè)壞塊,這剛剛滿足數(shù)據(jù)單的要求)之間變化。最小空閑和額外空閑也統(tǒng)稱為“空閑塊”。通常,主機(jī)將直接利用原始閃存來(lái)處理空閑塊管理。例如,標(biāo)準(zhǔn)主機(jī)可以具有其自己的控制器,其掃描閃存中的所有塊以查找具體簽名來(lái)確定哪些塊是可用的塊以及哪些塊是不可用的、也稱為有缺陷或者“壞的”塊。因此,如果諸如上述的閃存器件730以及如圖1200中詳細(xì)示出的閃存被制造為具有1000個(gè)存儲(chǔ)器塊,則主機(jī)控制器通常將分析所有 1000個(gè)塊并標(biāo)識(shí)好的和壞的塊。通常的主機(jī)控制器然后可以使用所有的(此例子中的)940 個(gè)好的塊或其子集并保留10個(gè)塊作為空閑塊用于當(dāng)當(dāng)前可用的塊變壞時(shí)替換當(dāng)前可用的塊。還可以使用其找到的任意額外的空閑(好的)塊(例如在此例子中的40個(gè))。利用具有如圖7中所述的空閑塊管理模塊770的控制器700,可以由控制器700的空閑塊管理模塊 700來(lái)接管通常由主機(jī)處理的空閑塊管理的不同方面。在一個(gè)實(shí)現(xiàn)方式中,空閑塊管理模塊770可以選擇性地被配置為按三種空閑塊管理操作模式之一而工作(1)未被管理模式,其中控制器700不提供空閑塊的管理,并且主機(jī)720自己掃描塊的缺陷;( 完全管理的空閑塊管理模式,其中控制器700僅為主機(jī)720 提供N個(gè)好的邏輯塊,其中N是數(shù)據(jù)單參數(shù),并且可以在閃存上可用的參數(shù)頁(yè)中讀出;以及 (3)分割空閑塊管理模式,其中主機(jī)可以使用額外的空閑塊,但是控制器700可以請(qǐng)求主機(jī)釋放這些額外的塊中的一些以當(dāng)控制器的空閑塊供給落到期望水平以下時(shí)由控制器700 使用。盡管控制器可以在仍處于裝配了單獨(dú)的主機(jī)720、控制器700和閃存器件730的制造裝備處時(shí)被主機(jī)720初始化,或者甚至被預(yù)先初始化用于由專門(mén)的原始設(shè)備制造商 (OEM)使用,但是控制器700中的空閑塊管理模塊770可重配置以在已經(jīng)選擇了不同的空閑塊管理模式之后改變空閑塊管理模式。參考圖11的流程圖1100,在控制器700中的空閑塊管理模塊的初始化之后,即在 OEM處的原始初始化之后或者在重設(shè)先前選擇的模式之后,控制器700接收標(biāo)識(shí)期望的操作模式的選擇命令(動(dòng)作1102)。如果該選擇命令指示已經(jīng)選取了未被管理的空閑塊管理模式(動(dòng)作1104),則空閑塊管理模塊770允許主機(jī)720直接掃描閃存器件730以標(biāo)識(shí)可使用的和壞的塊(動(dòng)作1106)。在未被管理模式中,還阻止控制器100止管理空閑塊使用。而是,當(dāng)空閑塊管理模塊770標(biāo)識(shí)指示壞塊的錯(cuò)誤(比如不可校正的ECC故障(字段906)或者編程或擦除故障(字段908))時(shí),控制器還可以使用適當(dāng)?shù)臓顟B(tài)字段、比如字段910(圖 9)通知主機(jī)700特定塊需要復(fù)制和重新映射。(字段908也可以是兩個(gè)字段一一一個(gè)字段用于編程失敗,另一字段用于擦除失敗,或者它們可以組合在一個(gè)字段中。)盡管在未被管理的空閑塊管理模式中空閑塊管理可以完全留給主機(jī)720,但是控制器700仍可以對(duì)一些空閑塊進(jìn)行掃描并保持它們對(duì)主機(jī)720不可見(jiàn)以用于錯(cuò)誤恢復(fù)。換句話說(shuō),使用具有最大1000個(gè)塊的閃存的圖12中的例子,數(shù)據(jù)單還可以示出最少保證的塊的數(shù)量為900以及最大保證的塊的數(shù)量為990。如果在我們的具體部分中好塊的實(shí)際數(shù)量是950,則如果控制器700在主機(jī)掃描好塊之前隱藏10個(gè)塊用于其自己使用,則主機(jī)720將僅發(fā)現(xiàn)940個(gè)好塊。因?yàn)榭刂破?00知道其正在隱藏哪些塊,控制器700可以通過(guò)虛假地指示隱藏的塊是壞塊來(lái)向主機(jī)720隱藏好塊。例如,如果控制器700決定隱藏塊X,則當(dāng)主機(jī)讀取塊X時(shí),其可以將任意數(shù)據(jù)與缺陷塊標(biāo)志一起返回。同樣,關(guān)于來(lái)自主機(jī)的對(duì)塊X的任意擦除或編程請(qǐng)求,控制器可以通知擦除或編程錯(cuò)誤。關(guān)于空閑塊管理的第二模式(動(dòng)作1108),在完全管理模式中,空閑塊管理模塊 780進(jìn)行閃存器件730中的塊的所有掃描以標(biāo)識(shí)好塊并僅將N個(gè)好塊提供給主機(jī)控制器,其中N是在保證數(shù)量的可用塊的閃存的參數(shù)頁(yè)中可讀的數(shù)據(jù)單參數(shù)(動(dòng)作1110,111幻。然后控制器700僅允許主機(jī)對(duì)N個(gè)好塊操作。控制器700將任意額外的好塊保持為其可以用于錯(cuò)誤處理的空閑塊(動(dòng)作1114)。再次參考以上圖12中所述的具有1000個(gè)塊的假定閃存,N可以是900,其中控制器700將把所有額外的50個(gè)可用的塊保持作為空閑塊,并且主機(jī)720不具有對(duì)這些空閑塊的訪問(wèn),直到響應(yīng)于當(dāng)前好的塊變壞而由空閑塊管理模塊780 將它們投入使用。上述的第三空閑塊管理模式,即分割管理,允許關(guān)于額外塊1250(即在數(shù)據(jù)單上的保證數(shù)量以上的塊減去原始保留為空閑的塊)的使用的在控制器700和主機(jī)720之間的協(xié)作??梢允沟眠@些額外的空閑塊可用于主機(jī)720來(lái)優(yōu)化主機(jī)操作。在分割管理技術(shù)的一個(gè)實(shí)施例中,如果以分割塊管理的命令來(lái)初始化空閑塊管理(動(dòng)作1116),則控制器700的空閑塊管理模塊770掃描閃存器件730以尋找好塊和壞塊并保留好塊中的一些作為空閑塊,比如五個(gè),用于錯(cuò)誤恢復(fù)(動(dòng)作1118)??刂破?00可能發(fā)現(xiàn)所有好塊并僅向主機(jī)“示出”好塊。例如,控制器700可以讀取閃存器件730的參數(shù)頁(yè)并確定在具體閃存中有多少剩余的好塊。閃存器件類(lèi)的產(chǎn)品數(shù)據(jù)單可以報(bào)告可能的好塊的最小和最大數(shù)量(例如 900-990)。因此,再次參考具有1000個(gè)可能的塊的假定閃存的以上例子,其中950個(gè)塊被空閑塊管理模塊770掃描并被發(fā)現(xiàn)實(shí)際可用,如果控制器700保留這些好塊中的5個(gè)作為空閑塊,則其將向主機(jī)720報(bào)告945個(gè)好塊(動(dòng)作1120)。因此,主機(jī)720將不知道5個(gè)其他的好塊存在??刂破?00可以將好塊重新映射到去除了壞塊的緊湊邏輯地址范圍(例如, 好塊的地址依次被重新映射為0-N)(動(dòng)作1122)。如果主機(jī)720試圖對(duì)大于N的地址進(jìn)行讀、編程或擦除操作,則控制器700將報(bào)告錯(cuò)誤。使用圖9的數(shù)據(jù)字段900作為例子,可以由空閑塊管理模塊770在字段914中附上數(shù)據(jù)來(lái)報(bào)告此錯(cuò)誤,以便當(dāng)主機(jī)嘗試到控制其規(guī)定的范圍之外時(shí)主機(jī)720相信其正尋址有缺陷的塊。在分割管理模式的替換實(shí)施例中,空閑塊管理模塊780可以不掃描閃存器件730 中的所有塊,而是簡(jiǎn)單地掃描并保留僅一組好塊以為其自己保持為空閑塊并允許主機(jī)掃描所有塊以確定哪些是好的以及哪些有缺陷。在分割管理模式的此替換實(shí)現(xiàn)方式中,當(dāng)主機(jī) 720試圖對(duì)空閑塊管理模塊770已經(jīng)將其標(biāo)識(shí)為空閑塊的塊之一進(jìn)行讀、編程或擦除操作時(shí),控制器700將指示塊中有缺陷或者記錄錯(cuò)誤。例如,控制器700可以在用于標(biāo)記缺陷塊的適當(dāng)字節(jié)中插入缺陷標(biāo)志,或者其可以占據(jù)在讀狀態(tài)中的諸如圖9中的“試圖對(duì)有缺陷的塊操作”字段914的字段。主機(jī)720然后將為其目的而使用所有其他可用塊,包括超過(guò)參數(shù)頁(yè)中保證的數(shù)量的那些塊。無(wú)論采用分割塊管理技術(shù)的哪個(gè)版本,主機(jī)720通常都將能夠?yàn)槠渥约旱睦娑褂贸鲎钌倭康娜我忸~外空閑塊,例如以改進(jìn)性能或者耐用性,這兩者主機(jī)720不能依賴于超過(guò)該最少數(shù)量的塊。因此,在此例子中,主機(jī)將具有45個(gè)可以使用的額外塊(總共 950個(gè)可用,減去5個(gè)保留的,相對(duì)于數(shù)據(jù)單上的保證的最少量900)。利用分割管理模式,當(dāng)控制器700遇到需要空閑塊的錯(cuò)誤時(shí),比如編程或擦除錯(cuò)誤,空閑塊管理模塊770使用其空閑塊之一來(lái)替換新發(fā)現(xiàn)的有缺陷的塊。在此例子中,空閑塊將是如上所述被保留的五個(gè)塊之一。在使用該空閑塊之后,空閑塊管理模塊780將具有少于其通常維持的最少數(shù)量的空閑塊(即5個(gè)),并將通知主機(jī)其需要另一空閑塊(動(dòng)作 1124)。從控制器700的空閑塊管理模塊780提供給主機(jī)720的通知可以經(jīng)由與取回的數(shù)據(jù)一起返回的狀態(tài)值中的字段。例如,在圖9中,可以在字段912中傳送請(qǐng)求返回額外塊用作空閑塊的標(biāo)志。在此例子中,主機(jī)720將需要返回其先前能夠使用但是超過(guò)了其有權(quán)訪問(wèn)的保證的最小數(shù)量的45個(gè)額外塊之一。主機(jī)720可以通過(guò)利用設(shè)置特征(Set Feature) 命令向?qū)S玫刂坊蛘咂茖?xiě)信息或者通過(guò)使用以地址塊作為其地址字段的廠商唯一命令來(lái)向控制器700指示哪個(gè)塊正被返回以用作空閑塊。在分割管理模式中,超過(guò)一類(lèi)存儲(chǔ)器的數(shù)據(jù)單保證的最少量的額外塊將在主機(jī) 720可以使用但是可以稍后被召回作為空閑塊的額外塊以及立即被保留用于控制器700的空閑塊之間“分割”。這不同于未被管理模式和完全管理模式,在該未被管理模式中,控制器 700不能要求返回任何額外塊,并且具有其可以使用的固定數(shù)量的空閑塊,在該完全管理模式中,所有額外塊由控制器700使用并且對(duì)主機(jī)7 不可用??臻e塊管理的具有完全或部分(分割)控制器管理的模式的靈活性可以通過(guò)降低主機(jī)控制器所需的復(fù)雜性而提供優(yōu)于典型的主機(jī)管理或者空閑塊信息的優(yōu)點(diǎn)。盡管已經(jīng)在圖7-9的例子中描述了讀狀態(tài)的具體例子,但是狀態(tài)模塊可以用于確定和從控制器向主機(jī)傳送寫(xiě)(也稱為“編程”)或擦除錯(cuò)誤以及使用正常的錯(cuò)誤狀態(tài)位。另夕卜,控制器還可以可選地在錯(cuò)誤狀態(tài)中使用保留的或者廠商唯一字段以指示額外的狀態(tài)是可用的。在接收到這些錯(cuò)誤指示符(讀狀態(tài)錯(cuò)誤、正常寫(xiě)或擦除錯(cuò)誤或者額外狀態(tài)可用字段)的任意一個(gè)時(shí),主機(jī)可以讀取此額外狀態(tài)信息,其一個(gè)例子在圖9中示出。ONFI 2.0中的現(xiàn)有狀態(tài)寄存器寄存器字段中的位2、3、或4可以用于用信號(hào)通知額外狀態(tài)。另外,盡管狀態(tài)信息和空閑塊管理示出為相同消息格式的部分,但是在其他實(shí)施例中控制器可以被配置為僅提供狀態(tài)信息或者空閑塊管理信息之一。已經(jīng)描述了用于與閃存一起使用的改進(jìn)的獨(dú)立的控制器,其可以處理錯(cuò)誤分析和錯(cuò)誤校正、與主機(jī)協(xié)作地在幾種模式之一中管理用于錯(cuò)誤恢復(fù)的與空閑塊有關(guān)的通信、并在主機(jī)訪問(wèn)的消息字段中提供與讀命令或者寫(xiě)和擦除錯(cuò)誤有關(guān)的狀態(tài)信息。在此公開(kāi)的方法和控制器允許與主機(jī)分離的控制器的行為(其可以允許主機(jī)控制器具有更簡(jiǎn)化的設(shè)計(jì)),以及允許可以在閃存中與主機(jī)一起使用的離散的控制器的定制的架構(gòu),同時(shí)為主機(jī)提供與控制器的行為有關(guān)的信息,以便可以實(shí)現(xiàn)各個(gè)級(jí)別的控制器和主機(jī)協(xié)作以及優(yōu)化。示例的NAND閃存控制器實(shí)施例此部分討論示例的控制器架構(gòu)并提供關(guān)于上述各種功能模塊的一些的更多細(xì)節(jié)。 如上所述,“模塊”可以按任何適當(dāng)?shù)姆绞綄?shí)現(xiàn),比如以硬件、軟件/固件或者其組合,并且 “模塊”的功能性可以由單個(gè)組件進(jìn)行或者在控制器中的幾個(gè)組件之間分布?,F(xiàn)在回到附圖,圖13A是圖3的NAND控制器300的當(dāng)前優(yōu)選的實(shí)現(xiàn)方式的圖。應(yīng)該理解,這些附圖中示出的組件的任意一個(gè)可以被實(shí)現(xiàn)為硬件、軟件/固件或者其組合。在此實(shí)現(xiàn)方式中,圖3中的第一 NAND接口 325由主機(jī)接口模塊(“HIM”) 3010實(shí)現(xiàn)。HIM 3010 是支持“主機(jī)側(cè)接口”作為“快閃器件類(lèi)型接口”的邏輯的集合。HIM 3010包括先進(jìn)先出 (“FIFO”)模塊3080、控制單元3090、循環(huán)冗余校驗(yàn)(“CRC”)模塊3100 (盡管可以使用另一類(lèi)型的錯(cuò)誤檢測(cè)碼(“EDC”)模塊)、命令寄存器3110、地址寄存器3120和主機(jī)直接存儲(chǔ)器訪問(wèn)(“HDMA”)單元3130.在此實(shí)施例中,HIM 3010采取ONFI HIM的形式。如將在以下更詳細(xì)討論的,一些HIM從主機(jī)控制器接收對(duì)于跨越了幾頁(yè)的相對(duì)大量的數(shù)據(jù)的高級(jí)請(qǐng)求,并且NAND控制器確定滿足該請(qǐng)求需要哪些動(dòng)作。相反,ONFI HIM從主機(jī)控制器接收幾個(gè)更小尺寸(例如對(duì)于單獨(dú)的頁(yè))的請(qǐng)求,因此要求ONFI HIM同時(shí)處理多個(gè)(例如八個(gè)) 讀和寫(xiě)請(qǐng)求?;氐綀D13A,圖3的第二 NAND接口 335在此由快閃接口模塊(“FIM”)3020實(shí)現(xiàn)。 在當(dāng)前的實(shí)施例中,F(xiàn)IM 3020被實(shí)現(xiàn)為將“器件側(cè)接口”創(chuàng)建為“主機(jī)側(cè)接口”的邏輯和低級(jí)可編程序列器的集合。在此實(shí)施例中,F(xiàn)IM 3020包括命令寄存器3140、地址寄存器3150、 ECC編碼模塊3160、ECC解碼模塊3170、數(shù)據(jù)擾碼器3180和數(shù)據(jù)解擾器3190。處理器3040在NAND控制器300內(nèi)部,該處理器3040具有本地ROM、代碼RAM和數(shù)據(jù)RAM。中央總線3030連接處理器3040、HIM 3010、FIM 3020和以下描述的其他模塊, 并且用于在示出的不同模塊之間傳送數(shù)據(jù)。此雙向總線3030可以是具有與每個(gè)內(nèi)部組件的實(shí)際連接的電總線或者結(jié)合ARC微處理器使用的高級(jí)高速總線(“AHB”),其使用互連矩陣邏輯上連接各個(gè)模塊。中央總線3030可以傳輸數(shù)據(jù)、控制信號(hào)或者這兩者。NAND控制器300還包括緩沖器RAM( “BRAM”) 3050,其用于暫時(shí)存儲(chǔ)正被讀或?qū)懙臄?shù)據(jù)頁(yè);ECC校正引擎3060,用于校正錯(cuò)誤。NAND控制器300還包括加密模塊3070,用于進(jìn)行加密/解密功能。NAND控制器300可以進(jìn)一步包括列替換模塊,其在此由FIM序列器、處理器3040 中的固件或者優(yōu)選在位于FIM 302中的小量邏輯和表中實(shí)現(xiàn)。列替換模塊允許閃存器件 330(圖3)包含關(guān)于壞列位置的信息。壞列地址信息被包含在閃存器件330中并在任何讀或?qū)懖僮髦坝晒碳呙?。在固件掃描閃存器件330之后,其建立要由列替換模塊使用的具有壞列位置的壞列地址表。關(guān)于快閃寫(xiě)操作,列替換模塊對(duì)于在壞列地址表中檢測(cè)到的地址插入數(shù)據(jù)(OxFFFF)。關(guān)于快閃讀操作,來(lái)自壞列地址的數(shù)據(jù)將被丟棄。利用現(xiàn)在概括地描述的NAND控制器300的組件,現(xiàn)在將給出NAND控制器300的示例寫(xiě)和讀操作。首先轉(zhuǎn)向?qū)懖僮?,HIM 3010中的FIFO 3080擔(dān)當(dāng)對(duì)于來(lái)自主機(jī)控制器的到來(lái)的寫(xiě)命令、地址和數(shù)據(jù)的緩沖器,并將那些要素與系統(tǒng)卡域同步。CRC模塊3100校驗(yàn)到來(lái)的信息以確定是否出現(xiàn)任何傳輸錯(cuò)誤。(CRC模塊3100是以上所述的EDC模塊的例子。) CRC模塊產(chǎn)生或校驗(yàn)錯(cuò)誤檢測(cè)碼以校驗(yàn)傳輸錯(cuò)誤,作為首尾相接(end-to-end)數(shù)據(jù)保護(hù)方案的部分。如果沒(méi)檢測(cè)到錯(cuò)誤,控制單元3090對(duì)自FIFO 3080接收的命令解碼并將其存儲(chǔ)在命令寄存器3110中,并且還將地址存儲(chǔ)在地址寄存器3120中。從主機(jī)控制器接收的數(shù)據(jù)經(jīng)過(guò)HDMAAHB接口 3130經(jīng)由中央總線3030發(fā)送到BRAM 3050??刂茊卧?090向處理器 3040發(fā)送中斷,響應(yīng)于中斷,處理器3040從命令寄存器3080和地址寄存器3120讀取命令, 并且基于該命令,在FIM 3020中建立數(shù)據(jù)路徑,并將該命令存儲(chǔ)在FIM的命令寄存器3140 中。處理器3040還將來(lái)自NAND接口 325的地址翻譯為內(nèi)部NAND地址,并將其存儲(chǔ)在FIM 的地址寄存器3150中。如果要進(jìn)行邏輯到物理地址轉(zhuǎn)換,處理器3040可以使用映射表來(lái)創(chuàng)建正確的物理地址。處理器3040可以進(jìn)行下述的一個(gè)或多個(gè)另外的功能。處理器3040 然后建立從BRAM 3050到FIM3020的數(shù)據(jù)傳送。FIM 3020從地址寄存器3150取值并根據(jù)NAND接口 335的標(biāo)準(zhǔn)對(duì)其格式化。在 BRAM 3050中存儲(chǔ)的數(shù)據(jù)被發(fā)送到加密模塊3070用于加密,然后經(jīng)過(guò)數(shù)據(jù)擾碼器3180而發(fā)送。數(shù)據(jù)擾碼器3180對(duì)數(shù)據(jù)加擾并將數(shù)據(jù)輸出到FIM的ECC編碼器3160,該ECC編碼器3160產(chǎn)生要與該數(shù)據(jù)一起存儲(chǔ)的ECC奇偶校驗(yàn)位。該數(shù)據(jù)和ECC位然后通過(guò)第二 NAND 接口與寫(xiě)命令一起被傳送到閃存器件用于存儲(chǔ)。作為在寫(xiě)期間可能發(fā)生的另外的功能的例
22子,如果啟用了對(duì)寫(xiě)異常中止或者編程故障的保護(hù)并且如果該寫(xiě)請(qǐng)求針對(duì)較高(upper)頁(yè)地址,則處理器3040可以通過(guò)第二 NAND接口向閃存器件發(fā)送對(duì)于相應(yīng)的較低(lower)頁(yè)的讀命令,然后發(fā)送編程命令以通過(guò)將其寫(xiě)回到閃存器件330中的另一位置中而將其復(fù)制到安全區(qū)(空閑便箋區(qū))。如果在寫(xiě)上頁(yè)時(shí)發(fā)生錯(cuò)誤,則仍可從安全區(qū)讀回下頁(yè)并且錯(cuò)誤被校正。(這是以上所述的用于經(jīng)由安全區(qū)處理寫(xiě)異常中止和/或編程故障的例子。)現(xiàn)在轉(zhuǎn)向讀操作,HIM 3010從主機(jī)控制器接收讀命令,并且處理器3040讀取該命令和邏輯地址。如果要進(jìn)行邏輯到物理地址轉(zhuǎn)換,則處理器3040中的固件可以使用映射表來(lái)創(chuàng)建正確的物理地址。(這是以上討論的地址映射模塊的例子。)然后該固件將該物理地址經(jīng)過(guò)第二 NAND接口 335發(fā)送到閃存器件330。在讀訪問(wèn)之后,數(shù)據(jù)通過(guò)NAND接口傳送、 解碼并用于產(chǎn)生用于錯(cuò)誤校正的檢驗(yàn)子(syndrome)數(shù)據(jù)、被數(shù)據(jù)解擾器3190解擾、然后通過(guò)中央總線3030發(fā)送到BRAM 3050。ECC校正引擎3060用于對(duì)于存儲(chǔ)在BRAM 3050中的數(shù)據(jù)校正可以使用ECC校正的任意錯(cuò)誤。因?yàn)榭梢杂?jì)算ECC并將其存儲(chǔ)在物理頁(yè)的部分中, 因此處理器3040可以在頁(yè)的每個(gè)部分被接收或者校正時(shí)被中斷或者所有數(shù)據(jù)被傳送時(shí)被中斷一次。然后加密模塊3070對(duì)數(shù)據(jù)進(jìn)行解密操作。以上描述的定時(shí)是靈活的,這是因?yàn)榈谝?NAND接口 325和第二 NAND接口 335可以以不同速度工作,并且固件可以使用存儲(chǔ)并轉(zhuǎn)發(fā)技術(shù)或者速度匹配緩沖來(lái)傳送數(shù)據(jù)。當(dāng)數(shù)據(jù)被發(fā)送回主機(jī)控制器時(shí),其通過(guò)HIM 3010 發(fā)送,并且傳輸CRC通過(guò)第一 NAND接口 325被發(fā)送回到主機(jī)以校驗(yàn)傳輸錯(cuò)誤。如上所述,除了處理從主機(jī)控制器發(fā)送的命令之外,處理器3040可以與主機(jī)發(fā)送的任何具體命令不同步或者獨(dú)立地進(jìn)行一個(gè)或多個(gè)另外的功能。例如,如果ECC校正引擎 3060檢測(cè)到可校正的軟錯(cuò)誤,則ECC校正引擎3060可以校正該軟錯(cuò)誤并且還中斷處理器 3040以記錄頁(yè)位置,以便在稍后的時(shí)間點(diǎn)相應(yīng)的塊可以被讀清洗。處理器3040可以進(jìn)行的其他示例的后臺(tái)任務(wù)是磨損均衡和壞塊以及空閑塊的映射,如下所述。再次轉(zhuǎn)向附圖,圖13B是示出實(shí)施例的NAND控制器的更詳細(xì)的視圖的框圖。如圖13A所示的控制器那樣,此實(shí)施例中的控制器包含ONFI HIM 3200和FIM 3沈0,它們可以通過(guò)中央總線(在此是用于數(shù)據(jù)路徑的高級(jí)微控制器總線架構(gòu)(“AMBA”)高性能總線 (“AHB”)多層矩陣總線3270以及用于命令路徑的高級(jí)外圍總線("APB")3330)通信。 ONFI HIM 3200和FIM 3260可以與處理器中的任意一個(gè)相關(guān)聯(lián)。例如,ONFI HIM 3260可以與運(yùn)行在MRAM 3290中存儲(chǔ)的ARC代碼的(具有內(nèi)置的緩存3285的)ARC600微處理器 3280相關(guān)聯(lián)。通常,ARC6003280用于服務(wù)于來(lái)自O(shè)NFI HIM 3200的中斷,并管理建立的數(shù)據(jù)路徑以及將信息傳送到快閃控制RISC 3250。快閃控制RISC 3250是可以與FIM 3260 — 起使用并且通常通過(guò)向FIM 3260中的各種組件產(chǎn)生微控制代碼來(lái)處理設(shè)置FIM 3260的功能。更具體地,快閃控制RISC 3250設(shè)置FIM 3260中的快閃直接存儲(chǔ)器存取(“FDMA”)模塊3440,其與AHB總線3270通信并產(chǎn)生AHB總線協(xié)議命令以從DRAM 3220讀取數(shù)據(jù)??扉W控制RISC 3250還設(shè)置EDC模塊;3450,其包含ECC編碼器和解碼器。MRAM 3240存儲(chǔ)用于運(yùn)行快閃控制RISC 3250的代碼。此實(shí)施例中的NAND控制器還包含存儲(chǔ)用于使控制器在引導(dǎo)之后運(yùn)行的指令代碼的ROM 3210。NAND控制器的另外的組件包括DRAM 3220、ECC校正引擎3230、加密模塊 3300、APB橋3310、中斷控制器3320和時(shí)鐘/復(fù)位管理模塊3340。加密模塊3300根據(jù)高級(jí)加密標(biāo)準(zhǔn)(AEQ使用1觀、192或者256位密鑰對(duì)數(shù)據(jù)的1 位的塊進(jìn)行加密和解密。對(duì)于寫(xiě)操作,在從主機(jī)接收到數(shù)據(jù)并通過(guò)ONFI HIM將其發(fā)送到BRAM 3050(圖13A)之后,ARC600處理器3280創(chuàng)建具有加密操作的定義的參數(shù)的控制塊。然后加密模塊3300進(jìn)行加密操作并將得到的數(shù)據(jù)存儲(chǔ)到BRAM 3050,并中斷ARC600 處理器3280以指示數(shù)據(jù)已就緒。對(duì)于讀操作,在ECC引擎完成BRAM 3050中的錯(cuò)誤校正之后,ARC600處理器3280創(chuàng)建具有解密操作的定義的參數(shù)的控制塊。然后加密模塊3300進(jìn)行解密操作并將得到的數(shù)據(jù)存儲(chǔ)到BRAM 3050并中斷ARC600處理器3280以指示數(shù)據(jù)已就緒?,F(xiàn)在更詳細(xì)地轉(zhuǎn)向ONFI HIM 3220 和 FIM 3260, ONFI HIM 3220 包括 ONFI 接口 3350,其以異步模式或者源同步模式工作,這是ONFI標(biāo)準(zhǔn)的部分。(異步(或者“async”) 模式是當(dāng)對(duì)于寫(xiě)用WE#信號(hào)以及對(duì)于讀用RE#信號(hào)鎖存數(shù)據(jù)時(shí)。源同步(或者“源(src) sync”)是當(dāng)選通脈沖(DQQ與數(shù)據(jù)一起轉(zhuǎn)發(fā)以指示何時(shí)應(yīng)該鎖存數(shù)據(jù)時(shí)。)0NFI HIM3200 還包含命令FIF03360、數(shù)據(jù)FIFO 3370、數(shù)據(jù)控制器3380、寄存器配置模塊;3400、主機(jī)直接存儲(chǔ)器存取(“HDMA”)模塊3380和CRC模塊3415,它們?nèi)缫陨辖Y(jié)合圖13所述那樣起作用。 ONFI HIM 3200還包含APB接口 3390和AHB端口 3420,分別用于與APB總線3330和AHB 總線3270通信。FIM 3260包括EDC模塊;3450,其包括EDC編碼器和EDC解碼器;快閃協(xié)議序列器(“FPS”);3430,其基于快閃控制RISC 3250或者ARC600微處理器3280提供的微控制代碼產(chǎn)生對(duì)于NAND總線的命令;FDMA 3440 ;數(shù)據(jù)擾碼器/解擾器3470以及NAND接口 3460 ο擾碼器/解擾器3470在快閃寫(xiě)傳送(加擾)和快閃讀傳送(解擾)期間進(jìn)行各數(shù)據(jù)的變換。存儲(chǔ)在閃存器件330中的數(shù)據(jù)可以被加擾以便通過(guò)創(chuàng)建更隨機(jī)化的數(shù)據(jù)樣式來(lái)降低依賴于數(shù)據(jù)樣式的靈敏性、干擾影響或者錯(cuò)誤。通過(guò)以跨越存儲(chǔ)器器件330中的頁(yè)的移位(shifting)樣式加擾數(shù)據(jù),可以顯著改進(jìn)存儲(chǔ)器的可靠性。擾碼器/解擾器3470 在飛行中(on the fly)處理數(shù)據(jù)并且由使用寄存器存取的ARC600處理器3280或者快閃控制RISC 3250配置。在加擾之后進(jìn)行ECC校驗(yàn)位產(chǎn)生。在解擾之前進(jìn)行ECC錯(cuò)誤檢測(cè), 但是在解擾之后進(jìn)行校正。此實(shí)施例中的NAND控制器總體地通過(guò)如上關(guān)于圖13A所述地處理寫(xiě)和讀操作。 例如,對(duì)于寫(xiě)操作,命令FIFO 3360和數(shù)據(jù)FIFO 3370存儲(chǔ)到來(lái)的寫(xiě)命令和數(shù)據(jù),并且CRC 模塊3415校驗(yàn)到來(lái)的信息以確定是否存在任何傳輸錯(cuò)誤。如果沒(méi)有檢測(cè)到錯(cuò)誤,則數(shù)據(jù)控制器3380解碼從命令FIFO 3360接收的命令,并將其存儲(chǔ)在寄存器配置模塊3400中的命令寄存器中。從主機(jī)控制器接收的地址被存儲(chǔ)在寄存器配置模塊3400中的地址寄存器中。從主機(jī)控制器接收的數(shù)據(jù)經(jīng)過(guò)HDMA 3410發(fā)送到DRAM 3220。然后數(shù)據(jù)控制器3380 向ARC6003280或者快閃控制RISC 3250發(fā)送中斷,其從命令寄存器讀取命令,從地址寄存器讀取地址,并向快閃控制RISC 3250傳遞控制以設(shè)置FIM3260開(kāi)始從DRAM 3220讀取數(shù)據(jù)并進(jìn)行ECC和數(shù)據(jù)加擾操作,其結(jié)果被發(fā)送到閃存器件330用于存儲(chǔ)。ARC600微處理器 3280和/或FIM 3260可以進(jìn)行另外的操作。例如,F(xiàn)IM 3260可以進(jìn)行列替換,并且可以使用ARC 600微處理器3280與FIM 3260 一起進(jìn)行以下操作壞塊和空閑塊管理、安全區(qū)、讀清洗和磨損均衡。以下更詳細(xì)地描述這些操作。對(duì)于讀操作,當(dāng)接收到讀命令時(shí),ONFI HIM 3200向ARC600微處理器3280發(fā)送中斷。ARC600微處理器3280然后將該命令和地址信息傳遞到快閃控制RISC 3250,這設(shè)置FPS 3430產(chǎn)生對(duì)NAND閃存器件330的讀命令。一旦數(shù)據(jù)已準(zhǔn)備好被從NAND閃存器件330 讀取,F(xiàn)PS 3430就開(kāi)始向NAND總線發(fā)送讀命令。讀取的數(shù)據(jù)經(jīng)過(guò)NAND接口單元3460到達(dá)數(shù)據(jù)解擾器3470,然后經(jīng)過(guò)EDC模塊3450,其產(chǎn)生用于ECC校正的檢驗(yàn)子位。然后數(shù)據(jù)和檢驗(yàn)子位經(jīng)過(guò)FDMA 3440并被存儲(chǔ)在DRAM 3220中??扉W控制RISC3250然后設(shè)置ECC 校正引擎3230以校正任何錯(cuò)誤。加密模塊3300在此時(shí)可以解密數(shù)據(jù)。ARC600微處理器 3280然后接收中斷并在ONFI HIM 3200中對(duì)寄存器配置模塊3400編程以陳述數(shù)據(jù)已準(zhǔn)備好被從DRAM 3220讀取?;诖诵畔ⅲ琌NFI HIM 3200從DRAM 3220讀取數(shù)據(jù)并將其存儲(chǔ)在數(shù)據(jù)FIF03370中。ONFI HIM 3200然后向主機(jī)控制器發(fā)送就緒信號(hào)以用信號(hào)通知數(shù)據(jù)已準(zhǔn)備好被讀取。如上所述,不像其他HIM,ONFI HIM從主機(jī)控制器接收幾個(gè)更小尺寸的(例如對(duì)于各個(gè)頁(yè)的)請(qǐng)求,因此要求ONFI HIM同時(shí)處理多個(gè)(例如八個(gè))讀和寫(xiě)請(qǐng)求。以此方式, 在ONFI HIM和主機(jī)控制器之間存在比與其他HIM之間更多的雙向通信。與此通信中增加的頻率一起,出現(xiàn)了用于處理多個(gè)讀和寫(xiě)請(qǐng)求的更多并行處理。圖13C和13D例示分別對(duì)于讀和寫(xiě)操作的ONFI HIM的邏輯操作。首先轉(zhuǎn)向圖13C, 此實(shí)施例的ONFI HIM 3480通過(guò)ONFI總線3490接收來(lái)自主機(jī)控制器的讀命令。ONFI HIM 3480可以以異步或者源同步模式工作,并且將讀命令經(jīng)由信號(hào)復(fù)用器3500、3530傳送到命令FIFO 3540o (分別使用異步和ONFI源同步組件3510、3520,0NFI HIM ;3480可以用在異步模式或者源同步模式中。)0NFI HIM 3480還將從主機(jī)控制器接收的地址存儲(chǔ)在邏輯單元號(hào)(“LUN”)地址FIFO 3550中。(此實(shí)施例中的NAND控制器支持多個(gè)邏輯單元,它們被當(dāng)作可通過(guò)LUN地址尋址的獨(dú)立的實(shí)體。)命令和地址從FIF03540、3550被讀到命令和數(shù)據(jù)控制器3560中,其將這些項(xiàng)同步。命令和數(shù)據(jù)控制器3560然后向系統(tǒng)寄存器控制器 3570發(fā)送中斷,該系統(tǒng)寄存器控制器產(chǎn)生對(duì)ARC600微控制器的中斷。ARC600微控制器然后從系統(tǒng)寄存器控制器3570中的寄存器讀取LUN地址,并且從閃存器件讀取數(shù)據(jù)的處理如上所述。當(dāng)所有讀取的數(shù)據(jù)被寫(xiě)到DRAM時(shí),ARC600微處理器對(duì)系統(tǒng)寄存器控制器3570中的寄存器編程以通知ONFI HIM 3480數(shù)據(jù)已準(zhǔn)備好被讀取。然后ONFI HIM 3480使用讀請(qǐng)求控制單元通過(guò)HDMA 3580讀取數(shù)據(jù)。讀取的數(shù)據(jù)被存儲(chǔ)在讀數(shù)據(jù)FIFO 3590中,其對(duì)于每個(gè)LUN 3595被分區(qū)。一旦完成此操作,就緒指示符就被存儲(chǔ)在狀態(tài)寄存器中,并且數(shù)據(jù)流傳輸(stream)到主機(jī)控制器?,F(xiàn)在轉(zhuǎn)向圖13D,在寫(xiě)操作中,經(jīng)過(guò)ONFI 3410總線從主機(jī)控制器接收寫(xiě)命令。 ONFI HIM ;3400將該寫(xiě)命令經(jīng)由信號(hào)復(fù)用器;3420、3450傳送到命令FIFO 3460。(分別使用異步和ONFI源同步組件3430、3440,ONFI HIM 3400可以用在異步模式和源同步模式中。) ONFI HIM3400還將從主機(jī)控制器接收的地址存儲(chǔ)在邏輯單元號(hào)(“LUN”)地址FIFO 3470 中。從主機(jī)控制器接收的數(shù)據(jù)被存儲(chǔ)在寫(xiě)數(shù)據(jù)FIFO 3520中。命令和地址從FIFO 3460、 3470被讀到命令和數(shù)據(jù)控制器3480中,該命令和數(shù)據(jù)控制器3480將這些項(xiàng)同步。然后命令和數(shù)據(jù)控制器3480向系統(tǒng)寄存器控制器3490發(fā)送中斷,該系統(tǒng)寄存器控制器3490產(chǎn)生對(duì)ARC600微控制器的中斷。ARC600微控制器然后從系統(tǒng)寄存器控制器3490中的寄存器讀取LUN地址,并且從寫(xiě)操作設(shè)置控制器的處理如上所述。HDMA 3530具有與AHB總線3550 通信的AHB端口 3M0,并且向DRAM發(fā)送數(shù)據(jù)。CRC模塊3545校驗(yàn)數(shù)據(jù)中的傳輸錯(cuò)誤。一旦數(shù)據(jù)已被存儲(chǔ)在閃存器件330中并且閃存器件330指示就緒并且編程操作的狀態(tài)是成功或者失敗,就緒指示符就被存儲(chǔ)在系統(tǒng)寄存器控制器3490中的狀態(tài)寄存器中,指示ONFI HIM 3400對(duì)于來(lái)自主機(jī)控制器的另一命令已經(jīng)準(zhǔn)備好。返回圖13A,NAND控制器300還可以處理編程失敗和擦除失敗。在附連到快閃接口模塊3020 (下文稱FIM)的NAND閃存器件330被編程時(shí),NAND存儲(chǔ)器器件330向NAND控制器300 (或者可選地通過(guò)主機(jī)接口模塊3010 (其后稱為HIM)向ONFI主機(jī))報(bào)告編程操作的成功或者失敗。由于NAND單元中的缺陷或者由于NAND單元關(guān)于擦除和編程循環(huán)具有的有限耐久性,NAND存儲(chǔ)器器件330在存儲(chǔ)器的預(yù)期使用壽命內(nèi)可能經(jīng)歷一些數(shù)量的編程失敗。當(dāng)編程頁(yè)操作未成功完成時(shí),NAND存儲(chǔ)器器件330將向控制器300返回FAIL (失敗)狀態(tài)。控制器處理器3040(圖13A)或者快閃協(xié)議序列器(圖13B)驗(yàn)證每個(gè)編程頁(yè)操作的成功或者失敗。通常,任何單個(gè)編程頁(yè)操作的失敗將致使處理器3040(或者可選地 ONFI主機(jī))將整個(gè)NAND塊(其可能包含多頁(yè))當(dāng)作是有缺陷的。缺陷塊將被停止使用。 通常,控制器300將把未成功編程的數(shù)據(jù)以及在缺陷塊中的之前頁(yè)中的任意數(shù)據(jù)復(fù)制到另一替換塊(空閑塊)??刂破?00可以使用FIM 3020、數(shù)據(jù)解擾器3190和ECC解碼器3170 以及如需要時(shí)應(yīng)用ECC校正將之前頁(yè)讀到BRAM 3050中。然后以正常方式使用FIM 3020 將數(shù)據(jù)寫(xiě)到替換塊。編程失敗的一個(gè)方面是編程一頁(yè)的失敗可能破壞先前編程的另一頁(yè)中的數(shù)據(jù)。通常,這對(duì)于以共享存儲(chǔ)器陣列內(nèi)的字線的較高和較低邏輯頁(yè)物理地組織的MLC NAND存儲(chǔ)器將是可能的。通常的使用將是將數(shù)據(jù)編程到下頁(yè)中并將隨后的數(shù)據(jù)編程到上頁(yè)中。防止當(dāng)在字線上編程上頁(yè)時(shí)發(fā)生編程失敗時(shí)丟失下頁(yè)中的數(shù)據(jù)的一個(gè)方法是在編程上頁(yè)之前讀取下頁(yè)數(shù)據(jù)。下頁(yè)數(shù)據(jù)可以被讀到控制器BRAM 3050中并且可以另外被編程到非易失向閃存器件330中的便箋區(qū)(有時(shí)稱為“安全區(qū)”)中。因此保留在BRAM 3050或者安全區(qū)中的數(shù)據(jù)可以被保護(hù)不因編程失敗而丟失,并且將可用于被復(fù)制到替換塊,特別是在在NAND存儲(chǔ)器器件330的下頁(yè)中數(shù)據(jù)被破壞并且不能再成功讀取的情況下。一些NAND失敗模式可能類(lèi)似地破壞存儲(chǔ)器陣列的其他區(qū)域中的、比如相鄰字線上的數(shù)據(jù)是可能的。將其他潛在易受影響的數(shù)據(jù)讀到控制器BRAM3050中和/或?qū)⒃摂?shù)據(jù)保存到便箋區(qū)或安全區(qū)中的此方法還可以用于在這些情況下保護(hù)數(shù)據(jù)。在附連到FIM 3020的NAND閃存器件330被擦除時(shí),NAND存儲(chǔ)器器件330向NAND 控制器300(或者可選地通過(guò)HIM 3010向ONFI主機(jī))報(bào)告塊擦除操作的成功或失敗。當(dāng)擦除操作未成功完成時(shí),NAND存儲(chǔ)器器件330將向控制器300返回FAIL(失敗)狀態(tài)。控制器處理器3040或者快閃協(xié)議序列器3430中的電路驗(yàn)證每個(gè)擦除操作的成功或失敗。通常,任何擦除操作的失敗將導(dǎo)致處理器3040(或者ONFI主機(jī))將整個(gè)NAND塊當(dāng)作是有缺陷的。缺陷塊將被停止使用并且使用空閑塊替換它。NAND控制器300還可以處理閃存器件內(nèi)的編程干擾、擦除干擾和讀干擾。內(nèi)部NAND編程操作有可能影響或者干擾存儲(chǔ)器陣列的其他區(qū)域,在試圖讀取那些其他區(qū)域時(shí)導(dǎo)致錯(cuò)誤。防止編程干擾帶來(lái)失敗的一個(gè)方法是與編程操作結(jié)合地對(duì)潛在易受影響的區(qū)域進(jìn)行讀或者“讀清洗”操作,以便在它們變?yōu)椴豢尚U蛘卟豢苫謴?fù)的錯(cuò)誤之前檢測(cè)干擾影響。一旦(在讀清洗操作期間通過(guò)高的軟錯(cuò)誤率)檢測(cè)到干擾情況,控制器處理器3040(或者外部ONFI主機(jī))就可以將該數(shù)據(jù)復(fù)制到閃存器件330中的另一區(qū)域。
內(nèi)部NAND擦除操作可能影響或者干擾存儲(chǔ)器陣列的其他區(qū)域,當(dāng)試圖讀取那些其他區(qū)域時(shí)導(dǎo)致錯(cuò)誤。防止擦除干擾帶來(lái)失敗的一個(gè)方法是與擦除操作結(jié)合地對(duì)潛在地易受影響的區(qū)域進(jìn)行讀或者“讀清洗”操作,以便在它們變?yōu)椴豢尚U蛘卟豢苫謴?fù)的錯(cuò)誤之前檢測(cè)干擾影響。一旦檢測(cè)到干擾情況,控制器處理器3040(或者外部ONFI主機(jī))就可以將該數(shù)據(jù)復(fù)制到閃存器件330中的另一區(qū)域。內(nèi)部NAND讀操作有可能影響或者干擾存儲(chǔ)器陣列的其他區(qū)域,當(dāng)試圖讀取那些其他區(qū)域時(shí)導(dǎo)致錯(cuò)誤。干擾影響有時(shí)可以通過(guò)許多讀操作累積。防止編程干擾帶來(lái)失敗的一個(gè)方法是與讀操作結(jié)合地對(duì)潛在地易受影響的區(qū)域進(jìn)行讀或者“讀清洗”操作,以便在它們變?yōu)椴豢尚U蛘卟豢苫謴?fù)的錯(cuò)誤之前檢測(cè)干擾影響。一旦檢測(cè)到干擾情況,控制器處理器3040(或者外部ONFI主機(jī))就可以將該數(shù)據(jù)復(fù)制到閃存器件330中的另一區(qū)域?,F(xiàn)在參考圖13A,NAND控制器300按以下方式處理讀錯(cuò)誤。通常,通過(guò)FIM 3020 編程到NAND存儲(chǔ)器器件330中的數(shù)據(jù)附加了錯(cuò)誤檢測(cè)碼或者糾錯(cuò)碼并且將其與該數(shù)據(jù)一起存儲(chǔ)在NAND陣列中??刂破?00使用ECC編碼器3160用于此功能。當(dāng)這樣的數(shù)據(jù)從快閃陣列讀到BRAM 3050時(shí),ECC解碼器3170根據(jù)該數(shù)據(jù)重新產(chǎn)生ECC碼并將其與在數(shù)據(jù)被編程到快閃中時(shí)附加于該數(shù)據(jù)的ECC碼相比較。如果該數(shù)據(jù)與過(guò)去寫(xiě)入的數(shù)據(jù)一致,則ECC 電路指示不存在數(shù)據(jù)錯(cuò)誤。如果檢測(cè)到讀取的數(shù)據(jù)中的一些差別,并且該差別足夠小而在 ECC校正能力內(nèi),則讀取的數(shù)據(jù)(通常被包含在BRAM 3050中)被ECC校正引擎3060 “校正”或者修改以將其恢復(fù)到原始值,如由處理器3040所控制的。如果數(shù)據(jù)錯(cuò)誤超出ECC校正能力,則發(fā)生“不可校正的”讀錯(cuò)誤。通常,不可校正的讀錯(cuò)誤將導(dǎo)致當(dāng)讀取時(shí)錯(cuò)誤狀態(tài)被返回到主機(jī)接口。防止不可校正的讀錯(cuò)誤或者當(dāng)檢測(cè)到錯(cuò)誤時(shí)恢復(fù)的一個(gè)方法是控制器300(或者外部ONFI主機(jī))重試讀操作。此重試可以使用偏移的余量(margin)級(jí)或者其他機(jī)制來(lái)降低數(shù)據(jù)內(nèi)的錯(cuò)誤,可能消除錯(cuò)誤或者將錯(cuò)誤的數(shù)量減少到在ECC校正能力內(nèi)的程度??蛇x地,當(dāng)恢復(fù)讀錯(cuò)誤時(shí),或者如果恢復(fù)數(shù)據(jù)所需的ECC校正的量達(dá)到或者超過(guò)某個(gè)閾值,可以將數(shù)據(jù)重寫(xiě)到相同的或者另一個(gè)塊以便將數(shù)據(jù)恢復(fù)到無(wú)錯(cuò)或者改善的情況??蛇x地可以認(rèn)為原始的數(shù)據(jù)位置是有缺陷的,在此情況下,可以將其標(biāo)記為有缺陷并停止使用。再次參考圖13A,NAND控制器300還可以處理寫(xiě)異常中止。寫(xiě)異常中止是在編程或擦除操作在進(jìn)行中時(shí),針對(duì)控制器300和NAND存儲(chǔ)器器件330的電力的非預(yù)期丟失。電力的丟失可以導(dǎo)致NAND存儲(chǔ)器器件330中的未完成的編程或擦除情況,這可能導(dǎo)致不可校正的讀錯(cuò)誤。在某些情況下,比如MLC NAND的情況下,共享字線的其他頁(yè)(例如下頁(yè))可能被字線的上頁(yè)上的異常編程操作而破壞,這非常像上述的編程失敗情況。存在減少或消除寫(xiě)異常中止錯(cuò)誤或者最小化其影響的幾種方法。一種方法是使用低電壓檢測(cè)電路以通知處理器3040電力已經(jīng)中斷。處理器3040然后可以允許當(dāng)前的編程或擦除操作完成但是不允許新操作開(kāi)始。理想地,當(dāng)前操作將具有足夠的時(shí)間以足夠的電力來(lái)完成。一種可能結(jié)合低電壓檢測(cè)方法使用的替換方法是向電源電路添加電容或者電池 (或者某個(gè)替換的電源)以擴(kuò)展可用于完成編程或擦除操作的電力。另一方法是提供類(lèi)似于以上所述的便箋“安全區(qū)”??梢栽陂_(kāi)始上頁(yè)編程之前,讀取存在于在上頁(yè)編程期間可能易受影響的下頁(yè)中的任何“舊的”數(shù)據(jù)并將其保存在安全區(qū)中。這將提供在電力丟失事件的情況下對(duì)先前編程的數(shù)據(jù)的保護(hù)。在一些實(shí)現(xiàn)方式中,可能可以接受不能讀取在寫(xiě)異常中止情形下被破壞的數(shù)據(jù),但是其他可能不相關(guān)的更舊的數(shù)據(jù)必須得到保護(hù)。另一方法是當(dāng)控制器被上電時(shí)搜索潛在的寫(xiě)異常中止錯(cuò)誤。如果發(fā)現(xiàn)可以被確定 (或假設(shè))為寫(xiě)異常中止的結(jié)果的錯(cuò)誤,則可以丟棄該錯(cuò)誤數(shù)據(jù)。在此情形下,控制器300 有效地回復(fù)(revert back)到先前數(shù)據(jù),中斷操作就像未發(fā)生一樣。再次參考圖13A,NAND控制器300還可以對(duì)存儲(chǔ)器進(jìn)行磨損均衡。磨損均衡是通過(guò)比否則由于正常快閃管理算法而發(fā)生的情形更均勻地在所有物理塊之間分布?jí)K使用來(lái)增加整體產(chǎn)品耐久性和壽命。這通過(guò)強(qiáng)迫“冷”塊轉(zhuǎn)移到空閑塊池,其進(jìn)而將用于主機(jī)數(shù)據(jù)更新,并且同時(shí)將未被主機(jī)更新的來(lái)自“冷”塊的數(shù)據(jù)移動(dòng)到“熱”塊來(lái)進(jìn)行。此交換(swap) 將導(dǎo)致混合“熱”和“冷”塊。該交換可以隨機(jī)地或者循環(huán)地進(jìn)行,選擇用于交換的塊,或者基于熱計(jì)數(shù)(編程-擦除循環(huán)的數(shù)量)分析來(lái)選擇它們。該交換可以周期地進(jìn)行,比如每 100個(gè)塊的周期,通常由系統(tǒng)參數(shù)校準(zhǔn)來(lái)在整體系統(tǒng)性能和塊使用的平均之間平衡以在磨損和性能開(kāi)銷(xiāo)之間平衡。示例的高級(jí)序列是1.調(diào)度磨損均衡操作2.通過(guò)熱計(jì)數(shù)分析或者隨機(jī)或者循環(huán)地標(biāo)識(shí)“熱”和“冷”塊。2.將來(lái)自所選“冷”塊的數(shù)據(jù)復(fù)制到空閑塊池中的所選的“熱”空閑塊。4.將“冷”塊釋放到空閑塊池。結(jié)果,空閑塊池被冷塊而不是熱塊占據(jù)。可以跳過(guò)一些操作,像基于分析的塊選擇。如果檢測(cè)到塊磨損分布是均勻的,則還可以跳過(guò)磨損均衡操作。磨損均衡操作和熱計(jì)數(shù)管理由處理器3040在固件中進(jìn)行,以便主機(jī)控制器 121(圖3)將不知道這些常規(guī)(houseke印ing)快閃塊均衡操作。參考圖13A,控制器300還可以在檢測(cè)到讀干擾時(shí)實(shí)現(xiàn)對(duì)閃存器件330的讀清洗。 對(duì)于閃存器件330內(nèi)的NAND存儲(chǔ)器陣列的一個(gè)區(qū)域的讀操作可能影響或干擾存儲(chǔ)器陣列的其他區(qū)域,導(dǎo)致單元從一個(gè)狀態(tài)移動(dòng)到另一狀態(tài),并最終當(dāng)試圖讀取先前存儲(chǔ)到那些其他區(qū)域的數(shù)據(jù)時(shí)導(dǎo)致位錯(cuò)誤。此干擾影響可以通過(guò)許多讀操作累積,最終導(dǎo)致可能超過(guò)系統(tǒng)的數(shù)據(jù)校正能力的位錯(cuò)誤數(shù)量。超過(guò)系統(tǒng)校正能力的錯(cuò)誤被稱為不可校正的錯(cuò)誤。防止編程干擾帶來(lái)失敗的一個(gè)方法是對(duì)潛在易受影響的區(qū)域進(jìn)行讀或者“清洗”操作,以便在它們變?yōu)椴豢尚U蛘卟豢苫謴?fù)的錯(cuò)誤之前檢測(cè)干擾影響。一旦檢測(cè)到干擾情況(通常通過(guò)檢測(cè)到關(guān)于讀取的數(shù)據(jù)存在許多錯(cuò)誤位),處理器3040可以通常通過(guò)將數(shù)據(jù)復(fù)制到NAND存儲(chǔ)器陣列的另一區(qū)域來(lái)將該數(shù)據(jù)移動(dòng)到存儲(chǔ)器中另一區(qū)域以便“刷新”它。讀清洗復(fù)制通常在主機(jī)讀操作、即內(nèi)部系統(tǒng)讀操作的過(guò)程期間在讀取的塊中或者通過(guò)調(diào)度的讀清洗掃描由ECC校正引擎3060(圖13A)發(fā)現(xiàn)的可校正的ECC錯(cuò)誤觸發(fā)。系統(tǒng)讀操作是閃存系統(tǒng)讀取存儲(chǔ)在NAND快閃中的固件、參數(shù)或者映射信息所需的操作。讀清洗掃描是讀取塊中的所有數(shù)據(jù)以確定其中包含的任意數(shù)據(jù)是否已經(jīng)被干擾。通常在主機(jī)讀或者系統(tǒng)讀操作的過(guò)程期間當(dāng)塊已經(jīng)部分地讀取時(shí)選擇塊用于讀清洗掃描,但是也可以使用其他標(biāo)準(zhǔn)來(lái)選擇塊,比如隨機(jī)地或者經(jīng)由通過(guò)存儲(chǔ)器的塊的確定性排序。因?yàn)樽x清洗掃描操作花費(fèi)時(shí)間并且影響數(shù)據(jù)的吞吐量,因此系統(tǒng)可以通過(guò)使用隨機(jī)選擇、計(jì)數(shù)器或者其他機(jī)制僅周期地或者偶爾地選擇塊用于讀清洗掃描。調(diào)度的頻率可以被校準(zhǔn)為在系統(tǒng)性能需要以及在數(shù)據(jù)變?yōu)椴豢尚U皺z測(cè)被干擾的數(shù)據(jù)所需的頻率之間平衡。在檢測(cè)到具有在預(yù)定閾值以上的一些數(shù)量的錯(cuò)誤位的可校正錯(cuò)誤時(shí),并對(duì)該塊調(diào)度讀清洗復(fù)制。讀清洗復(fù)制是如下方法,通過(guò)該方法,從被干擾的塊讀數(shù)據(jù)并在校正具有可校正的ECC錯(cuò)誤的所有數(shù)據(jù)之后寫(xiě)到另一塊。然后原始?jí)K可以被返回到公共空閑塊池并最終被擦除并以其他數(shù)據(jù)來(lái)寫(xiě)。讀清洗掃描和讀清洗復(fù)制調(diào)度將由處理器3040在固件中在NAND 控制器300中進(jìn)行,以便主機(jī)控制器121將不知道這些常規(guī)的快閃塊均衡操作。Mrk意圖將以上詳細(xì)描述理解為對(duì)本發(fā)明可以采取的所選形式的例示比而不是對(duì)本發(fā)明的限定。僅以下權(quán)利要求包括其等效物意圖定義本發(fā)明的范圍。此外,以下權(quán)利要求中的一些可以陳述組件可操作以進(jìn)行某個(gè)功能或者被配置用于某個(gè)任務(wù)。應(yīng)該注意,這些不死限制性的限定。還應(yīng)該注意,權(quán)利要求中列出的動(dòng)作可以按任意順序進(jìn)行一不是一定要按它們被列出的順序。
權(quán)利要求
1.一種管理閃存器件的方法,該方法包括 在與主機(jī)和閃存器件通信的控制器中進(jìn)行 從主機(jī)接收讀命令;響應(yīng)于接收到該讀命令,從該閃存器件取回?cái)?shù)據(jù); 對(duì)取回的數(shù)據(jù)進(jìn)行錯(cuò)誤分析;以及將讀狀態(tài)傳輸?shù)街鳈C(jī),其中該讀狀態(tài)包括基于錯(cuò)誤分析的結(jié)果的狀態(tài)信息。
2.如權(quán)利要求1的方法,其中進(jìn)行錯(cuò)誤分析包括產(chǎn)生關(guān)于取回的數(shù)據(jù)的糾錯(cuò)碼,并將產(chǎn)生的糾錯(cuò)碼與從閃存器件取回的存儲(chǔ)的糾錯(cuò)碼相比較。
3.如權(quán)利要求1的方法,其中傳輸讀狀態(tài)包括當(dāng)向主機(jī)發(fā)送取回的數(shù)據(jù)時(shí),將僅單個(gè)一位狀態(tài)字段與取回的數(shù)據(jù)一起傳輸,狀態(tài)位指示讀命令的成功或失敗之一。
4.如權(quán)利要求1的方法,其中傳輸讀狀態(tài)包括當(dāng)向主機(jī)發(fā)送取回的數(shù)據(jù)時(shí),將具有多個(gè)字段的狀態(tài)消息與取回的數(shù)據(jù)一起傳輸,其中該多個(gè)字段的至少一個(gè)包括與讀命令的成功或失敗有關(guān)的信息。
5.如權(quán)利要求4的方法,其中該多個(gè)字段的至少另外一個(gè)包括與閃存器件中的空閑塊使用有關(guān)的信息。
6.一種用于在主機(jī)和閃存器件之間接口的控制器,該控制器包括 第一接口,被配置為在控制器和主機(jī)之間接口 ;第二接口,被配置為在控制器和閃存器件之間接口 ;控制模塊,被配置為響應(yīng)于從主機(jī)接收到讀命令,對(duì)通過(guò)第二接口從閃存器件取回的數(shù)據(jù)進(jìn)行錯(cuò)誤分析;以及狀態(tài)模塊,被配置為基于該錯(cuò)誤分析的結(jié)果準(zhǔn)備讀狀態(tài)信息;以及其中該控制模塊還被配置為通過(guò)第一接口向主機(jī)傳輸讀狀態(tài)信息與根據(jù)錯(cuò)誤分析處理的取回的數(shù)據(jù)。
7.如權(quán)利要求6的控制器,其中該錯(cuò)誤分析包括計(jì)算關(guān)于取回的數(shù)據(jù)的糾錯(cuò)碼以及比較計(jì)算的糾錯(cuò)碼與從閃存器件取回的存儲(chǔ)的糾錯(cuò)碼。
8.如權(quán)利要求6的控制器,其中錯(cuò)誤分析包括計(jì)算單個(gè)糾錯(cuò)碼。
9.如權(quán)利要求6的控制器,其中錯(cuò)誤分析包括以電壓偏移重新讀取。
10.如權(quán)利要求6的控制器,其中讀狀態(tài)包括指示讀命令的成功或失敗之一的單個(gè)位。
11.如權(quán)利要求6的控制器,其中讀狀態(tài)包括布置在多個(gè)字段中的狀態(tài)信息,其中該多個(gè)字段的至少一個(gè)包括與讀命令的成功或失敗有關(guān)的信息。
12.如權(quán)利要求11的控制器,其中該多個(gè)字段的至少另外一個(gè)包括與在閃存器件中的空閑塊使用有關(guān)的信息。
13.—種管理閃存器件的方法,包括 在與主機(jī)和閃存器件通信的控制器中進(jìn)行 從主機(jī)接收命令;執(zhí)行該命令;確定發(fā)生與該命令有關(guān)的錯(cuò)誤; 將關(guān)于該錯(cuò)誤的狀態(tài)信息存儲(chǔ)在閃存器件中;以及向主機(jī)傳輸標(biāo)識(shí)關(guān)于該錯(cuò)誤的狀態(tài)信息已被控制器存儲(chǔ)的錯(cuò)誤指示符。
14.如權(quán)利要求13的方法,其中該命令包括寫(xiě)命令。
15.如權(quán)利要求13的方法,其中該錯(cuò)誤包括塊編程失敗或者塊擦除失敗。
16.如權(quán)利要求13的方法,其中該命令包括讀命令。
17.如權(quán)利要求16的方法,其中確定發(fā)生了錯(cuò)誤包括響應(yīng)于該讀命令,對(duì)從閃存器件取回的數(shù)據(jù)應(yīng)用糾錯(cuò)碼,并且標(biāo)識(shí)讀錯(cuò)誤已經(jīng)發(fā)生并且被校正或者不可校正。
18.如權(quán)利要求13的方法,其中該狀態(tài)信息包括多個(gè)狀態(tài)字段,其中該狀態(tài)字段的至少一個(gè)與讀錯(cuò)誤的嚴(yán)重性有關(guān)。
19.如權(quán)利要求13的方法,其中存儲(chǔ)關(guān)于錯(cuò)誤的狀態(tài)信息包括存儲(chǔ)用于由主機(jī)使用的、與閃存器件中的空閑塊使用有關(guān)的信息。
20.一種用于在主機(jī)和閃存器件之間接口的控制器,該控制器包括 第一接口,被配置為在控制模塊和主機(jī)之間接口 ;第二接口,被配置為在控制模塊和閃存器件之間接口 ;控制模塊,被配置為響應(yīng)于通過(guò)第一接口從主機(jī)接收的命令的執(zhí)行,確定是否發(fā)生與該命令有關(guān)的錯(cuò)誤;以及狀態(tài)模塊,被配置為將關(guān)于該錯(cuò)誤的狀態(tài)信息存儲(chǔ)在閃存器件上;以及其中該控制模塊還被配置為向主機(jī)傳輸標(biāo)識(shí)關(guān)于錯(cuò)誤的該狀態(tài)信息已被狀態(tài)模塊存儲(chǔ)的錯(cuò)誤指示符。
21.如權(quán)利要求20的控制器,其中該命令包括寫(xiě)命令。
22.如權(quán)利要求21的控制器,其中該錯(cuò)誤包括塊編程失敗或者塊擦除失敗。
23.如權(quán)利要求20的控制器,其中該命令包括讀命令。
24.如權(quán)利要求23的控制器,其中該控制模塊被配置為響應(yīng)于該讀命令,通過(guò)對(duì)從閃存器件取回的數(shù)據(jù)進(jìn)行糾錯(cuò)碼分析來(lái)確定是否發(fā)生錯(cuò)誤。
25.如權(quán)利要求20的控制器,其中關(guān)于錯(cuò)誤的該狀態(tài)信息還包括與閃存器件中的空閑塊使用有關(guān)的信息。
26.一種用于在主機(jī)和閃存器件之間接口的控制器,該控制器包括 第一接口,被配置為在控制模塊和主機(jī)之間接口 ;第二接口,被配置為在控制模塊和閃存器件之間接口 ;以及空閑塊管理模塊,可重設(shè)地被布置為在以下模式之一工作第一空閑塊管理模式,其中該空閑塊管理模塊被配置為對(duì)于預(yù)定數(shù)量的空閑塊掃描閃存器件并阻止主機(jī)對(duì)該預(yù)定數(shù)量的空閑塊的訪問(wèn);第二空閑塊管理模式,其中該空閑塊管理模塊被配置為掃描閃存器件中的所有塊并確定可用塊的總數(shù),以僅允許主機(jī)訪問(wèn)預(yù)定數(shù)量的可用塊,并保留多于預(yù)定閾值的、可用塊總數(shù)中的任意剩余者作為空閑塊,其中該控制器阻止主機(jī)對(duì)該剩余者的訪問(wèn);或者第三空閑塊管理模式,其中該空閑塊管理模塊被配置為當(dāng)預(yù)定數(shù)量的空閑塊之一已被空閑塊管理模塊使用時(shí),從主機(jī)請(qǐng)求另外的空閑塊。
27.—種管理閃存器件的方法,該方法包括 在與主機(jī)和閃存器件通信的控制器中進(jìn)行保留閃存器件中的預(yù)定數(shù)量的可用塊作為空閑塊,并允許主機(jī)訪問(wèn)閃存器件中的除了該預(yù)定數(shù)量的可用塊之外的所有可用塊;當(dāng)可由主機(jī)訪問(wèn)的塊發(fā)生錯(cuò)誤時(shí),用空閑塊之一替換該可由主機(jī)訪問(wèn)的塊; 在替換塊之后,向主機(jī)傳輸將可由主機(jī)訪問(wèn)的可用塊之一返回到控制器作為空閑塊的請(qǐng)求;以及從主機(jī)接收標(biāo)識(shí)該可用塊之一的信息。
28.如權(quán)利要求27的方法,其中傳輸請(qǐng)求包括在附加于從閃存器件取回的數(shù)據(jù)的字段中傳輸該請(qǐng)求。
全文摘要
本文描述的實(shí)施例提供了用于提供閃存系統(tǒng)中的狀態(tài)和空閑塊管理信息以及用于與主機(jī)協(xié)作地管理空閑塊分配的控制器和方法。在一個(gè)實(shí)施例中,控制器從主機(jī)接收命令,從閃存取回?cái)?shù)據(jù),并且針對(duì)錯(cuò)誤分析取回的數(shù)據(jù),并將狀態(tài)信息傳輸?shù)街鳈C(jī),其中該狀態(tài)信息包括基于錯(cuò)誤分析的結(jié)果的信息,比如讀錯(cuò)誤?;蛘?,控制器存儲(chǔ)狀態(tài)信息并向主機(jī)傳輸標(biāo)識(shí)關(guān)于錯(cuò)誤的狀態(tài)信息在存儲(chǔ)器中可獲得的錯(cuò)誤指示符。在另一實(shí)施例中,控制器可重新選擇地被初始化為多個(gè)空閑塊管理模式之一,其中在分割管理模式下,控制器可以要求主機(jī)返回對(duì)主機(jī)可用的額外的塊。
文檔編號(hào)G06F11/10GK102473126SQ201080035855
公開(kāi)日2012年5月23日 申請(qǐng)日期2010年8月6日 優(yōu)先權(quán)日2009年8月11日
發(fā)明者R.D.塞林格 申請(qǐng)人:桑迪士克科技股份有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1