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

確定固態(tài)存儲介質(zhì)配置參數(shù)的裝置、系統(tǒng)和方法

文檔序號:6373601閱讀:218來源:國知局
專利名稱:確定固態(tài)存儲介質(zhì)配置參數(shù)的裝置、系統(tǒng)和方法
技術(shù)領(lǐng)域
本文所公開的主題涉及固態(tài)存儲介質(zhì),更具體地講涉及固態(tài)存儲介質(zhì)的配置參數(shù)。
背景技術(shù)
_4] 相關(guān)領(lǐng)域的i兌明多個固態(tài)存儲設(shè)備區(qū)分不同的二進制值,存儲單元存儲數(shù)值可基于存儲單元的讀取電壓電平、基于存儲單元的電阻率或基于存儲單元的另一個配置參數(shù)。固態(tài)存儲設(shè)備可使用一個或多個讀取電壓閾值、電阻率閾值等以間隔開可存儲在存儲單元中的離散值。然而存儲單元的閾值或其他配置參數(shù)會隨時間的推移而變化。例如,存儲單元損壞、存儲單元泄漏、溫度和其他對存儲單元的干擾會改變存儲單元的閾值,使得不同的配置參數(shù)對存儲單元來說會更佳。泄漏率和其他干擾也會隨著存儲單元的超時使用出現(xiàn)老化而增大。如果存儲單元的讀取電壓電平或其他配置參數(shù)改變至超過存儲單元的閾值,則會發(fā)生數(shù)據(jù)錯誤,這是由于從存儲單元讀取的數(shù)據(jù)值不同于寫入存儲單元的數(shù)據(jù)值。

發(fā)明內(nèi)容
從上述討論中,顯而易見的是存在對提高固態(tài)存儲介質(zhì)實用性的裝置、系統(tǒng)和方法的需求。有利的是,通過確定固態(tài)存儲介質(zhì)的一個或多個配置參數(shù)以最優(yōu)化該配置參數(shù),此類裝置、系統(tǒng)和方法能夠提高固態(tài)存儲介質(zhì)的實用性。本發(fā)明為應對當前技術(shù)水平且尤其是為應對本領(lǐng)域中現(xiàn)有固態(tài)存儲設(shè)備尚未完全解決的問題和需求而開發(fā)。因此,開發(fā)本發(fā)明的目的是提供能提高固態(tài)存儲介質(zhì)的實用性以克服在本領(lǐng)域中多個或全部上述不足的裝置、系統(tǒng)和方法。本發(fā)明提出一種提高固態(tài)存儲介質(zhì)實用性的方法。在一個實施例中,該方法包括為固態(tài)存儲介質(zhì)的一組存儲單元引用一個或多個存儲介質(zhì)特性。在另一個實施例中,該方法包括基于一個或多個存儲介質(zhì)特性,為一組存儲單元確定配置參數(shù)。在另一個實施例中,該方法包括用確定的配置參數(shù)配置該組存儲單元。在一個實施例中,該方法包括為響應更新事件而更新該組存儲單元的一個或多個存儲介質(zhì)特性。在另一個實施例中,該更新事件包括對包含該組存儲單元的固態(tài)存儲介質(zhì)的后臺掃描。在另一個實施例中,該更新事件包括對該組存儲單元的讀取請求。在另外的一個實施例中,該更新事件可包括對該組存儲單元的相鄰存儲單元的讀取請求。在另一個實施例中,該更新事件包括對具有該組存儲單元的設(shè)備的啟動操作。在另一個實施例中,該更新事件包括對具有該組存儲單元的設(shè)備的關(guān)機操作。在另一個實施例中,該更新事件包括對該組存儲·單元的垃圾收集操作。在一個實施例中,該方法包括響應于一個或多個存儲介質(zhì)特性的改變而更新該組存儲單元的配置參數(shù)。在另一個實施例中,該方法包括為固態(tài)存儲介質(zhì)的多個不同組存儲單元確定多個額外的配置參數(shù)。在一個實施例中,多個額外的配置參數(shù)基于多個不同組存儲單元的存儲介質(zhì)特性。在另一個實施例中,該方法包括配置多個不同組的存儲單元以使用多個額外的配置參數(shù)。在一個實施例中,該配置參數(shù)包括可通過接口更改的該組存儲單元的參數(shù)。在另一個實施例中,該配置參數(shù)包括讀取電壓。在另一個實施例中,該配置參數(shù)包括遞增步長脈沖編程操作的步長量級。在不同的實施例中,該配置參數(shù)包括遞增步長脈沖編程操作的最大迭代次數(shù)。在另外一個實施例中,該配置參數(shù)包括編程操作的程序驗證閾值。在另一個實施例中,該配置參數(shù)包括遞增步長脈沖編程操作的初始偏置。在另一個實施例中,該配置參數(shù)包括遞增步長脈沖擦除操作的步長量級。在另一個實施例中,該配置參數(shù)包括遞增步長脈沖擦除操作的最大迭代次數(shù)。在另一個實施例中,該配置參數(shù)包括擦除操作的擦除驗證閾值。在另一個實施例中,該配置參數(shù)包括遞增步長脈沖擦除操作的初始偏置。在一個實施例中,配置該組存儲單元以使用所確定的配置參數(shù)是響應于觸發(fā)。在另一個實施例中,該觸發(fā)包括一個或多個存儲介質(zhì)特性的改變。在另一個實施例中,該觸發(fā)包括對該組存儲單元的讀取請求。在另外一個實施例中,該觸發(fā)包括對具有該組存儲單元的設(shè)備的啟動操作。在另一個實施例中,該觸發(fā)包括對具有該組存儲單元的設(shè)備的定期關(guān)機操作。在一個實施例中,該存儲介質(zhì)特性包括該組存儲單元的編程/擦除循環(huán)計數(shù)。在另一個實施例中,該存儲介質(zhì)特性包括該組存儲單元的讀取計數(shù)。在另一個實施例中,該存儲介質(zhì)特性包括自從該組存儲單元的前一次寫入以來的保持時間。在另外一個實施例中,該存儲介質(zhì)特性包括該組存儲單元的溫度。在某一個實施例中,該存儲介質(zhì)特性包括該組存儲單元的用例。在另一個實施例中,該存儲介質(zhì)特性包括該組存儲單元的錯誤統(tǒng)計。在一個實施例中,所確定的配置參數(shù)基于目標組存儲單元。在另一個實施例中,該目標組存儲單元具有受控使用的特性。在另一個實施例中,該組存儲單元的確定的配置參數(shù)基于目標組存儲單元的確定的配置參數(shù)。在另一個實施例中,該組存儲單元的確定的配置參數(shù)基于該目標組存儲單元的一個或多個存儲介質(zhì)特性。
在一個實施例中,確定該組存儲單元的配置參數(shù)包括將該組存儲單元的一個或多個存儲介質(zhì)特性與該目標組存儲單元的一個或多個存儲介質(zhì)特性比較。在另一個實施例中,該方法包括基于在該組存儲單元的至少一個存儲介質(zhì)特性和該目標組存儲單元的至少一個存儲介質(zhì)特性之間的差異確定該組存儲單元的配置參數(shù)。提高固態(tài)存儲介質(zhì)實用性的裝置設(shè)有多個模塊,這些模塊被配置為在功能上執(zhí)行用以提高固態(tài)存儲介質(zhì)實用性的必要步驟。在所述的實施例中,這些模塊包括介質(zhì)特性模塊、配置參數(shù)模塊、存儲單元配置模塊、特性更新模塊和配置更新模塊。在一個實施例中,介質(zhì)特性模塊為固態(tài)存儲介質(zhì)的一組存儲單元引用一個或多個存儲介質(zhì)特性。在一個實施例中,該配置參數(shù)模塊基于一個或多個存儲介質(zhì)特性確定該組存儲單元的配置參數(shù)。在另一個實施例中,該存儲單元配置模塊配置該組存儲單元以使用所確定的配置參數(shù)。
在一個實施例中,該特性更新模塊響應于更新事件而更新該組存儲單元的一個或多個存儲介質(zhì)特性。在另一個實施例中,該配置更新模塊響應于一個或多個存儲介質(zhì)特性的改變而更新該組存儲單元的配置參數(shù)。在一個實施例中,該介質(zhì)特性模塊保持在存儲介質(zhì)特性庫中的該組存儲單元的一個或多個存儲介質(zhì)特性。在另一個實施例中,該存儲介質(zhì)特性庫包括固態(tài)存儲介質(zhì)的多個不同組存儲單元的存儲介質(zhì)特性。在一個實施例中,該配置參數(shù)模塊維護在配置參數(shù)庫中的該組存儲單元的確定的配置參數(shù)。在一個實施例中,該配置參數(shù)庫包括固態(tài)存儲介質(zhì)的多個不同組存儲單元的配置參數(shù)。在一個實施例中,該存儲介質(zhì)特性包括該組存儲單元的編程/擦除循環(huán)計數(shù)。在另一個實施例中,該存儲介質(zhì)特性包括該組存儲單元的讀取計數(shù)。在另一個實施例中,該存儲介質(zhì)特性包括從該組存儲單元的前一次寫入以來的保持時間。在另一個實施例中,該存儲介質(zhì)特性包括該組存儲單元的溫度。在另一個實施例中,該存儲介質(zhì)特性包括該組存儲單元的用例。在一個實施例中,該存儲介質(zhì)特性包括該組存儲單元的錯誤統(tǒng)計。還示出了本發(fā)明的系統(tǒng)以提高固態(tài)存儲介質(zhì)的實用性。該系統(tǒng)可具體呈現(xiàn)為包括固態(tài)存儲介質(zhì)的固態(tài)存儲設(shè)備。在某些實施例中,該系統(tǒng)包括介質(zhì)特性模塊、配置參數(shù)模塊和存儲單元配置模塊。在一個實施例中,介質(zhì)特性模塊為該組固態(tài)存儲介質(zhì)的存儲單元引用一個或多個存儲介質(zhì)特性。在另一個實施例中,該配置參數(shù)模塊基于一個或多個存儲介質(zhì)特性確定該組存儲單元的配置參數(shù)。在一個實施例中,該存儲單元配置模塊配置該組存儲單元以使用所確定的配置參數(shù)。在一個實施例中,該系統(tǒng)包括與固態(tài)存儲設(shè)備通信的主機設(shè)備。在另一個實施例中,至少有部分介質(zhì)特性模塊、配置參數(shù)模塊和/或存儲單元配置模塊為安裝在主機設(shè)備上的固態(tài)存儲設(shè)備的設(shè)備驅(qū)動器的一部分。在本說明書中對特征、優(yōu)點或類似語句的引用并不意味著所有特征和優(yōu)點可在任何單一實施例中實現(xiàn)。相反,涉及特征和優(yōu)點的語句應理解為表示特定的特征、優(yōu)點或包括在至少一個實施例中的特性。因而,在本說明書中的關(guān)于特征和優(yōu)點的討論和類似語句可以(但不一定)涉及相同的實施例。
此外,實施例的所述特征、優(yōu)點和特性可以任何合適的方式結(jié)合。相關(guān)領(lǐng)域的技術(shù)人員應認識到這些實施例可在沒有具體實施例的一個或多個特定特征或優(yōu)點的情況下實施。在其他情況下,應認識到某些實施例中額外的特征和優(yōu)點并不存在于所有實施例中。根據(jù)以下的說明和所附的權(quán)利要求書,實施例的這些特征和優(yōu)點將變得顯而易見,或可通過下文所述的實施例的實施進行了解。


為了本發(fā)明的優(yōu)點易于理解,通過參考引用在附圖中所示的具體實施例來更具體地說明本發(fā)明。應理解這些附圖僅示出了本發(fā)明的典型實施例而不該視為對其范圍的限制,通過使用附圖將更為具體詳盡地描述和闡明本發(fā)明,其中圖I為根據(jù)本發(fā)明示出的提高固態(tài)存儲介質(zhì)實用性的系統(tǒng)的一個實施例的示意框圖;圖2為根據(jù)本發(fā)明示出的固態(tài)存儲介質(zhì)的固態(tài)存儲設(shè)備控制器的一個實施例的 示意框圖;圖3A為根據(jù)本發(fā)明示出的具有用于固態(tài)存儲介質(zhì)的寫入數(shù)據(jù)通道和讀取數(shù)據(jù)通道的固態(tài)存儲控制器的一個實施例的示意框圖;圖3B為根據(jù)本發(fā)明示出的固態(tài)存儲控制器的另一個實施例的示意框圖;圖4為根據(jù)本發(fā)明示出的配置模塊的一個實施例的示意框圖;圖5為根據(jù)本發(fā)明示出的主動配置模塊的一個實施例的示意框圖;圖6A為根據(jù)本發(fā)明示出的固態(tài)存儲介質(zhì)的存儲元件陣列的一個實施例的示意框圖;圖6B為根據(jù)本發(fā)明示出的固態(tài)存儲介質(zhì)的存儲元件陣列的另一個實施例的示意框圖;圖6C為根據(jù)本發(fā)明示出的用于固態(tài)存儲介質(zhì)的一組多級存儲單元的配置參數(shù)的一個實施例的不意框圖;圖6D為根據(jù)本發(fā)明示出的用于固態(tài)存儲介質(zhì)的一組多級存儲單元的調(diào)整后配置參數(shù)的一個實施例的示意框圖;圖7A為根據(jù)本發(fā)明示出的介質(zhì)特性模塊和存儲介質(zhì)特性庫的一個實施例的示意框圖;圖7B為根據(jù)本發(fā)明示出的存儲介質(zhì)特性庫的一個實施例的示意框圖;圖8A為根據(jù)本發(fā)明示出的配置參數(shù)模塊和配置參數(shù)庫的一個實施例的示意框圖;圖SB為根據(jù)本發(fā)明示出的配置參數(shù)庫的一個實施例的示意框圖;圖9為根據(jù)本發(fā)明示出的為提高固態(tài)存儲介質(zhì)的實用性的方法的一個實施例的示意性流程圖;以及圖10為根據(jù)本發(fā)明示出的為提高固態(tài)存儲介質(zhì)的實用性的方法的另一個實施例的示意性流程圖。
具體實施方式
為了更具體地強調(diào)實施獨立性,將在本說明書中描述的多個功能單元稱作模塊。例如,模塊可實現(xiàn)為硬件電路,其包括定制的VLSI電路或門陣列,成品的半導體,例如邏輯芯片、晶體管或其他離散元件。模塊還可應用在可編程硬件設(shè)備中,例如現(xiàn)場可編程門陣列、可編程陣列邏輯、可編程邏輯器件等。模塊還可用在軟件中以供各種類型的處理器執(zhí)行。例如,可執(zhí)行代碼的標識模塊包括計算機指令的一個或多個物理或邏輯塊,該計算機指令可組織為對象、過程或功能。然而,標識模塊的可執(zhí)行文件不必物理上位于一起,但是可包括存儲在不同位置的完全不同的指令,當在邏輯上連接在一起時,這些指令構(gòu)成模塊并實現(xiàn)模塊的規(guī)定目標。實際上,可執(zhí)行代碼模塊可為單一指令或多個指令,且甚至可分布在若干不同代碼段上,分布在不同程序中和多個存儲設(shè)備上。相似地,在此,操作數(shù)據(jù)可在模塊內(nèi)標識和說明,且可被具體化為任何合適的形式,并被組織在任何適當類型的數(shù)據(jù)結(jié)構(gòu)中。操作數(shù)據(jù)可收集為單個數(shù)據(jù)集,或分布在不同位置上(包括在不同的存儲設(shè)備上),且操作數(shù)據(jù)可全部,或至少部分的,僅作為系統(tǒng)或網(wǎng)絡上的電信號存在。當模塊或模塊的部分在軟件中實現(xiàn)的情況下,該軟件部分存儲在一個或多個計算機可讀的介質(zhì)上?!ぴ谡麄€本說明書中所提到的“一個實施例”、“一實施例”或類似語句意為結(jié)合該實施例所述的具體特征、結(jié)構(gòu)或特性包括在本發(fā)明的至少一個實施例中。因而在整個本說明書中,短語“在一個實施例中”、“在一實施例中”和類似語句的出現(xiàn)可(但不一定)全部指同一實施例。計算機可讀介質(zhì)的引用,可采用能將機器可讀指令存儲在數(shù)字處理裝置的存儲設(shè)備上的任何形式。計算機可讀介質(zhì)可具體呈現(xiàn)為⑶光盤、DVD光盤、磁帶、貝努里驅(qū)動器、磁盤、穿孔卡、閃存、集成電路或其他數(shù)字處理裝置存儲設(shè)備。 此外,本發(fā)明所述的特征、結(jié)構(gòu)或特性可在一個或多個實施例中以任何合適的方式結(jié)合。在以下的說明中,提供了許多具體細節(jié),例如編程例子、軟件模塊、用戶選擇、網(wǎng)絡事務處理、數(shù)據(jù)庫查詢、數(shù)據(jù)庫結(jié)構(gòu)、硬件模塊、硬件電路、硬件芯片等以便于徹底理解本發(fā)明的實施例。然而,相關(guān)領(lǐng)域的技術(shù)人員應該認識到本發(fā)明可在沒有一個或多個具體細節(jié),或在用其他方法、元件、材料等的情況下實施。在其他情況下,眾所周知的結(jié)構(gòu)、材料或操作沒有被詳細地展示或描述,以避免使本發(fā)明各方面含混不清。包括在本文中的示意性流程圖通常闡述為為邏輯流程圖。同樣地,描述的順序和標識的步驟表示所提供方法的一個實施例??稍O(shè)想與所述方法的一個或多個步驟或其部分在功能、邏輯或作用上等同的其他步驟和方法。另外,所用的格式和符號是用來解釋方法的邏輯步驟,不應理解為對方法范圍的限制。雖然在流程圖中可使用各種箭頭類型和線條類型,但是它們不應理解為是對該相應方法范圍的限制。實際上,可使用一些箭頭或其他連接頭來表示方法的邏輯流程。例如,箭頭可用來表示在所述方法所列舉的步驟之間,未指定持續(xù)時間的等待或監(jiān)控周期。另外,具體方法所進行的順序可以嚴格遵循也可以不嚴格遵循所示的相應步驟的順序。固杰存儲系統(tǒng)圖I所示為根據(jù)本發(fā)明提出的為提高固態(tài)存儲介質(zhì)110的實用性的系統(tǒng)100的一個實施例的示意性框圖。該系統(tǒng)100包括了如下所述的固態(tài)存儲設(shè)備102、固態(tài)存儲控制器104、寫入數(shù)據(jù)流水線106、讀取數(shù)據(jù)流水線108、固態(tài)存儲介質(zhì)110、計算機112、客戶端114和計算機網(wǎng)絡116。該系統(tǒng)100包括至少一個固態(tài)存儲設(shè)備102。在其他實施例中,該系統(tǒng)100包括兩個或更多個固態(tài)存儲設(shè)備102。每個固態(tài)存儲設(shè)備102可包括非易失性固態(tài)存儲介質(zhì)110,例如閃存、納米隨機存取存儲器(“納米RAM或NRAM”)、磁阻RAM ( “MRAM”)、動態(tài)RAM ( “DRAM”)、相變RAM ( “PRAM”)、賽道存儲器、憶阻器存儲器、基于納米晶體導線的存儲器、基于氧化硅的低于10納米尺度的過程存儲器、石墨烯存儲器、硅氧化氮氧化硅(“S0N0S”)存儲器、電阻式隨機存取存儲器(“RRAM”)、可編程金屬化單元(“PMC”)、導電橋接RAM( “CBRAM”)等。圖2、3A和3B,對固態(tài)存儲設(shè)備102進行了更詳細描述。固態(tài)存儲設(shè)備102示出在計算機112中,該計算機114通過計算機網(wǎng)絡116連接了一個或多個客戶端。在一個實施例中,固態(tài)存儲設(shè)備102位于計算機112的內(nèi)部,并通過系統(tǒng)通信總線(諸如快捷外圍組件互連(“PCI-e”)總線、串行高級技術(shù)附件(“串行ΑΤΑ”)總線等)連接。在另一個實施例中,固態(tài)存儲設(shè)備102位于計算機112的外部并用外部通信總線(諸如通用串行總線(“USB”)、電氣與電子工程師協(xié)會(“IEEE”)1394總線(“火線”)等)連接。在其他實施例中,固態(tài)存儲設(shè)備102通過使用通信總線(諸如外圍組件互 連(“PCI”)快捷總線)、外部電氣或光學總線擴展或總線網(wǎng)絡解決方案(諸如Infiniband或 PCI Express Advanced Switching ( “PCIe-AS”)等)連接到計算機 112。在各種實施例中,固態(tài)存儲設(shè)備102可以是雙列直插式存儲模塊(“DI麗”)、子卡或微模塊的形式。在另一個實施例中,固態(tài)存儲設(shè)備102為機架固定式刀片中的元件。在另一個實施例中,固態(tài)存儲設(shè)備102包含在組件中,該組件直接集成到更高級別部件(例如,母板、筆記本電腦、圖形處理器)上。在另一個實施例中,包含固態(tài)存儲設(shè)備102的獨立組件在沒有中間組件的情況下直接集成到更高級別部件上。固態(tài)存儲設(shè)備102包括一個或多個固態(tài)存儲控制器104,每個固態(tài)存儲控制器可包括寫入數(shù)據(jù)通道106和讀取數(shù)據(jù)通道108,且每個固態(tài)存儲控制器包括固態(tài)存儲介質(zhì)110,下文相對于圖2、3A和3B對其進行了更詳細描述。通常,該一個或多個固態(tài)存儲控制器104管理固態(tài)存儲介質(zhì)110,包括確定固態(tài)存儲介質(zhì)110的存儲單元的配置參數(shù),以及根據(jù)該配置參數(shù)配置存儲單元。如本文所用,用于一組存儲單元的配置參數(shù)為可通過接口修改的參數(shù)。該接口可包括眾所周知的接口或?qū)S薪涌诓⒖砂ㄊ褂锰囟钪噶詈?或使用特定參數(shù)、寄存器設(shè)置、驅(qū)動器設(shè)置、控制器設(shè)置、一組特定命令指令順序或其他不同于通常命令(通用命令)的命令或用來與該組存儲單元相接合或管理該組存儲單元的設(shè)置。配置參數(shù)可涉及寫入或編程存儲單元、從存儲單元讀取、擦除存儲單元、管理存儲單元、設(shè)備驅(qū)動器或存儲單元的存儲控制器設(shè)置等。一組存儲單元的配置參數(shù)可與固態(tài)存儲設(shè)備102的設(shè)備驅(qū)動器和固態(tài)存儲控制器104等有關(guān),且可涉及設(shè)備驅(qū)動器和/或固態(tài)存儲控制器104如何使用、控制和與該組存儲單元和/或固態(tài)存儲介質(zhì)110交互。在某些實施例中,配置參數(shù)可包括一個或多個閾值,例如讀取電壓閾值、電阻率閾值、編程閾值、擦除閾值、硬件驅(qū)動器電平閾值、存儲控制器電平閾值等。在固態(tài)存儲介質(zhì)110初始化期間可動態(tài)地隨著發(fā)給固態(tài)存儲介質(zhì)110的每個命令設(shè)定配置參數(shù)一次,或者在固態(tài)存儲介質(zhì)110的運行期間響應于觸發(fā)(諸如事件或時間間隔)設(shè)定配置參數(shù)一次。在一個實施例中,固態(tài)存儲控制器104主動地為固態(tài)存儲介質(zhì)110的存儲單元設(shè)置一個或多個配置參數(shù)以提高固態(tài)存儲介質(zhì)110的實用性和減少錯誤等。系統(tǒng)100包括連接到固態(tài)存儲設(shè)備102的一個或多個計算機112。計算機112可以是主機、服務器、存儲區(qū)域網(wǎng)(“SAN”)的存儲控制器、工作站、個人計算機、膝上型計算機、手持式計算機、巨型計算機、計算機集群、網(wǎng)路交換器、路由器或設(shè)備、數(shù)據(jù)庫或存儲設(shè)備、數(shù)據(jù)采集或數(shù)據(jù)捕獲系統(tǒng)、診斷系統(tǒng)、測試系統(tǒng)、機器人、便攜式電子設(shè)備、無線設(shè)備等。在另一個實施例中,計算機112可以是客戶端,且固態(tài)存儲設(shè)備102自主運行以服務于計算機112發(fā)出的數(shù)據(jù)請求。在該實施例中,計算機112和固態(tài)存儲設(shè)備102可通過計算機網(wǎng)絡、系統(tǒng)總線或其他適于在計算機112和自主固態(tài)存儲設(shè)備102間連接的通信方法連接。在一個實施例中,系統(tǒng)100包括通過一個或多個計算機網(wǎng)絡116連接到一個或多個計算機112的一個或多個客戶端114??蛻舳?14可以是主機、服務器、SAN的存儲控制器、工作站、個人計算機、膝上型計算機、手持式計算機、巨型計算機、計算機集群、網(wǎng)路交換器、路由器或設(shè)備、數(shù)據(jù)庫或存儲設(shè)備、數(shù)據(jù)采集或數(shù)據(jù)捕獲系統(tǒng)、診斷系統(tǒng)、測試系統(tǒng)、機器人、便攜式電子設(shè)備、無線設(shè)備等。計算機網(wǎng)絡116可包括因特網(wǎng)、廣域網(wǎng)(“WAN”)、城 域網(wǎng)(“MAN”)、局域網(wǎng)(“LAN”)、令牌環(huán)、無線網(wǎng)絡、光纖通道網(wǎng)絡、SAN、網(wǎng)絡連接存儲(“NAS”)、ESC0N等或任何網(wǎng)絡的組合。計算機網(wǎng)絡116還可包括來自IEEE 802族的網(wǎng)絡技術(shù),例如以太網(wǎng)、令牌環(huán)、WiFi、WiMax等。計算機網(wǎng)絡116可包括服務器、交換器、路由器、布線、無線電設(shè)備和其他便于網(wǎng)絡連接計算機112和客戶端114的設(shè)備。在一個實施例中,系統(tǒng)100包括在計算機網(wǎng)絡116上作為節(jié)點通信的多臺計算機112。在另一個實施例中,系統(tǒng)100包括在計算機網(wǎng)絡116上作為節(jié)點通信的多個固態(tài)存儲設(shè)備102。本領(lǐng)域的技術(shù)人員應該認識到其他計算機網(wǎng)絡116包含了一個或多個計算機網(wǎng)絡116以及在一個或多個客戶端114間具有單個或冗余連接的相關(guān)設(shè)備、或具有一個或多個固態(tài)存儲設(shè)備102的其他計算機、或連接到一個或多個計算機112的一個或多個固態(tài)存儲設(shè)備102。在一個實施例中,系統(tǒng)100包括通過計算機網(wǎng)絡116連接到客戶端114的兩個或更多個固態(tài)存儲設(shè)備102但不包括計算機112。在某些實施例中,固態(tài)存儲控制器104從計算機112的處理器和/或從客戶端114經(jīng)上述的一個或多個通信總線接收存儲在固態(tài)存儲介質(zhì)110中的源數(shù)據(jù)。
_4] 固態(tài)存儲設(shè)備圖2為根據(jù)本發(fā)明提出的在固態(tài)存儲設(shè)備102中包含了寫入數(shù)據(jù)通道106和讀取數(shù)據(jù)通道108的固態(tài)存儲設(shè)備控制器202的一個實施例200的示意性框圖。固態(tài)存儲設(shè)備控制器202可具體呈現(xiàn)為硬件、軟件或硬件和軟件的組合。固態(tài)存儲設(shè)備控制器202可包括多個固態(tài)存儲控制器O-N 104a-n,每個固態(tài)存儲控制器控制固態(tài)存儲介質(zhì)110。在所示的實施例中,示出了兩個固態(tài)控制器固態(tài)控制器0104a和固態(tài)存儲控制器N 104η,且每個均控制固態(tài)存儲介質(zhì)110a-n。在所示的實施例中,固態(tài)存儲控制器O 104η控制數(shù)據(jù)通道使得相連的固態(tài)存儲介質(zhì)IlOa存儲數(shù)據(jù)。固態(tài)存儲控制器N 104η控制與所存儲數(shù)據(jù)相關(guān)的索引元數(shù)據(jù)通道,并且相關(guān)的固態(tài)存儲介質(zhì)IlOn存儲索引元數(shù)據(jù)。在替代實施例中,固態(tài)存儲設(shè)備控制器202包含具有單個固態(tài)存儲介質(zhì)IlOa的單個固態(tài)控制器104a。在另一個實施例中,有多個固態(tài)存儲控制器104a-n和相關(guān)的固態(tài)存儲介質(zhì)110a_n。在一個實施例中,連接到相關(guān)固態(tài)存儲介質(zhì)IlOa-IlOn-I的一個或多個固態(tài)控制器104a-104n_l控制數(shù)據(jù),而連接到相關(guān)固態(tài)存儲介質(zhì)IlOn的至少一個固態(tài)存儲控制器104η控制索引元數(shù)據(jù)。
在一個實施例中,至少一個固態(tài)控制器104包含現(xiàn)場可編程門陣列(“FPGA”)且控制器功能被編程到FPGA中。在一個具體實施例中,F(xiàn)PGA為Xilinx FPGA。在另一個實施例中,固態(tài)存儲控制器104包含特別設(shè)計為固態(tài)存儲控制器104的元件,例如專用集成電路(“ASIC”)或定制邏輯解決方案。每個固態(tài)存儲控制器104通常包括寫入數(shù)據(jù)流水線106和讀取數(shù)據(jù)流水線108,圖3A進行了進一步描述。在另一個實施例中,至少一個固態(tài)存儲控制器104由FPGA、ASIC和定制的邏輯組件的組合構(gòu)成。在某些實施例中,至少有部分固態(tài)存儲控制器104與在計算機112上執(zhí)行的設(shè)備驅(qū)動器的一部分集成,和/或與該設(shè)備驅(qū)動器通信等。固態(tài)存儲固態(tài)存儲介質(zhì)110是設(shè)置在內(nèi)存庫214中的非易失性固態(tài)存儲元件216、218、220的陣列。通過雙向存儲輸入/輸出(“I/O”)總線210并行訪問。在一個實施例中,該存儲I/O總線210能在任何時候單向通信。例如,當正將數(shù)據(jù)寫入固態(tài)存儲介質(zhì)110時,就不能 從固態(tài)存儲介質(zhì)110讀取數(shù)據(jù)。在另一個實施例中,數(shù)據(jù)可同時流向兩個方向。然而,在此所用的關(guān)于數(shù)據(jù)總線的雙向是指能使數(shù)據(jù)一次僅在一個方向上流動的數(shù)據(jù)通道,但是當數(shù)據(jù)在雙向數(shù)據(jù)總線上的一個方向上的流動停止時,數(shù)據(jù)可在雙向數(shù)據(jù)總線上的相反方向上流動。通常將固態(tài)存儲元件(例如SSS O. 0216a)構(gòu)造為芯片(一個或多個管芯的封裝)或電路板上的管芯。如圖所示,固態(tài)存儲元件(例如216a)獨立于或半獨立于其他固態(tài)存儲元件(例如218a)運行,即使這些元件一起封裝在芯片封裝、芯片封裝疊堆或一些其他封裝元件中。如圖所示,將一行固態(tài)存儲元件216a、216b、216m指定為內(nèi)存庫214。如圖所示,在固態(tài)存儲介質(zhì)110中的nXm個固態(tài)存儲元件216、218、220陣列中,可有“η”個內(nèi)存庫214a-n且每個內(nèi)存庫有“m”個固態(tài)存儲元件216a-m、218a-m、220a-m。當然,不同的實施例可包括不同的η和m的值。在一個實施例中,固態(tài)存儲介質(zhì)IlOa包括八個內(nèi)存庫214,每個內(nèi)存庫214中有二十個固態(tài)存儲元件216、218、220。在一個實施例中,固態(tài)存儲介質(zhì)IlOa包括八個內(nèi)存庫214,每個內(nèi)存庫214中有二十四個固態(tài)存儲元件216、218、220。除了 nXm個存儲元件216、218、220之外,一個或多個附加列(P)也可與一行或多行其他固態(tài)存儲元件216a、216b、216m并行進行尋址和操作。在一個實施例中,添加的P個列存儲部分ECC數(shù)據(jù)塊(即ECC碼字)的奇偶校驗數(shù)據(jù),該部分ECC數(shù)據(jù)塊跨越特定內(nèi)存庫的m個存儲元件。在一個實施例中,每個固態(tài)存儲元件216、218、220由單級單元(“SLC”)設(shè)備構(gòu)成。在另一個實施例中,每個固態(tài)存儲元件216、218、220由多級單元(“MLC”)設(shè)備構(gòu)成。在一個實施例中,共享公用存儲I/O總線210a(例如216b、218b、220b)的固態(tài)存儲元件被封裝在一起。在一個實施例中,固態(tài)存儲元件216、218、220的每個芯片可具有一個或多個管芯且一個或多個芯片垂直堆疊,并且每個管芯能夠被獨立訪問。在另一個實施例中,固態(tài)存儲元件(例如SSS O. 0216a)的每個管芯可具有一個或多個虛擬管芯,每個芯片可具有一個或多個管芯且一個或多個芯片垂直堆疊,每個虛擬管芯可被獨立訪問。在另一個實施例中,固態(tài)存儲元件SSS O. 0216a的每個管芯可具有一個或多個虛擬管芯,每個芯片可具有一個或多個管芯,一個或多個管芯的部分或全部垂直堆疊,并且每個虛擬管芯可被獨立訪問。在一個實施例中,兩個管芯垂直堆疊,每組四個疊堆以形成八個存儲元件(例如SSS O. O-SSS 8. 0)216a-220a,每個位于單獨的內(nèi)存庫214a-n中。在另一個實施例中,24個存儲元件(例如SSS O. O-SSS O. 24)216形成邏輯內(nèi)存庫214a,使得八個邏輯內(nèi)存庫中的每一個具有24個存儲元件(例如SSS O. O-SSS 8. 24)216、218、220。數(shù)據(jù)發(fā)送到固態(tài)存儲介質(zhì)110,經(jīng)存儲I/O總線210發(fā)送至一組特定存儲元件(SSS O. O-SSS 8. O) 216a,218a,220a的所有存儲元件。存儲控制總線212a用于選擇特定內(nèi)存庫(例如內(nèi)存庫0214a),使得經(jīng)連接到所有內(nèi)存庫214的存儲I/O總線210接收到的數(shù)據(jù)正好寫入所選的內(nèi)存庫214a中。在某些實施例中,存儲控制總線212和存儲I/O總線210被固態(tài)控制器104 —同用來傳送尋址信息、存儲元件命令信息和待存儲的數(shù)據(jù)。本領(lǐng)域的技術(shù)人員應該認識到該地址、數(shù)據(jù)和命令信息可通過使用這些總線212、210中的一個或另一個傳送,或每類控制信息使用單獨總線傳送。在一個實施例中,尋址信息、存儲元件命令信息和存儲數(shù)據(jù)在存儲I/O總線210上傳送。存儲控制總線212傳輸信號以激活內(nèi)存庫并確定在存儲I/O總線210線路上的數(shù)據(jù)是否構(gòu)成尋址信息、存儲元件命令信息或存儲數(shù)據(jù)。例如,在存儲控制總線212上的控制信號(例如“命令使能”)可表示在存儲I/O總線210線路上的數(shù)據(jù)為存儲元件命令,例如編程、擦除、重置、讀取等。在存儲控制總線212·上的控制信號(例如“地址使能”)可表明在存儲I/O總線210線路上的數(shù)據(jù)為尋址信息,例如擦除塊標識符、頁標識符以及可選的在特定存儲元件中的頁內(nèi)偏移量。最后,在存儲控制總線212上沒有“命令使能”和“地址使能”這兩個控制信號,則可表示在存儲I/O總線210線路上的數(shù)據(jù)為存儲數(shù)據(jù),該存儲數(shù)據(jù)將被存儲在先前定址的擦除塊、物理頁的存儲元件上,并可選擇特定存儲元件的頁內(nèi)偏移量。在一個實施例中,存儲I/O總線210包含一個或多個獨立的I/O總線(“II0Ba_m”包含210a. a-m,210n. a_m),每列中的固態(tài)存儲元件共享其中一個獨立的I/O總線,并行訪問每個固態(tài)存儲元件216、218、220,這樣使得全部的內(nèi)存庫214被同時訪問。例如,存儲I/O總線210的一個通道可同時訪問每個內(nèi)存庫214a-n的第一個固態(tài)存儲元件216a、218a、220a。存儲I/O總線210的第二個通道可同時訪問每個內(nèi)存庫214a_n的第二個固態(tài)存儲元件216b、218b、220b。固態(tài)存儲元件216a、216b、216m的每行被同時訪問。在固態(tài)存儲元件216、218、220為多級(物理上堆疊)的一個實施例中,固態(tài)存儲元件216、218、220的所有物理級被同時訪問。如本文所用的“同時”還包括近乎同時訪問,以略微不同的間隔訪問設(shè)備以避免開關(guān)噪聲?!巴瑫r”應用在此上下文中以區(qū)別于命令和/或數(shù)據(jù)一個接一個地單獨傳送的順序存取或串行存取。通常,使用存儲控制總線212獨立地選擇內(nèi)存庫214a_n。在一個實施例中,使用芯片使能或芯片選擇來選擇內(nèi)存庫214。在芯片選擇和芯片使能均可用的情況下,存儲控制總線212可選擇多級固態(tài)存儲元件216、218、220中的一級。在其他實施例中,存儲控制總線212使用其他命令以單獨選擇多級固態(tài)存儲元件216、218、220中的一級。還可通過在存儲I/O總線210和存儲控制總線212上傳輸?shù)目刂菩畔⒑偷刂沸畔⒌慕M合來選擇固態(tài)存儲元件 216、218、220。在一個實施例中,每個固態(tài)存儲元件216、218、220被分為擦除塊且每個擦除塊被分為頁。在固態(tài)存儲元件216、218、220上的擦除塊可稱為物理擦除塊或“PEB”。典型的頁為2000字節(jié)(“2kB”)。在一個實施例中,固態(tài)存儲元件(例如SSS O. O)包括兩個寄存器,可將兩個頁編程,使得兩寄存器固態(tài)存儲元件216、218、220具有4kB的容量。于是20個固態(tài)存儲元件216a、216b、216m的內(nèi)存庫214將具有80kB的頁容量,這些頁以離開存儲I/O總線210的通道的相同地址訪問。該組容量為80kB的固態(tài)存儲元件216a、216b、216m內(nèi)存庫214中的頁,可稱為邏輯頁或虛擬頁。類似地,可將內(nèi)存庫214a的每個存儲元件216a-m的擦除塊分組以形成邏輯擦除塊或虛擬擦除塊。在一個實施例中,當固態(tài)存儲元件216、218、220接收到擦除命令時,擦除在固態(tài)存儲元件216、218、220內(nèi)的頁的擦除塊。盡管在固態(tài)存儲元件216、218、220內(nèi)的擦除塊、頁、平面或其他邏輯和物理分區(qū)的大小和數(shù)量預計會隨技術(shù)的進步逐漸變化,但預計符合新配置的多個實施例有可能存在且符合本文的總體描述。通常,當數(shù)據(jù)包被寫入固態(tài)存儲元件216、218、220內(nèi)的特定位置時(其中該數(shù)據(jù)包旨在被寫入特定頁內(nèi)的某一位置并且該頁是特定內(nèi)存庫的特定存儲元件的特定物理擦除塊所特有的),在存儲I/O總線210上會先發(fā)送物理地址,然后發(fā)送該數(shù)據(jù)包。該物理地址包含固態(tài)存儲元件216、218、220的足夠信息以將數(shù)據(jù)包導向至頁內(nèi)的指定位置。因為存 儲I/O總線210a.a中的適當?shù)目偩€同時訪問存儲元件(例如SSS O. O-SSS N. 0216a、218a、220a)列中的所有存儲元件以到達恰當頁并避免將數(shù)據(jù)包寫入存儲元件(SSS O. O-SSSN. 0216a.218a.220a)列中的相似地址的頁,所以存儲控制總線212同時選擇包括具有數(shù)據(jù)包將被寫入的恰當頁的固態(tài)存儲元件SSSO. 0216a的內(nèi)存庫214a。相似地,滿足存儲I/O總線210上的讀取命令需要存儲控制總線212上的同步信號以選擇單個內(nèi)存庫214a和內(nèi)存庫214a內(nèi)的恰當頁。在一個實施例中,讀取命令讀取整個頁,且因為在內(nèi)存庫214中有并列的多個固態(tài)存儲元件216a、216b、216m,所以用讀取命令讀取整個邏輯頁。然而,讀取命令可分解為子命令,如將在下文中相對于內(nèi)存庫交錯解釋的。也可在寫入操作中訪問邏輯頁??山?jīng)存儲I/O總線210發(fā)送出擦除塊擦除命令以擦除擦除塊,該總線攜帶特定擦除塊地址以擦除特定擦除塊。通常,可經(jīng)存儲I/O總線210的并行通路發(fā)送擦除塊擦除命令以擦除邏輯擦除塊,每個通路攜帶特定擦除塊地址以擦除特定擦除塊。同時,經(jīng)存儲控制總線212選擇特定內(nèi)存庫(例如內(nèi)存庫0214a)以防止擦除在所有內(nèi)存庫(內(nèi)存庫1_N214b-n)中的相似地址的擦除塊。或者,存儲控制總線212不選擇特定的內(nèi)存庫(例如內(nèi)存庫0214a),以便同時擦除在所有內(nèi)存庫(內(nèi)存庫I-N 214b_n)中的相似地址的擦除塊。還可組合使用存儲I/O總線210和存儲控制總線212將其他命令發(fā)送到特定位置。本領(lǐng)域的技術(shù)人員應認識到有其他使用雙向存儲I/O總線210和存儲控制總線212選擇特定存儲位置的方法。在一個實施例中,數(shù)據(jù)包按順序?qū)懭牍虘B(tài)存儲介質(zhì)110中。例如,數(shù)據(jù)包流入存儲元件216的內(nèi)存庫214a的存儲寫入緩沖區(qū)中,若緩沖區(qū)已滿,則將數(shù)據(jù)包編程至指定的邏輯頁。然后數(shù)據(jù)包再次充滿存儲寫入緩沖區(qū)且當緩沖區(qū)已滿時,將數(shù)據(jù)包寫入到下一個邏輯頁。下一個邏輯頁可位于相同的內(nèi)存庫214a或另一個內(nèi)存庫(如214b)中。該過程以一個邏輯頁接一個邏輯頁地持續(xù),通常直到充滿邏輯擦除塊(“LEB”)。在另一個實施例中,隨著該過程一個邏輯擦除塊接著一個邏輯擦除塊地持續(xù),數(shù)據(jù)流可以跨過邏輯擦除塊的邊界繼續(xù)流動。在讀取、修改、寫入操作中,與被請求數(shù)據(jù)有關(guān)的數(shù)據(jù)包在讀取操作中定位和讀取。已修改的請求數(shù)據(jù)的數(shù)據(jù)段不被寫入其讀取的位置。相反,修改后的數(shù)據(jù)段被再次轉(zhuǎn)換成數(shù)據(jù)包并按順序?qū)懭氘斍氨粚懭氲倪壿嬳撝械南乱粋€可用位置。修改各數(shù)據(jù)包的索引條目以指向包含修改的數(shù)據(jù)段的數(shù)據(jù)包。與沒有被修改的相同的請求數(shù)據(jù)相關(guān)的數(shù)據(jù)包的一個或多個索引條目,包括指向未修改數(shù)據(jù)包原始位置的指針。從而,如果保持原始請求數(shù)據(jù),例如保持該請求數(shù)據(jù)的先前版本,則該原始請求數(shù)據(jù)將在索引中包含指向所有原始寫入數(shù)據(jù)包的指針。新的請求數(shù)據(jù)將具有在索引中指向一些原始數(shù)據(jù)包的指針和指向在當前正被寫入的邏輯頁中的修改后的數(shù)據(jù)包的指針。在復制操作中,該索引包括映射到存儲在固態(tài)存儲介質(zhì)110中的多個數(shù)據(jù)包的原始請求數(shù)據(jù)條目。當完成復制時,創(chuàng)建了新的請求數(shù)據(jù)副本,且在索引中創(chuàng)建了新的條目,將新的請求數(shù)據(jù)副本映射到原始數(shù)據(jù)包。新的請求數(shù)據(jù)副本被寫入到固態(tài)存儲介質(zhì)110中,而其位置被映射到索引中的新條目中。新的請求數(shù)據(jù)包副本可用來識別位于被引用的原始請求數(shù)據(jù)中的數(shù)據(jù)包,以免原始請求數(shù)據(jù)尚未傳送到,請求數(shù)據(jù)副本便已發(fā)生改變以及索引丟失或損壞。有利地,按順序?qū)懭霐?shù)據(jù)包以便于更平均使用固態(tài)存儲介質(zhì)110,使得固態(tài)存儲設(shè) 備控制器202監(jiān)控在固態(tài)存儲介質(zhì)110中的各種邏輯頁的存儲熱點和層使用情況。按順序?qū)懭霐?shù)據(jù)包還有利于強大且高效的垃圾收集系統(tǒng),其將在下文中詳細描述。本領(lǐng)域的技術(shù)人員應認識到數(shù)據(jù)包的順序存儲的其他益處。固態(tài)存儲設(shè)備控制器在多個實施例中,固態(tài)存儲設(shè)備控制器202還包括數(shù)據(jù)總線204、局部總線206、緩沖區(qū)控制器208、緩沖區(qū)O-N 222a-n、主控制器224、直接存儲器存取(“DMA”)控制器226、存儲器控制器228、動態(tài)存儲器陣列230、靜態(tài)隨機存儲器陣列232、管理控制器234、管理總線236、系統(tǒng)總線240的橋接器238和混雜邏輯242,它們將在下文中描述。在其他實施例中,系統(tǒng)總線240連接到一個或多個網(wǎng)絡接口卡(“NICs”)244,一些網(wǎng)絡接口卡可包括遠程DMA( “RDMA”)控制器246、一個或多個中央處理器(“CPU”)248、一個或多個外部存儲器控制器250和相關(guān)的外部存儲器陣列252、一個或多個存儲控制器254、節(jié)點控制器256和專用處理器258,它們將在下文中描述。連接到系統(tǒng)總線240的組件244-258可位于計算機112或其他設(shè)備中。通常固態(tài)存儲控制器104通過存儲I/O總線210將數(shù)據(jù)傳送到固態(tài)存儲介質(zhì)110。在典型實施例中,固態(tài)存儲器設(shè)置在內(nèi)存庫214中,每個內(nèi)存庫214包括并行訪問的多個存儲元件216a、216b、216m,該存儲I /0總線210為總線陣列,每條總線對應跨越內(nèi)存庫214的每列存儲元件216、218、220。如本文所用,術(shù)語“存儲I/O總線”可指一條存儲I/O總線210或數(shù)據(jù)獨立總線陣列204。在一個實施例中,每條存儲I/O總線210訪問列存儲元件(例如216a.218a.220a)的步驟可包括在列存儲元件216a、218a、220a中被訪問的存儲分區(qū)(例如擦除塊)的邏輯到物理的映射。如果第一存儲分區(qū)出現(xiàn)故障、出現(xiàn)部分故障、無法訪問或有其他問題,該映射(或壞塊重新映射)允許映射到存儲分區(qū)的物理地址的邏輯地址被重新映射到不同的存儲分區(qū)中。數(shù)據(jù)還可以從請求設(shè)備155經(jīng)系統(tǒng)總線240、橋接器238、局部總線206、緩沖區(qū)222,最后經(jīng)數(shù)據(jù)總線204傳送到固態(tài)存儲控制器104。數(shù)據(jù)總線204通常連接到由緩沖區(qū)控制器208控制的一個或多個緩沖區(qū)222a-n。該緩沖區(qū)控制器208通常控制將數(shù)據(jù)從局部總線206傳輸?shù)骄彌_區(qū)222并通過數(shù)據(jù)總線204傳輸?shù)搅魉€輸入緩沖區(qū)306和輸出緩沖區(qū)330。該緩沖區(qū)控制器208通??刂苼碜哉埱笤O(shè)備的數(shù)據(jù)怎樣能臨時存儲在緩沖區(qū)222中,然后傳輸?shù)綌?shù)據(jù)總線204上,反之亦然,以考慮不同時鐘域、防止數(shù)據(jù)沖突等。緩沖區(qū)控制器208通常結(jié)合主控制器224工作以協(xié)調(diào)數(shù)據(jù)流。當數(shù)據(jù)到達時,該數(shù)據(jù)會到達系統(tǒng)總線240并通過橋接器238傳輸?shù)骄植靠偩€206。通常,在主控制器224和緩沖區(qū)控制器208導向下,數(shù)據(jù)從局部總線206傳輸?shù)揭粋€或多個數(shù)據(jù)緩沖區(qū)222。然后,數(shù)據(jù)從緩沖區(qū)222流出至數(shù)據(jù)總線204,通過固態(tài)控制器104到達固態(tài)存儲介質(zhì)110,例如NAND閃存或其他存儲介質(zhì)。在一個實施例中,數(shù)據(jù)和隨數(shù)據(jù)到達的相關(guān)的帶外元數(shù)據(jù)(“元數(shù)據(jù)”)通過包含一個或多個固態(tài)存儲控制器104a-104n-l及相關(guān)固態(tài)存儲介質(zhì)IlOa-IlOn-I在內(nèi)的一個或多個數(shù)據(jù)通道傳送,而至少一個通道(固態(tài)存儲控制器104η、固態(tài)存儲介質(zhì)IlOn)專用于帶內(nèi)元數(shù)據(jù),例如索引信息和固態(tài)存儲設(shè)備102內(nèi)部生成的其他元數(shù)據(jù)。該局部總線206通常為雙向總線或總線組,其使得數(shù)據(jù)和命令在內(nèi)部設(shè)備與固態(tài) 存儲設(shè)備控制器202之間、內(nèi)部設(shè)備與固態(tài)存儲設(shè)備102及連接到系統(tǒng)總線240的設(shè)備244-258之間傳輸。橋接器238便于局部總線206和系統(tǒng)總線240間的通信。本領(lǐng)域的技術(shù)人員應該認識到存在其他實施例,例如總線240、206、204、210和橋接器238的環(huán)結(jié)構(gòu)或交換星形配置和功能。系統(tǒng)總線240通常為其中安裝或連接有固態(tài)存儲設(shè)備102的計算機112或其他設(shè)備的總線。在一個實施例中,系統(tǒng)總線240可為PCI-e總線、串行高級技術(shù)附件(“串行ΑΤΑ”)總線、并行ATA等。在另一個實施例中,系統(tǒng)總線240為外部總線,例如小型計算機系統(tǒng)接口( “SCSI”)、火線、光纖通道、USB、PCIe-AS等。該固態(tài)存儲設(shè)備102可以被封裝以適應內(nèi)部設(shè)備或作為外部連接設(shè)備。該固態(tài)存儲設(shè)備控制器202包括在固態(tài)存儲設(shè)備102內(nèi)控制更高級功能的主控制器224。在多個實施例中,該主控制器224通過解析對象請求和其他請求控制數(shù)據(jù)流,配合DMA請求等引導索引的創(chuàng)建以將與數(shù)據(jù)有關(guān)的對象標識符映射到相關(guān)數(shù)據(jù)的物理位置。本文所述的多個功能全部或部分由主控制器224控制。在一個實施例中,主控制器224使用嵌入式控制器。在另一個實施例中,主控制器224使用局部存儲器,例如動態(tài)存儲器陣列230 (動態(tài)隨機存取存儲器“DRAM”)、靜態(tài)存儲器陣列232 (靜態(tài)隨機存取存儲器“SRAM”)等。在一個實施例中,使用主控制器224控制局部存儲器。在另一個實施例中,主控制器224通過存儲器控制器228訪問局部存儲器。在另一個實施例中,主控制器224運行Linux服務器,可支持各種公用服務器接口,例如萬維網(wǎng)、超文本標記語言(“HTML”)等。在另一個實施例中,主控制器224使用納米處理器。可使用可編程或標準邏輯或上列的控制器類型的任何組合構(gòu)造主控制器224。主控制器224可具體呈現(xiàn)為硬件、軟件或硬件和軟件的組合。本領(lǐng)域的技術(shù)人員應該認識到存在用于主控制器224的多個實施例。在一個實施例中,在存儲設(shè)備/固態(tài)存儲設(shè)備控制器202管理多個數(shù)據(jù)存儲設(shè)備/固態(tài)存儲介質(zhì)110a-n的情況下,主控制器224劃分內(nèi)部控制器例如固態(tài)存儲控制器104a_n間的工作負載。例如,主控制器224可劃分為待寫入數(shù)據(jù)存儲設(shè)備(例如固態(tài)存儲介質(zhì)110a-n)中的對象,使得該對象的一部分存儲在每一個相連的數(shù)據(jù)存儲設(shè)備上。該特征增強了性能,允許更快存儲和訪問對象。在一個實施例中,主控制器224采用FPGA執(zhí)行。在另一個實施例中,在主控制器224內(nèi)的固件可通過管理總線236、經(jīng)網(wǎng)絡連接到NIC 244的系統(tǒng)總線240或連接到該系統(tǒng)總線240的其他設(shè)備更新。在一個實施例中,對對象進行管理的主控制器224模擬塊存儲,使得計算機112或連接到存儲設(shè)備/固態(tài)存儲設(shè)備102的其設(shè)備將存儲設(shè)備/固態(tài)存儲設(shè)備102看作塊存儲設(shè)備并將數(shù)據(jù)發(fā)送到在存儲設(shè)備/固態(tài)存儲設(shè)備102中的特定物理地址。然后該主控制器224將這些塊進行劃分并作為對象存儲數(shù)據(jù)塊。然后主控制器224將塊和隨塊發(fā)送的物理地址映射到由主控制器224確定的實際位置。映射存儲在對象索引中。通常,對于塊模擬,塊設(shè)備應用程序接口( “API”)設(shè)置在計算機112、客戶端114的驅(qū)動器中或設(shè)置在希望將存儲設(shè)備/固態(tài)存儲設(shè)備102用作塊存儲設(shè)備的其他設(shè)備中。在另一個實施例中,主控制器224與NIC控制器244和嵌入式RDMA控制器246協(xié)作實現(xiàn)數(shù)據(jù)和命令集的及時RDMA傳輸。NIC控制器244可隱藏在不透明端口后以使得定制驅(qū)動器能夠使用。另外,通過采用標準棧API并與NIC 244共同操作的I/O存儲器驅(qū)動器,客戶端114上的驅(qū)動器可訪問計算機網(wǎng)絡116。
在一個實施例中,主控制器224也為獨立磁盤冗余陣列(“RAID”)控制器。在數(shù)據(jù)存儲設(shè)備/固態(tài)存儲設(shè)備102與一個或多個其他數(shù)據(jù)存儲設(shè)備/固態(tài)存儲設(shè)備102網(wǎng)絡連接的情況下,主控制器224可為用于單層RAID,多層RAID、循序RAID等的RAID控制器。主控制器224還允許一些對象存儲在RAID陣列中,而其他對象在沒有RAID的情況下存儲。在另一個實施例中,主控制器224可為分布式RAID控制器元件。在另一個實施例中,主控制器224可包括多個RAID、分布式RAID和在別處所述的其他功能。在一個實施例中,主控制器224控制在類似RAID結(jié)構(gòu)中的數(shù)據(jù)存儲,在該結(jié)構(gòu)中奇偶校驗信息存儲在邏輯頁的一個或多個存儲元件216、218、220中,在該邏輯頁中奇偶校驗信息保護存儲在相同邏輯頁內(nèi)的其他存儲元件216、218、220中的數(shù)據(jù)。在一個實施例中,主控制器224與單個或冗余網(wǎng)絡管理器(例如交換機)協(xié)作以建立路由、平衡帶寬利用率和故障轉(zhuǎn)移等。在另一個實施例中,主控制器224與集成專用邏輯(通過局部總線206)以及相關(guān)驅(qū)動程序軟件協(xié)作。在另一個實施例中,主控制器224與相連的專用處理器258或邏輯(通過外部系統(tǒng)總線240)及相關(guān)驅(qū)動程序軟件協(xié)作。在另一個實施例中,主控制器224與遠程專用邏輯(通過計算機網(wǎng)絡116)和相關(guān)驅(qū)動程序軟件協(xié)作。在另一個實施例中,主控制器224與局部總線206或連接了硬盤驅(qū)動器(“HDD”)存儲控制器的外部總線協(xié)作。在一個實施例中,主控制器224與一個或多個存儲控制器254通信,存儲設(shè)備/固態(tài)存儲設(shè)備102可呈現(xiàn)為通過SCSI總線、互聯(lián)網(wǎng)SCSI ( “iSCSI”)、光纖通道等連接的存儲設(shè)備。同時,存儲設(shè)備/固態(tài)存儲設(shè)備102可自主管理對象且可呈現(xiàn)為對象文件系統(tǒng)或分布式對象文件系統(tǒng)。還可通過節(jié)點控制器256和/或?qū)S锰幚砥?58訪問主控制器224。在另一個實施例中,主控制器224與自主集成管理控制器協(xié)作,定期驗證FPGA代碼和/或控制器軟件、運行(重置)時驗證FPGA代碼和/或上電(重置)期間驗證控制器軟件、支持外部重置請求、支持由于看門狗超時而發(fā)出的重置請求以及支持電壓、電流、功率、溫度和其他環(huán)境測量值及閾值中斷的設(shè)置。在另一個實施例中,主控制器224管理垃圾收集釋放擦除塊以重新使用。在另一個實施例中,主控制器224控制耗損均衡。在另一個實施例中,主控制器224允許將數(shù)據(jù)存儲設(shè)備/固態(tài)存儲設(shè)備102分為多個邏輯設(shè)備并允許基于分區(qū)的介質(zhì)加密。然而在另一個實施例中,主控制器224支持采用高級的多位ECC校正的固態(tài)存儲控制器104。本領(lǐng)域的技術(shù)人員應該認識到在存儲控制器202中,或更具體地講在固態(tài)存儲設(shè)備102中的主控制器224具有其他特征和功能。在一個實施例中,固態(tài)存儲設(shè)備控制器202包括控制動態(tài)隨機存儲器陣列230和/或靜態(tài)隨機存儲器陣列232的存儲器控制器228。如上所述,存儲器控制器228可獨立于主控制器224或與主控制器224集成。存儲器控制器228通??刂埔恍╊愋偷囊资源鎯ζ鳎鏒RAM (動態(tài)隨機存儲器陣列230)和SRAM (靜態(tài)隨機存儲器陣列232)。在其他例子中,存儲器控制器228還控制其他存儲器類型,例如電可擦可編程只讀存儲器(“EEPR0M”)等。在其他實施例中,存儲器控制器228控制兩個或更多個存儲器類型且存儲器控制器228可包括不止一個控制器。通常存儲器控制器228控制盡可能多的SRAM232并通過DRAM230補充 SRAM232。在一個實施例中,對象索引存儲在存儲器230、232中,然后定期卸載到固態(tài)存儲介質(zhì)IlOn的通道或其他非易失性存儲器中。本領(lǐng)域的技術(shù)人員應該認識到存儲器控制器·228、動態(tài)存儲器陣列230和靜態(tài)存儲器陣列232具有其他用途和配置。在一個實施例中,固態(tài)存儲設(shè)備控制器202包括DMA控制器226,該DMA控制器226控制在存儲設(shè)備/固態(tài)存儲設(shè)備102與一個或多個外部存儲器控制器250及相關(guān)的外部存儲器陣列252和CPU 248之間的DMA操作。注意外部存儲器控制器250和外部存儲器陣列252之所以被稱為外部是因為它們位于存儲設(shè)備/固態(tài)存儲設(shè)備102之外。另外,DMA控制器226還可利用請求設(shè)備,通過NIC 244和相關(guān)RDMA控制器246控制RDMA操作。在一個實施例中,固態(tài)存儲設(shè)備控制器202包括連接到管理總線236的管理控制器234。通常管理控制器234管理存儲設(shè)備/固態(tài)存儲設(shè)備102的環(huán)境指標和狀態(tài)。管理控制器234可通過管理總線236監(jiān)控設(shè)備溫度、風扇轉(zhuǎn)速和電源設(shè)置等。管理控制器234可支持用于存儲FPGA代碼和控制器軟件的可擦可編程只讀存儲器(“EEPR0M”)的讀取和編程。通常管理總線236連接到位于存儲設(shè)備/固態(tài)存儲設(shè)備102內(nèi)的多種組件。管理控制器234可通過局部總線206或可包括連于系統(tǒng)總線240或其他總線的單獨連接傳送警報和中斷等信號。在一個實施例中,管理總線236為內(nèi)置集成電路(“12C”)總線。本領(lǐng)域的技術(shù)人員應該認識到通過管理總線236連接至存儲設(shè)備/固態(tài)存儲設(shè)備102組件的管理控制器234的其他相關(guān)功能和用途。在一個實施例中,固態(tài)存儲設(shè)備控制器202包括可為特殊應用而定制的混雜邏輯242。通常,在使用FPGA或其他可配置控制器配置固態(tài)設(shè)備控制器202或主控制器224的情況下,可基于特殊應用、客戶要求和存儲要求等將定制邏輯包括在內(nèi)。數(shù)據(jù)流水線圖3A為根據(jù)本發(fā)明示出了在固態(tài)存儲設(shè)備102中具有寫入數(shù)據(jù)流水線106和讀取數(shù)據(jù)流水線108的固態(tài)存儲控制器104的一個實施例300的示意性框圖。該實施例300包括數(shù)據(jù)總線204、局部總線206和緩沖區(qū)控制208,其基本上類似于所述的與圖2的固態(tài)存儲設(shè)備控制器202有關(guān)的那些。寫入數(shù)據(jù)流水線106包括打包器302和糾錯碼(“ECC”)編碼器304。在其他實施例中,寫入數(shù)據(jù)流水線106包括輸入緩沖區(qū)306、寫入同步緩沖區(qū)308、寫入程序模塊310、壓縮模塊312、加密模塊314、垃圾收集器旁路316 (有一部分在讀取數(shù)據(jù)流水線108中)、偏置模塊318和寫入緩沖區(qū)320。讀取數(shù)據(jù)流水線108包括讀取同步緩沖區(qū)328、ECC解碼器322、解包器324、對齊模塊326和輸出緩沖區(qū)330。在其他實施例中,讀取數(shù)據(jù)流水線108可包括反向偏置模塊332、一部分垃圾收集器旁路316、解密模塊334、解壓模塊336和讀取程序模塊338。該固態(tài)存儲控制器104還可包括控制和狀態(tài)寄存器340和控制隊列342、內(nèi)存庫交錯控制器344、同步緩沖區(qū)346、存儲總線控制器348和復用器(“MUX”)350。在所示的實施例中,該固態(tài)存 儲控制器104包括配置模塊352,該配置模塊352可為寫入數(shù)據(jù)流水線106的一部分和/或讀取數(shù)據(jù)流水線108的一部分,或可獨立于寫入數(shù)據(jù)流水線106和讀取數(shù)據(jù)流水線108。下文中描述了固態(tài)控制器104組件及相關(guān)寫入數(shù)據(jù)流水線106和讀取數(shù)據(jù)流水線108。在其他實施例中,可使用同步固態(tài)存儲介質(zhì)110,并可去除同步緩沖區(qū)308、328。寫入數(shù)據(jù)流水線寫入數(shù)據(jù)流水線106包括打包器302,該打包器302可直接或間接通過另一個寫入數(shù)據(jù)流水線106階段接收待寫入固態(tài)存儲器的數(shù)據(jù)或元數(shù)據(jù)段,并創(chuàng)建大小適合固態(tài)存儲介質(zhì)110的一個或多個數(shù)據(jù)包。數(shù)據(jù)或元數(shù)據(jù)段通常為數(shù)據(jù)結(jié)構(gòu)(例如對象)的一部分,但也可包括整個數(shù)據(jù)結(jié)構(gòu)。在另一個實施例中,數(shù)據(jù)段為數(shù)據(jù)塊的一部分,但也可包括整個數(shù)據(jù)塊。通常,由計算機112、客戶端114或其他計算機或設(shè)備接收諸如數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)集,并以流入固態(tài)存儲設(shè)備102或計算機112的數(shù)據(jù)段的形式傳輸至固態(tài)存儲設(shè)備102。數(shù)據(jù)段還可以使用其他名稱,例如數(shù)據(jù)封裝包,但是如本文所引用,該數(shù)據(jù)段包括全部或一部分數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)塊。每個數(shù)據(jù)結(jié)構(gòu)存儲為一個或多個數(shù)據(jù)包。每個數(shù)據(jù)結(jié)構(gòu)可具有一個或多個容器數(shù)據(jù)包。每個數(shù)據(jù)包包含數(shù)據(jù)頭。數(shù)據(jù)頭可包括數(shù)據(jù)頭類型字段。類型字段可包括數(shù)據(jù)、屬性、元數(shù)據(jù)、數(shù)據(jù)段分隔符(多包)、數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)鏈接等等。數(shù)據(jù)頭還可包含有關(guān)數(shù)據(jù)包大小的信息,例如數(shù)據(jù)包中所包含的數(shù)據(jù)字節(jié)數(shù)。數(shù)據(jù)包的長度可由數(shù)據(jù)包類型確定。數(shù)據(jù)頭可包含在數(shù)據(jù)包和數(shù)據(jù)結(jié)構(gòu)間建立聯(lián)系的信息。一個例子可能是數(shù)據(jù)包頭中偏移量的使用,用于識別數(shù)據(jù)段在數(shù)據(jù)結(jié)構(gòu)中的位置。本領(lǐng)域的技術(shù)人員將會了解可包含在由打包器302添加至數(shù)據(jù)的數(shù)據(jù)頭中的其他信息和可添加至數(shù)據(jù)包的其他信息。每個數(shù)據(jù)包包含數(shù)據(jù)頭,并且可能包含來自數(shù)據(jù)或元數(shù)據(jù)段的數(shù)據(jù)。每個數(shù)據(jù)包的數(shù)據(jù)頭包含用以關(guān)聯(lián)數(shù)據(jù)包和包含該數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu)的相關(guān)信息。例如,數(shù)據(jù)頭可包含對象標識符或其他數(shù)據(jù)結(jié)構(gòu)標識符以及指示組成數(shù)據(jù)包的數(shù)據(jù)段、對象、數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)塊的偏移量。數(shù)據(jù)頭還可包含存儲總線控制器348用于存儲數(shù)據(jù)包的邏輯地址。數(shù)據(jù)頭還可包含有關(guān)數(shù)據(jù)包大小的信息,例如數(shù)據(jù)包中所包含的字節(jié)數(shù)。數(shù)據(jù)頭還可包含序號,當重建數(shù)據(jù)段或數(shù)據(jù)結(jié)構(gòu)時,該序號可識別數(shù)據(jù)段相對于數(shù)據(jù)結(jié)構(gòu)中其他數(shù)據(jù)包的所屬位置。數(shù)據(jù)頭可包含數(shù)據(jù)頭類型字段。類型字段可包括數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)屬性、元數(shù)據(jù)、數(shù)據(jù)段分隔符(多包)、數(shù)據(jù)結(jié)構(gòu)類型和數(shù)據(jù)結(jié)構(gòu)鏈接等等。本領(lǐng)域的技術(shù)人員將會了解可包含在由打包器302添加至數(shù)據(jù)或元數(shù)據(jù)的數(shù)據(jù)頭中的其他信息和可添加至數(shù)據(jù)包的其他信息。寫入數(shù)據(jù)流水線106包括ECC編碼器304,該編碼器304為從打包器302接收的一個或多個數(shù)據(jù)包生成一個或多個糾錯碼(“ECC”)。該ECC編碼器304通常使用糾錯算法生成與一個或多個數(shù)據(jù)包一起存儲的ECC校驗位。由ECC編碼器304生成的ECC編碼連同與該ECC編碼相關(guān)的一個或多個數(shù)據(jù)包一起包含ECC數(shù)據(jù)塊。與一個或多個數(shù)據(jù)包一起存儲的ECC數(shù)據(jù)用于檢測和糾正通過傳輸和存儲引入數(shù)據(jù)的錯誤。在一個實施例中,數(shù)據(jù)包作為長度為N的未編碼塊流入ECC編碼器304。ECC編碼器304計算出長度為S的并發(fā)位,添加進數(shù)據(jù)包并輸出長度為N+S的已編碼的數(shù)據(jù)塊。N和S的值取決于被選擇用于實現(xiàn)特定性能、效率和穩(wěn)定性指標的算法特性。在一個實施例中,在ECC數(shù)據(jù)塊和數(shù)據(jù)包之間沒有固定的關(guān)系;數(shù)據(jù)包可包括不止一個ECC數(shù)據(jù)塊;ECC數(shù)據(jù)塊可包括不止一個數(shù)據(jù)包;第一個數(shù)據(jù)包可在ECC數(shù)據(jù)塊中的任意位置結(jié)束,并且第二數(shù)據(jù)包可從同一 ECC數(shù)據(jù)塊中第一數(shù)據(jù)包結(jié)束之后開始。在一個實施例中,不能對ECC算法進行動態(tài)修改。在一個實施例中,與數(shù)據(jù)包一起存儲的ECC數(shù)據(jù)足夠穩(wěn)健,可糾正兩位以上的錯誤。有利的方面是,使用允許超過單個位錯誤校正或甚至雙位錯誤校正的穩(wěn)健ECC算法可延長固態(tài)存儲介質(zhì)110的使用壽命。例如,如果將閃存用作固態(tài)存儲介質(zhì)110中的存儲介質(zhì),則閃存可在每個擦除周期無錯寫入大約100,000次。這一使用期限可通過使用穩(wěn)健的ECC算法加以延長。因具有ECC編碼器304和在固態(tài)存儲設(shè)備102上相應的ECC解碼器322,該固態(tài)存儲設(shè)備102可在內(nèi)部糾正錯誤,并且相比使用穩(wěn)健性較差的ECC算法(例如單個位錯誤校正)具有更長的使用壽命。然而,在其他實施例中,ECC編碼器304可使用 穩(wěn)健性較差的ECC算法,并且可糾正單個位或雙位錯誤。在另一個實施例中,固態(tài)存儲介質(zhì)110可包括可靠性較低的存儲器(例如多級單元(“MLC”)閃存)以增加容量,在沒有更穩(wěn)健的ECC算法的情況下此存儲器可能不夠充分可靠。在一個實施例中,寫入數(shù)據(jù)流水線106包括輸入緩沖區(qū)306,該輸入緩沖區(qū)接收待寫入固態(tài)存儲介質(zhì)110的數(shù)據(jù)段并存儲該輸入數(shù)據(jù)段直到寫入數(shù)據(jù)流水線106的下一階段,例如打包器302 (或更復雜的寫入數(shù)據(jù)流水線106的其他階段)做好準備處理下個數(shù)據(jù)段。輸入緩沖區(qū)306通常允許寫入數(shù)據(jù)流水線106使用適當大小的數(shù)據(jù)緩沖區(qū)接收和處理數(shù)據(jù)段的速率之間存在差異。輸入緩沖區(qū)306還允許數(shù)據(jù)總線204以大于寫入數(shù)據(jù)流水線106可維持的速率將數(shù)據(jù)傳輸至寫入數(shù)據(jù)流水線106,以提高數(shù)據(jù)總線204的運行效率。通常,當寫入數(shù)據(jù)流水線106不包括輸入緩沖區(qū)306時,緩沖功能在別處執(zhí)行,例如在固態(tài)存儲設(shè)備102中但在寫入數(shù)據(jù)流水線106之外;在計算機112中,例如在網(wǎng)絡接口卡(“NIC”)內(nèi);或在其他設(shè)備中,例如當使用遠程直接內(nèi)存訪問(“RDMA”)時。在另一個實施例中,寫入數(shù)據(jù)流水線106還包括寫入同步緩沖區(qū)308,該寫入同步緩沖區(qū)在數(shù)據(jù)包寫入固態(tài)存儲介質(zhì)110之前緩沖從ECC編碼器304接收的數(shù)據(jù)包。寫入同步緩沖區(qū)308位于局部時鐘域和固態(tài)存儲時鐘域之間的邊界,并提供緩沖以解決時鐘域差異。在其他實施例中,可使用同步固態(tài)存儲介質(zhì)110,并可去除同步緩沖區(qū)308、328。在一個實施例中,寫入數(shù)據(jù)流水線106還包括偏置模塊318,該偏置模塊可直接或間接地從打包器302接收一個或多個數(shù)據(jù)包。偏置模塊318使數(shù)據(jù)包的位偏置以趨向于固態(tài)存儲介質(zhì)HO的存儲單元的偏置。如本文所用,“偏置”是一組位的位值的傾向、概率、趨勢或期望以呈現(xiàn)出特定的數(shù)據(jù)模式。偏置可以是自然特性、設(shè)計屬性、存儲介質(zhì)上執(zhí)行操作的特性或隨機事件。數(shù)據(jù)本身可具有偏置,并且數(shù)據(jù)存儲介質(zhì)可具有偏置。偏置可趨向于二進制一,趨向于二進制零,趨向于二進制一和二進制零的平均數(shù),趨向于某些位的某個二進制值等等。例如,在一個實施例中,可在數(shù)據(jù)文件的終段填補二進制零,使得存儲終段的數(shù)據(jù)包表現(xiàn)出趨向于二進制零的偏置,意味著數(shù)據(jù)包具有比二進制一更多的二進制零。其他數(shù)據(jù)包可具有比二進制零更多的二進制一、或二進制一和二進制零的平均數(shù)。雖然每個數(shù)據(jù)包可基于數(shù)據(jù)包內(nèi)的數(shù)據(jù)具有單獨的偏置,但是固態(tài)存儲介質(zhì)110的存儲單元的偏置可基于與特定二進制值或模式的存儲或者存儲單元的某些特性相關(guān)的有益效果。存儲單元特性的一個例子是,NAND閃存單元在由制造商提供時偏于所有二進制一值或幾乎所有二進制一值。另外,在NAND閃存單元中執(zhí)行擦除操作可將每個存儲單元的二進制值設(shè)置為二進制一,使得存儲單元的編程包括將某些存儲單元更改為二進制零值。所有二進制一值或幾乎所有二進制一值的偏置在由制造商提供時或擦除時表現(xiàn)了非易失性固態(tài)存儲介質(zhì)的存儲單元為空態(tài)的一個例子。在一個實施例中,每個存儲元件216、218、220將二進制數(shù)據(jù)存儲在表現(xiàn)出偏置的多個存儲單元中。每個存儲單元存儲一個或多個二進制位或值。閃存存儲單元可以是分別存儲單個二進制位的單級單元(“SLC”)、或分別存儲兩個或更多個二進制位的多級單元(“MLC”)。存儲單元的例子包括晶體管、電容器、磁性元件、機械元件、光學元件等等。在閃存中,每個存儲單元通常為浮柵晶體管。NRAM、MRAM、DRAM、PRAM和其他類型的固態(tài)存儲器 可具有其他類型的存儲單元,并且每個存儲單元可存儲單個二進制位或者兩個或更多個二進制位。在一個實施例中,空態(tài)或擦除狀態(tài)下的存儲元件216、218、220中的存儲單元存儲初始二進制值。初始二進制值代表存儲單元的偏置。例如,存儲單元可具有物理特性、電特性、機械特性或其他特性,使其在默認情況下存儲特定值。在另一個實施例中,偏置可基于固態(tài)存儲介質(zhì)110的設(shè)計考慮、安全考慮、兼容性問題等有意地選擇,但不可基于存儲單元的默認屬性。例如,在一個實施例中,存儲元件216、218、220的存儲單元可分別在制造商提供時存儲二進制值一,并且可分別在被編程或?qū)懭胫安脸林狄?,如同閃存的通常情況一樣。在另一個實施例中,可使存儲元件216、218、220的存儲單元偏置為趨向于二進制零、趨向于平均或等量的二進制一或零、趨向于多個位的某個二進制值、趨向于二進制模式等等。在某些實施例中,一個或多個存儲單元的偏置可能會受到物理上鄰近或靠近一個或多個存儲單元的其他存儲單元的狀態(tài)的影響或以該狀態(tài)為基礎(chǔ)。例如,期望存儲單元中存儲的數(shù)據(jù)偏置可最大程度減少存儲單元與其他存儲單元之間的單元間干擾,諸如此類。在物理上鄰近的存儲單元之間的電壓差可引起單元間干擾,在某些實施例中,基于存儲單元的物理幾何形狀使數(shù)據(jù)偏置以減少或最小化存儲單元之間的電壓差可減少單元間干擾。在一個實施例中,固態(tài)存儲介質(zhì)110的存儲單元可具有趨向于二進制模式的偏置,該二進制模式滿足存儲單元與其他物理上鄰近的存儲單元之間的預定電壓差閾值,諸如此類。除了局部類型的單元間干擾外,較大的多單元結(jié)構(gòu),例如位串、字線等也會受到單元間干擾。某些數(shù)據(jù)條紋或其他數(shù)據(jù)模式(例如二進制一或二進制零的條紋)會妨礙用于這些較大多單元結(jié)構(gòu)的傳感放大器和/或其他管理電路的精確度或有效性,并且可能有利于將數(shù)據(jù)偏置以遠離此類條紋或其他模式。對于某些類型的存儲單元,例如SLC閃存,存儲單元的電壓電平和存儲單元之間的相關(guān)電壓差可基于每個存儲單元的單個位值,并且使數(shù)據(jù)偏置可包括趨向于在數(shù)據(jù)包內(nèi)和/或在存儲單元的物理區(qū)域內(nèi)的二進制一值和二進制零值之間具有最小過渡的二進制模式偏置。對于其他類型的存儲單元,例如MLC閃存,存儲單元的電壓電平和存儲單元之間的相關(guān)電壓差可基于形成子模式或符號的位組,并且偏置數(shù)據(jù)可包括趨向于在某些子模式或符號之間具有最小過渡的二進制模式的偏置。使用子模式或符號的一個例子包括多個二進制值對MLC存儲單元內(nèi)相關(guān)電荷水平進行二進制或格雷碼映射。在某些實施例中,由單個MLC存儲單元存儲的位可能沒有鄰近的地址,但可存儲在不同的物理頁和邏輯頁等等中。在一個實施例中,作為分別從其他偏置技術(shù)、代替其他偏置技術(shù)或除了其他偏置技術(shù)之外執(zhí)行的單獨步驟,偏置模塊318偏置源數(shù)據(jù)以減少單元間的干擾。例如,當反轉(zhuǎn)、白化、壓縮、重新分配和/或以其他方式偏置源數(shù)據(jù)時,單獨的源數(shù)據(jù)塊可能仍具有可引起單元間干擾的模式,并且偏置模塊318可用趨向最小化單元間干擾的模式偏置一個或多個單獨的源數(shù)據(jù)塊,諸如此類。偏置模塊318通過改變數(shù)據(jù)包的偏置使其更貼切地匹配固態(tài)存儲介質(zhì)110的存儲單元的偏置的方式偏置數(shù)據(jù)包。偏置模塊318以可逆的方式偏置數(shù)據(jù)包,使得反向偏置模塊332可將數(shù)據(jù)包轉(zhuǎn)換回具有初始源偏置的原始源數(shù)據(jù)值。在一個實施例中,調(diào)整偏置?!K318所偏置的數(shù)據(jù)包的大小以適于存儲在特定邏輯或物理存儲區(qū)域或固態(tài)存儲介質(zhì)110的分區(qū)中,例如擦除塊、虛擬擦除塊、頁、虛擬頁、ECC數(shù)據(jù)塊,頁內(nèi)分區(qū)等等。在一個實施例中,偏置模塊318基于數(shù)據(jù)包的偏置選擇性地偏置某些數(shù)據(jù)包,而不偏置其他數(shù)據(jù)包。本領(lǐng)域的技術(shù)人員應該認識到偏置模塊318可選擇性地在形成數(shù)據(jù)包子集的一個或多個數(shù)據(jù)段中運行。相似地,反向偏置模塊332也可在數(shù)據(jù)段中運行?;蛘?,另外,在一個實施例中,可基于固態(tài)存儲介質(zhì)110中存儲區(qū)域的大小、總線或緩沖區(qū)的大小、流水線106,108的大小和可用于存儲的指示器的多個額外位等等,調(diào)整數(shù)據(jù)包(或數(shù)據(jù)包子集,例如數(shù)據(jù)段)的大小。通過使數(shù)據(jù)包的偏置趨向于存儲單元的偏置,偏置模塊318提高了固態(tài)存儲介質(zhì)110和固態(tài)存儲設(shè)備102的性能和持久性。例如,使數(shù)據(jù)包偏置從而更貼切地匹配存儲單元的偏置可減少寫入時間和擦除時間,因為只需改變較少的實際存儲單元即可執(zhí)行該操作。這還增加了存儲單元的可寫入壽命,因為在存儲單元上執(zhí)行的操作更少就意味著在耗損開始影響存儲單元的性能/可靠性之前存儲單元將持續(xù)更長時間。在某些實施例中,偏置數(shù)據(jù)包可減少功耗或具有其他額外有益效果。在一個實施例中,由于存儲單元恰好在編程或?qū)懭胫按鎯α藵M足偏置的初始二進制值,因此數(shù)據(jù)包更加匹配存儲單元的偏置,需要改變以存儲數(shù)據(jù)包的存儲單元更少,并且保持在偏置狀態(tài)的存儲單元更多。如圖所示,在將一個或多個數(shù)據(jù)包發(fā)送至ECC編碼器304之前,偏置模塊318使這些數(shù)據(jù)包偏置。根據(jù)偏置模塊318用于偏置數(shù)據(jù)包的方法和其他設(shè)計考慮,在另一個實施例中,偏置模塊318可在寫入數(shù)據(jù)流水線106中的ECC編碼器304之后接收數(shù)據(jù),或被置于寫入數(shù)據(jù)流水線106中的其他位置。例如,在某些實施例中,將ECC數(shù)據(jù)與偏置模塊318偏置的數(shù)據(jù)保持分離是有利的,而在其他實施例中,偏置包含來自ECC編碼器304的ECC數(shù)據(jù)的數(shù)據(jù)對偏置模塊318來說是有利的。在一個實施例中,在將一個或多個數(shù)據(jù)段發(fā)送至ECC編碼器304之前,偏置模塊318偏置這些數(shù)據(jù)段。數(shù)據(jù)段可以是在一個實施例中小于數(shù)據(jù)包的一組位。在此類實施例中,數(shù)據(jù)段可包含寫入數(shù)據(jù)流水線106的位/字節(jié)寬度。相似地,反向偏置模塊332可在偏置的數(shù)據(jù)段被讀取后將其轉(zhuǎn)換回初始源狀態(tài)。偏置和反向偏置數(shù)據(jù)段可利于在寫入數(shù)據(jù)流水線106和讀取數(shù)據(jù)流水線108中使用偏置模塊318和反向偏置模塊332,因為可調(diào)整數(shù)據(jù)段大小以匹配流過流水線106、108的數(shù)據(jù)的大小(總線寬度)。在另一個實施例中,偏置模塊318可與寫入數(shù)據(jù)流水線106的另一個元件整合,例如壓縮模塊312、加密模塊314和ECC編碼器304等等。在寫入數(shù)據(jù)包之前,當偏置模塊318偏置數(shù)據(jù)包時,偏置模塊318和相應的反向偏置模塊332明顯地提高了固態(tài)存儲介質(zhì)110的性能,并且反向偏置模塊332在偏置的數(shù)據(jù)包被讀取后將其轉(zhuǎn)換回初始源狀態(tài)。在另一個實施例中,寫入數(shù)據(jù)流水線106還包括加密模塊314,在將數(shù)據(jù)段發(fā)送到打包器302之前,該加密模塊直接或間接地將從輸入緩沖區(qū)306接收的數(shù)據(jù)或元數(shù)據(jù)段加密,并且使用與數(shù)據(jù)段共同接收的加密密鑰加密數(shù)據(jù)段。加密模塊314用來加密數(shù)據(jù)的加密密鑰并非對于存儲在固態(tài)存儲設(shè)備102中的所有數(shù)據(jù)通用,但是可基于每種數(shù)據(jù)結(jié)構(gòu)而有所不同,并且在接收數(shù)據(jù)段時被共同接收,如下文所述。例如,用于通過加密模塊314加密數(shù)據(jù)段的加密密鑰可隨數(shù)據(jù)段一起接收,或可作為命令的一部分被接收以寫入數(shù)據(jù)段所屬的數(shù)據(jù)結(jié)構(gòu)。固態(tài)存儲設(shè)備102可使用非秘密加密隨機數(shù),并將其存儲在結(jié)合加密密鑰 使用的每個數(shù)據(jù)結(jié)構(gòu)包中。每個包可存儲不同的隨機數(shù)。數(shù)據(jù)段可在多個數(shù)據(jù)包之間用唯一的隨機數(shù)進行拆分以達到通過加密算法增強保護的目的。加密密鑰可從客戶端114、另一個計算機、密鑰管理器或其他保存該加密密鑰的設(shè)備接收以用于加密數(shù)據(jù)段。在一個實施例中,將加密密鑰從固態(tài)存儲設(shè)備102、計算機112、客戶端114或其他傳送到其他外部代理之一傳送到固態(tài)存儲控制器104,該其他外部代理具有執(zhí)行行業(yè)標準方法的能力以安全地傳送和保護私人密鑰和公開密鑰。在一個實施例中,加密模塊314使用與數(shù)據(jù)包一起接收的第一加密密鑰對第一數(shù)據(jù)包進行加密,并使用與第二數(shù)據(jù)包一起接收的第二加密密鑰對第二數(shù)據(jù)包進行加密。在另一個實施例中,加密模塊314使用與數(shù)據(jù)包一起接收的第一加密密鑰對第一數(shù)據(jù)包進行加密,并將第二數(shù)據(jù)包不加密的傳遞至下一個階段。有利地,固態(tài)存儲設(shè)備102的寫入數(shù)據(jù)流水線106中包含的加密模塊314允許在沒有單個文件系統(tǒng)或其他外部系統(tǒng)的情況下逐個數(shù)據(jù)結(jié)構(gòu)或逐個數(shù)據(jù)段對數(shù)據(jù)加密,以跟蹤用于存儲相應數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)段的不同加密密鑰。每個請求設(shè)備155或相關(guān)密鑰管理器獨立地管理加密密鑰,該加密密鑰僅用于加密由請求設(shè)備155發(fā)送的數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)段。在一個實施例中,加密模塊314可使用固態(tài)存儲設(shè)備102的唯一加密密鑰加密一個或多個數(shù)據(jù)包?;蛘叱松鲜黾用苤?,加密模塊314可獨立地執(zhí)行此介質(zhì)加密。通常包括數(shù)據(jù)頭在內(nèi)的整個數(shù)據(jù)包都會被加密。而在另一個實施例中,不加密數(shù)據(jù)頭。加密模塊314的介質(zhì)加密可為存儲在固態(tài)存儲介質(zhì)110中的數(shù)據(jù)提供一定水平的安全性。例如,在使用特定固態(tài)存儲設(shè)備102的唯一介質(zhì)加密對數(shù)據(jù)進行加密后,如果固態(tài)存儲介質(zhì)110連接到不同的固態(tài)存儲控制器104、固態(tài)存儲設(shè)備102或計算機112,則在不使用與將數(shù)據(jù)寫入固態(tài)存儲介質(zhì)110過程中所用的相同加密密鑰的情況下,通常無法在不付出重大努力的情況下讀取固態(tài)存儲介質(zhì)110的內(nèi)容。在另一個實施例中,寫入數(shù)據(jù)流水線106包括壓縮模塊312,該壓縮模塊在將數(shù)據(jù)或元數(shù)據(jù)段發(fā)送至打包器302之前對數(shù)據(jù)段進行壓縮。壓縮模塊312通常使用本領(lǐng)域技術(shù)人員所知的壓縮例程壓縮數(shù)據(jù)或元數(shù)據(jù)段以減少段的存儲大小。例如,如果數(shù)據(jù)段包含512個零的串,則壓縮模塊312可用表示這512個零的代碼或令牌替換該512個零,而該代碼或令牌所占據(jù)的空間比512個零占據(jù)的空間緊湊得多。在一個實施例中,壓縮模塊312用第一壓縮例程壓縮第一數(shù)據(jù)段,而不壓縮的傳遞第二數(shù)據(jù)段。在另一個實施例中,壓縮模塊312用第一壓縮例程壓縮第一數(shù)據(jù)段,并用第二壓縮例程壓縮第二數(shù)據(jù)段。在固態(tài)存儲設(shè)備102中具有該靈活性是有利的,使得客戶端114或?qū)?shù)據(jù)寫入固態(tài)存儲設(shè)備102的其他設(shè)備可分別指定壓縮例程,或使得其中一個可指定壓縮例程而另一個不指定壓縮。也可基于每個數(shù)據(jù)結(jié)構(gòu)類型或數(shù)據(jù)結(jié)構(gòu)類的默認設(shè)置選擇壓縮例程。例如,特定數(shù)據(jù)結(jié)構(gòu)的第一數(shù)據(jù)結(jié)構(gòu)可覆蓋默認壓縮例程設(shè)置,并且相同數(shù)據(jù)結(jié)構(gòu)類和數(shù)據(jù)結(jié)構(gòu)類型的第二數(shù)據(jù)結(jié)構(gòu)可使用默認壓縮例程,以及相同數(shù)據(jù)結(jié)構(gòu)類和數(shù)據(jù)結(jié)構(gòu)類型的第三數(shù)據(jù)結(jié)構(gòu)可以不使用壓縮。在一個實施例中,寫入數(shù)據(jù)流水線106包括垃圾收集器旁路316,該垃圾收集器旁路316作為在垃圾收集系統(tǒng)中的數(shù)據(jù)旁路的一部分從讀取數(shù)據(jù)流水線108接收數(shù)據(jù)段。垃圾收集系統(tǒng)通常標記不再有效的數(shù)據(jù)包,這通常是因為該數(shù)據(jù)包被標記為刪除或已被修改并且修改后的數(shù)據(jù)存儲在不同位置。在某些情況下,垃圾收集系統(tǒng)確定特定存儲部分可被 回收。該確定可能是由于可用的存儲容量不足、標記為無效的數(shù)據(jù)百分比達到閾值、有效數(shù)據(jù)的合并、存儲部分的錯誤檢測率達到閾值或基于數(shù)據(jù)分布提高性能等。垃圾收集算法將考慮多個因素以確定何時回收存儲部分。標記存儲部分進行回收后,通常必須重新分配該部分中的有效數(shù)據(jù)包。垃圾收集器旁路316允許將數(shù)據(jù)包讀入讀取數(shù)據(jù)流水線108,然后在未脫離固態(tài)存儲控制器104的情況下直接傳送至寫入數(shù)據(jù)流水線106。在一個實施例中,垃圾收集器旁路316是運行在固態(tài)存儲設(shè)備102中的自主垃圾收集系統(tǒng)的一部分。這將允許固態(tài)存儲設(shè)備102管理數(shù)據(jù)以使數(shù)據(jù)系統(tǒng)地散布在固態(tài)存儲介質(zhì)110中,從而提高性能和數(shù)據(jù)可靠性,避免固態(tài)存儲介質(zhì)110的任何一個位置或區(qū)域過多使用和使用不足,并延長固態(tài)存儲介質(zhì)110的使用壽命。垃圾收集器旁路316將插入寫入數(shù)據(jù)流水線106的數(shù)據(jù)段與由客戶端114或其他設(shè)備寫入的其他數(shù)據(jù)段整合。在所示的實施例中,垃圾收集器旁路316位于寫入數(shù)據(jù)流水線106中的打包器302之前以及讀取數(shù)據(jù)流水線108中的解包器324之后,但也可位于讀取和寫入數(shù)據(jù)流水線106、108中的其他位置。在刷新寫入流水線108的過程中,可使用垃圾收集器旁路316填充虛擬頁剩余部分以提高固態(tài)存儲介質(zhì)110中的存儲效率,從而減少垃圾收集的頻率。在一個實施例中,寫入數(shù)據(jù)流水線106包括為高效寫入操作緩沖數(shù)據(jù)的寫入緩沖區(qū)320。通常,寫入緩沖區(qū)320具有足夠的數(shù)據(jù)包容量以填充固態(tài)存儲介質(zhì)110中的至少一個虛擬頁。這將允許寫入操作將整頁數(shù)據(jù)無中斷地發(fā)送至固態(tài)存儲介質(zhì)110。通過將寫入數(shù)據(jù)流水線106的寫入緩沖區(qū)320和讀取數(shù)據(jù)流水線108中的緩沖區(qū)的大小調(diào)整為具有相同容量或大于固態(tài)存儲介質(zhì)110中存儲寫入緩沖區(qū)的容量,寫入和讀取數(shù)據(jù)將更為有效,因為單個寫入命令就可以將整個虛擬頁的數(shù)據(jù)發(fā)送至固態(tài)存儲介質(zhì)110中而無需多個命令。填充寫入緩沖區(qū)320時,固態(tài)存儲介質(zhì)110可用于其他讀取操作。這是有利的,因為在將數(shù)據(jù)寫入存儲寫入緩沖區(qū)和流入存儲寫入緩沖區(qū)的數(shù)據(jù)停滯時,具有較小寫入緩沖區(qū)或沒有寫入緩沖區(qū)的其他固態(tài)設(shè)備可占用固態(tài)存儲。讀取操作將被阻斷直到整個存儲寫入緩沖區(qū)被填充并編程。用于沒有寫入緩沖區(qū)或具有較小寫入緩沖區(qū)的系統(tǒng)的另一個方法是刷新未滿的存儲寫入緩沖區(qū)以便能夠讀取。而這是低效的,因為需要多個寫入/編程周期來填充頁面。對于寫入緩沖區(qū)320的尺寸大于虛擬頁的所示實施例,可以在包括多個子命令的單個寫入命令之后使用單個編程命令以將數(shù)據(jù)頁從每個固態(tài)存儲元件216、218、220中的存儲寫入緩沖區(qū)傳輸至每個固態(tài)存儲元件216、218、220中的指定頁。該技術(shù)具有消除部分頁編程的有益效果,已知該技術(shù)會降低數(shù)據(jù)可靠性和耐久性,并且當緩沖區(qū)填滿時,將清空用于讀取和其他命令的目標內(nèi)存庫。在一個實施例中,寫入緩沖區(qū)320是乒乓緩沖區(qū),其中當乒乓緩沖區(qū)的一面正在填充時,填充并指定緩沖區(qū)的另一面以在適當?shù)臅r間傳輸。在另一個實施例中,寫入緩沖區(qū)320包括具有大于數(shù)據(jù)段虛擬頁容量的先進先出(“FIFO”)寄存器。本領(lǐng)域的技術(shù)人員應當知道在將數(shù)據(jù)寫入固態(tài)存儲介質(zhì)110之前允許數(shù)據(jù)虛擬頁存儲的其他寫入緩沖區(qū)320配 置。在另一個實施例中,調(diào)整寫入緩沖區(qū)320的大小以小于虛擬頁,使得少于一頁的信息寫入固態(tài)存儲介質(zhì)110中的存儲寫入緩沖區(qū)。在本實施例中,為了防止寫入數(shù)據(jù)流水線106中的停滯阻礙讀取操作,作為垃圾收集過程的一部分,使用需要從一個位置移至另一個位置的垃圾收集系統(tǒng)將數(shù)據(jù)列隊。在寫入數(shù)據(jù)流水線106中數(shù)據(jù)停滯的情況下,可通過垃圾收集器旁路316將數(shù)據(jù)傳送到寫入緩沖區(qū)320,然后傳送到固態(tài)存儲介質(zhì)110中的存儲寫入緩沖區(qū)上,以在編程該數(shù)據(jù)之前填充虛擬頁的頁面。用這種方法,寫入數(shù)據(jù)流水線106中的數(shù)據(jù)停滯將不會停止從固態(tài)存儲設(shè)備102進行讀取。在另一個實施例中,寫入數(shù)據(jù)流水線106包括在寫入數(shù)據(jù)流水線106中具有一個或多個用戶可定義功能的寫入程序模塊310。寫入程序模塊310允許用戶定制寫入數(shù)據(jù)流水線106。用戶可基于特定數(shù)據(jù)要求或應用定制寫入數(shù)據(jù)流水線106。當固態(tài)存儲控制器104為FPGA時,用戶可相對容易地用定制命令和功能編程寫入數(shù)據(jù)流水線106。用戶還可使用寫入程序模塊310以包括具有ASIC的定制功能,然而,定制ASIC比用FPGA更難。寫入程序模塊310可包括緩沖區(qū)和旁路機構(gòu)以使得第一數(shù)據(jù)段在寫入程序模塊310中執(zhí)行,而第二數(shù)據(jù)段可繼續(xù)通過寫入數(shù)據(jù)流水線106。在另一個實施例中,寫入程序模塊310可包括可通過軟件編程的處理器內(nèi)核。請注意,寫入程序模塊310示出在輸入緩沖區(qū)306和壓縮模塊312之間,然而,寫入程序模塊310可位于寫入數(shù)據(jù)流水線106中的任何位置并且可分布在多個階段302-320中。另外,在被編程和獨立運行的多個階段302-320中可分布多個寫入程序模塊310。另夕卜,可改變階段302-320的順序。本領(lǐng)域的技術(shù)人員應該認識到基于特定用戶要求的階段302-320順序的可行改變。讀取數(shù)據(jù)流水線讀取數(shù)據(jù)流水線108包括ECC解碼器322,該ECC解碼器322通過使用與請求數(shù)據(jù)包的每個ECC數(shù)據(jù)塊一起存儲的ECC確定從固態(tài)存儲介質(zhì)110接收的請求數(shù)據(jù)包的ECC數(shù)據(jù)塊中是否存在數(shù)據(jù)錯誤。如果請求數(shù)據(jù)包中存在任何錯誤且該錯誤可通過使用ECC糾正,則ECC解碼器322可糾正請求數(shù)據(jù)包中的任何錯誤。例如,如果ECC檢測到六位的錯誤但僅能糾正三位錯誤,那么ECC解碼器322將糾正具有最多三位錯誤的請求數(shù)據(jù)包的ECC數(shù)據(jù)塊。ECC解碼器322通過將錯誤的位更改為正確的一或零狀態(tài)來糾正錯誤的位,使得請求數(shù)據(jù)包與當其被寫入固態(tài)存儲介質(zhì)110并且該數(shù)據(jù)包生成ECC時相同。在某些實施例中,ECC解碼器322可為下述的配置模塊352提供有關(guān)可糾正錯誤的錯誤信息,例如錯誤位的位置、錯誤位的值和/或其他錯誤信息。例如,ECC解碼器322可為配置模塊352提供錯誤偏置,指示數(shù)據(jù)集中出錯的一個或多個位,諸如此類。如本文所用,錯誤偏置表示數(shù)據(jù)集中檢測到的一個或多個位錯誤。在一個實施例中,錯誤偏置包括在數(shù)據(jù)集中檢測到的位錯誤的位置或定位。在另一個實施例中,錯誤偏置包括檢測到的位錯誤的值。所測錯誤的值可包括錯誤位的糾錯值、錯誤位的錯誤值等。例如,在一個實施例中,ECC解碼器322可提供具有未糾正數(shù)據(jù)集和指示所測位錯誤位置的錯誤偏置的配置模塊352,并且配置模塊352可通過將這些位置的位反向或倒置以確定已知偏置。例如,在另一個實施例中,ECC解碼器322可提供具有已糾正錯誤的數(shù)據(jù)集和指示所測位錯誤位置的錯誤偏置的配置模塊352,并且配置模塊352可通過將這些位置的位反向或倒置以確定讀取偏置。如果ECC解碼器322確定請求數(shù)據(jù)包包含的錯誤位大于ECC可糾正的錯誤位,則ECC解碼器322不能糾正請求數(shù)據(jù)包中損壞的ECC數(shù)據(jù)塊中的錯誤,并發(fā)送中斷。在一個實 施例中,ECC解碼器322通過發(fā)送指出請求數(shù)據(jù)包中存在錯誤的消息來發(fā)送中斷。該消息可包括有關(guān)ECC解碼器322無法糾正錯誤或暗指ECC解碼器322不能糾正錯誤的信息。在另一個實施例中,ECC解碼器322通過中斷和/或消息發(fā)送請求數(shù)據(jù)包中損壞的ECC數(shù)據(jù)塊。在一個實施例中,ECC解碼器322無法糾正的請求數(shù)據(jù)包中已損壞ECC數(shù)據(jù)塊或已損壞ECC數(shù)據(jù)塊的一部分由主控制器224讀取、更正并返回至ECC解碼器322,以便讀取數(shù)據(jù)流水線108進一步處理。在一個實施例中,請求包的已損壞ECC數(shù)據(jù)塊或已損壞ECC數(shù)據(jù)塊的一部分被發(fā)送至請求數(shù)據(jù)的設(shè)備。請求設(shè)備155可糾正ECC數(shù)據(jù)塊或用另一個副本替換數(shù)據(jù),例如備份或鏡像副本,然后可使用請求數(shù)據(jù)包的替換數(shù)據(jù)或?qū)⑵浞祷刂磷x取數(shù)據(jù)流水線108。請求設(shè)備155可使用錯誤的請求數(shù)據(jù)包中的數(shù)據(jù)頭信息以識別替換已損壞請求數(shù)據(jù)包或替換數(shù)據(jù)包所屬的數(shù)據(jù)結(jié)構(gòu)所需的數(shù)據(jù)。在另一個實施例中,固態(tài)存儲控制器104使用某些類型的RAID存儲數(shù)據(jù)并能恢復損壞的數(shù)據(jù)。在另一個實施例中,ECC解碼器322發(fā)送中斷和/或消息并且接收設(shè)備放棄與請求數(shù)據(jù)包相關(guān)的讀取操作。本領(lǐng)域的技術(shù)人員應當了解當解碼器322確定請求數(shù)據(jù)包的一個或多個ECC數(shù)據(jù)塊已損壞并且ECC解碼器322無法糾正錯誤時應采取的其他選擇和操作。讀取數(shù)據(jù)流水線108包括可直接或間接地從ECC解碼器322接收請求數(shù)據(jù)包的ECC數(shù)據(jù)塊的解包器324,并可檢查和移除一個或多個數(shù)據(jù)包頭。解包器324可通過檢查數(shù)據(jù)頭中的數(shù)據(jù)包標識符、數(shù)據(jù)長度和數(shù)據(jù)位置等驗證數(shù)據(jù)包頭。在一個實施例中,數(shù)據(jù)頭包括散列碼,該散列碼可用于驗證傳送到讀取數(shù)據(jù)流水線108的數(shù)據(jù)包是所請求的數(shù)據(jù)包。解包器324也可將數(shù)據(jù)頭從由打包器302添加的請求數(shù)據(jù)包中移除。解包器324可能針對的不是操作某些數(shù)據(jù)包,而是將這些數(shù)據(jù)包在不進行修改的情況下向前傳遞。一個例子是在重建過程中請求的容器標簽,其中需要數(shù)據(jù)頭信息用于索引重建。另外的例子包括用于固態(tài)存儲設(shè)備102中的多個類型數(shù)據(jù)包的傳輸。在另一個實施例中,解包器324的操作取決于數(shù)據(jù)包的類型。讀取數(shù)據(jù)流水線108包括對齊模塊326,該對齊模塊從解包器324接收數(shù)據(jù)并將不需要的數(shù)據(jù)移除。在一個實施例中,發(fā)送至固態(tài)存儲介質(zhì)110的讀取命令將檢索數(shù)據(jù)包。請求數(shù)據(jù)的設(shè)備可能不需要所檢索數(shù)據(jù)包中的所有數(shù)據(jù),對齊模塊326將不需要的數(shù)據(jù)移除。如果檢索頁中的所有數(shù)據(jù)均為所請求數(shù)據(jù),則對齊模塊326不會移除任何數(shù)據(jù)。對齊模塊326在將數(shù)據(jù)段轉(zhuǎn)發(fā)到下一階段之前,以與請求數(shù)據(jù)段的設(shè)備兼容的數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)段的形式,重新格式化數(shù)據(jù)。通常,當讀取數(shù)據(jù)流水線108處理數(shù)據(jù)時,數(shù)據(jù)段或數(shù)據(jù)包的大小在各個階段會有所變化。對齊模塊326使用接收到的數(shù)據(jù)將數(shù)據(jù)格式化為適于發(fā)送至請求設(shè)備155并連接以形成響應的數(shù)據(jù)段。例如,來自第一數(shù)據(jù)包的一部分的數(shù)據(jù)可與來自第二數(shù)據(jù)包的一部分的數(shù)據(jù)結(jié)合。如果數(shù)據(jù)段大于請求設(shè)備155所請求的數(shù)據(jù),則對齊模塊326可移除不需要的數(shù)據(jù)。在一個實施例中,讀取數(shù)據(jù)流水線108包括讀取同步緩沖區(qū)328,該讀取同步緩沖區(qū)328在讀取數(shù)據(jù)流水線108進行處理之前,緩沖從固態(tài)存儲介質(zhì)110讀取的一個或多個請求數(shù)據(jù)包。讀取同步緩沖區(qū)328位于固態(tài)存儲時鐘域和局部總線時鐘域之間的邊界,并提供緩沖以解決時鐘域差異。
·
在另一個實施例中,讀取數(shù)據(jù)流水線108包括輸出緩沖區(qū)330,該輸出緩沖區(qū)在數(shù)據(jù)包傳輸至請求設(shè)備155之前從對齊模塊326接收請求的數(shù)據(jù)包并存儲數(shù)據(jù)包。輸出緩沖區(qū)330可解決當從讀取數(shù)據(jù)流水線108的各階段接收數(shù)據(jù)段時與當數(shù)據(jù)段傳輸至固態(tài)存儲控制器104的其他部分或傳輸至請求設(shè)備155時之間所產(chǎn)生的差異。輸出緩沖區(qū)330還允許數(shù)據(jù)總線204以大于讀取數(shù)據(jù)流水線108可保持的速率從讀取數(shù)據(jù)流水線108接收數(shù)據(jù),以提高數(shù)據(jù)總線204的運行效率。在一個實施例中,固態(tài)存儲控制器104包括配置模塊352,該配置模塊可設(shè)置和調(diào)整用于固態(tài)存儲介質(zhì)110的配置參數(shù),例如讀取電壓閾值等等。在另一個實施例中,配置模塊352可與固態(tài)存儲介質(zhì)110整合,使其可獨立于讀取數(shù)據(jù)流水線108和/或?qū)懭霐?shù)據(jù)流水線106運行。在某些實施例中,如下文中結(jié)合圖4和圖5的主動配置模塊424所詳述,配置模塊352基于開環(huán)形式的存儲單元的存儲介質(zhì)特性主動地確定固態(tài)存儲介質(zhì)110的存儲單元的一個或多個配置參數(shù),并具有少量的或沒有來自存儲單元的反饋。在所示實施例中,配置模塊352與存儲控制總線212和存儲總線控制器348連通,以將固態(tài)存儲介質(zhì)110的存儲單元配置為可使用各種配置參數(shù)。在另一個實施例中,配置模塊352管理固態(tài)存儲控制器104和/或固態(tài)存儲設(shè)備102的配置參數(shù)和/或設(shè)置。在其他實施例中,配置模塊352可直接或間接地從固態(tài)存儲介質(zhì)110接收數(shù)據(jù)集,以確定閉環(huán)形式的相應存儲單元的配置參數(shù),并以讀取數(shù)據(jù)集作為來自存儲單元的反饋。在某些實施例中,配置模塊352可從ECC解碼器322接收一個或多個請求的偏置數(shù)據(jù)包。在另一個實施例中,配置模塊352可從讀取同步緩沖區(qū)328、直接從存儲I/O總線210、從反向偏置模塊332等接收數(shù)據(jù)集。結(jié)合圖4更詳細地描述配置模塊352。下文結(jié)合圖3B描述了另一個實施例,其中配置模塊352從ECC解碼器322和反向偏置模塊332接收輸入。通常,配置模塊352可設(shè)置和調(diào)整固態(tài)存儲介質(zhì)110的一個或多個存儲單元的一個或多個配置參數(shù),例如設(shè)置和調(diào)整讀取電壓閾值、電阻率閾值、編程閾值、擦除閾值等。讀取電壓閾值是可將存儲在固態(tài)存儲介質(zhì)110的存儲單元中的離散值分離的電壓電平。不同固態(tài)存儲技術(shù)可使用除電壓之外的不同閾值以在離散狀態(tài)之間進行區(qū)分。例如,相變RAM或PRAM將數(shù)據(jù)存儲于在不同狀態(tài)下具有不同電阻率的硫系玻璃中。對于PRAM,配置模塊352可確定、設(shè)置和/或調(diào)整可區(qū)分離散存儲狀態(tài)的電阻率閾值。按照本公開,本領(lǐng)域的技術(shù)人員應該認識到配置模塊352可采用本文中結(jié)合讀取電壓閾值所述的基本上類似的方式確定、設(shè)置和調(diào)整電阻率閾值或其他配置參數(shù)。對于存儲單個二進制值的SLC存儲單 元,讀取電壓閾值為在二進制一狀態(tài)和二進制零狀態(tài)之間的邊界值。例如,在一個實施例中,讀取電壓電平高于讀取電壓閾值的存儲單元存儲二進制一,而讀取電壓電平低于讀取電壓閾值的存儲單元存儲二進制零。其他類型的存儲單元(如MLC存儲單元)可具有多個讀取電壓閾值以在兩個以上的離散狀態(tài)之間進行區(qū)分。例如,在一個實施例中,存儲兩位數(shù)據(jù)的MLC存儲單元可具有三個讀取電壓閾值以分離二進制值11、01、00和10。這三個示例讀取電壓閾值可為X伏特、y伏特和z伏特,如下文結(jié)合圖6C的讀取電壓閾值662所詳述。如果從存儲單元讀取的電壓在最低電壓Vmin到x伏特之間,則表明是二進制11狀態(tài)。在某些實施例中,Vmin可以是負電壓。如果從存儲單元讀取的電壓在X伏特到y(tǒng)伏特之間,則表明是二進制01狀態(tài)。如果從存儲單元讀取的電壓在y伏特到z伏特之間,則表明是二進制00狀態(tài)。如果從存儲單元讀取的電壓在z伏特到最高電壓Vmax伏特之間,則表明是二進制10狀態(tài)。Vmin、Vmax、X、y和z的電壓可基于存儲單元的制造商而有所不同。例如,讀取電壓可在-3. 5和5. 8伏特之間的范圍內(nèi)或在另一個預定電壓范圍內(nèi)。相似地,相對于讀取電壓閾值,二進制狀態(tài)11、01、00和10的變化順序可基于所用的編碼類型(例如格雷碼編碼類型和二進制代碼編碼類型等)而有所不同。下文結(jié)合圖6C描述了一個示例編碼類型。如圖6C所詳述,雖然單個MLC存儲單元存儲多個位,但是來自單個存儲單元的位可能不具有相鄰地址并且可能包含在不同的物理頁和邏輯頁中,諸如此類。在某些實施例中,讀取電壓閾值包括表示取值的電壓范圍(最大值和最小值),而不是指在離散值之間的邊界值。作為一個范圍的電壓閾值可通過更改該范圍的任一端或兩端的邊界值來調(diào)整。在一個實施例中,固態(tài)存儲介質(zhì)110的讀取電壓閾值或其他配置參數(shù)最初設(shè)定在可由制造商限定的默認電平。通常將此類配置參數(shù)默認電平設(shè)置為適用于固態(tài)存儲介質(zhì)110的多種一般用途。有利的是,配置模塊352的實施例允許基于更具體的使用特性以最佳方式運用固態(tài)存儲介質(zhì)110。在某些實施例中,配置模塊352重寫一個或多個配置參數(shù)的默認電平,并基于固態(tài)存儲介質(zhì)110的存儲介質(zhì)特性將一個或多個配置參數(shù)設(shè)置為不同電平。配置模塊352可將配置參數(shù)設(shè)置為與默認電平相比時固態(tài)存儲介質(zhì)110遇到的錯誤量減少的電平、設(shè)置為與默認電平相比時可檢測和糾正的錯誤量增多的電平、設(shè)置為與默認電平相比時固態(tài)存儲介質(zhì)110的每秒輸入輸出操作(“I0PS”)數(shù)量增多的電平、設(shè)置為與默認電平相比時固態(tài)存儲介質(zhì)110的使用壽命延長的電平和/或設(shè)置為與默認電平相比時固態(tài)存儲介質(zhì)110的實用性提高的電平。由于固態(tài)存儲介質(zhì)110的泄漏和其他干擾因素,存儲單元的讀取電壓電平和其他配置參數(shù)會隨時間推移而變化。泄漏率也會隨固態(tài)存儲介質(zhì)110的耗損和老化而增高。如果存儲單元的讀取電壓電平改變至超過讀取電壓閾值,造成從存儲單元讀取的數(shù)據(jù)值不同于寫入存儲單元的數(shù)據(jù)值,則會發(fā)生數(shù)據(jù)錯誤。在一個實施例中,配置模塊352調(diào)整固態(tài)存儲介質(zhì)110的一個或多個存儲單元的讀取電壓閾值或其他配置參數(shù),以補償存儲單元的讀取電壓電平的變化量。通過主動地和/或動態(tài)地調(diào)整讀取電壓閾值,配置模塊352可增加固態(tài)存儲介質(zhì)110中所存儲數(shù)據(jù)的保持率和/或可靠性,并延長固態(tài)存儲介質(zhì)110自身的使用壽命,從而提聞固態(tài)存儲介質(zhì)110的實用性。在一個實施例中,配置模塊352使用固態(tài)存儲介質(zhì)110的數(shù)據(jù)集或數(shù)據(jù)包的已知偏置調(diào)整讀取電壓閾值或其他配置參數(shù)。如上文結(jié)合偏置模塊318所述,偏置是一組位的位值的傾向、概率、趨勢或期望以呈現(xiàn)出特定的數(shù)據(jù)模式。偏置可以是自然特性、設(shè)計屬性、在存儲介質(zhì)上執(zhí)行操作的特性或隨機事件。偏置可趨向于二進制一、趨向于二進制零、趨向于二進制一和二進制零的平均數(shù)、趨向于某些位的某個二進制值、趨向于特定比率的二進制一和二進制零、趨向于二進制模式等等。在一個實施例中,配置模塊352接收的數(shù)據(jù)集或數(shù)據(jù)包具有已知的偏置。由于至少三個原因之一,該數(shù)據(jù)集或數(shù)據(jù)包具有已知偏置。第一,該數(shù)據(jù)集或數(shù)據(jù)包可具有已知偏置是因為當寫入數(shù)據(jù)集或數(shù)據(jù)包時偏置模塊318使數(shù)據(jù)集或數(shù)據(jù)包偏置。在一個實施例中,偏置模塊318和/或反向偏置模塊332與配置模塊352協(xié)作,從而將已知偏置傳送給配 置模塊352。第二,該數(shù)據(jù)集或數(shù)據(jù)包可具有已知偏置是因為數(shù)據(jù)集或數(shù)據(jù)包讀取自固態(tài)存儲介質(zhì)110的初始未寫入?yún)^(qū)域。例如,在一個實施例中,固態(tài)存儲介質(zhì)110的初始未寫入?yún)^(qū)域通常可具有在未寫入狀態(tài)下的全部為二進制一或全部為二進制零的已知偏置。第三,該數(shù)據(jù)集或數(shù)據(jù)包可具有已知偏置是因為ECC解碼器322已糾正數(shù)據(jù)集或數(shù)據(jù)包并且已確定存在錯誤的數(shù)據(jù)集的一個或多個位的初始正確值。數(shù)據(jù)集中的正確位值包括該已知偏置。由數(shù)據(jù)集中的錯誤引起的相對于已知偏置的偏置是一種錯誤偏置。在一個實施例中,配置模塊352確定了數(shù)據(jù)集或數(shù)據(jù)包的讀取偏置相對于已知偏置出現(xiàn)偏移,并基于讀取偏置與已知偏置之間的差異確定數(shù)據(jù)集偏移方向。在另一個實施例中,配置模塊352基于偏移方向調(diào)整與數(shù)據(jù)集相應的存儲單元的讀取電壓閾值或其他讀取閾值,例如電阻率閾值。例如,在一個實施例中,如果數(shù)據(jù)集基于已知偏置具有比預期多的二進制零,則配置模塊352可將存儲單元的讀取電壓閾值從先前的讀取電壓閾值降至新的讀取電壓閾值。在一個實施例中,對于MLC存儲單元,數(shù)據(jù)集可包括來自不同地址、不同頁等的數(shù)據(jù),以使得數(shù)據(jù)集包含相關(guān)存儲單元存儲的所有數(shù)據(jù)。配置模塊352可將讀取電壓閾值調(diào)整基于存儲單元的已知特性,例如基于存儲單元的物理和/或電氣結(jié)構(gòu)等用于存儲單元的編碼類型。在另一個實施例中,配置模塊352可改變、轉(zhuǎn)化或結(jié)合來自不同地址或頁的數(shù)據(jù),以便于確定MLC存儲單元的已知偏置、讀取偏置和/或相對于已知偏置的偏移。在另一個實施例中,對于MLC存儲單元,配置模塊352可基于MLC存儲單元所存儲的數(shù)據(jù)子集調(diào)整MLC存儲單元的讀取電壓閾值。在一個實施例中,配置模塊352可請求以新的讀取電壓閾值重新讀取數(shù)據(jù)集。配置模塊352可確定重新讀取的數(shù)據(jù)集是否具有與已知偏置相偏移的讀取偏置,并可以采用迭代方式將讀取電壓閾值調(diào)整為新的讀取電壓閾值,直到數(shù)據(jù)集的讀取偏置不再與已知偏置出現(xiàn)超過閾值量(可能為零)的偏移,并且直到ECC解碼器322可糾正數(shù)據(jù)集或者諸如此類中的錯誤。在一個實施例中,配置模塊352存儲新的讀取電壓閾值,使得新的讀取電壓閾值持續(xù)用于固態(tài)存儲介質(zhì)110的后續(xù)數(shù)據(jù)讀取。在另一個實施例中,固態(tài)存儲介質(zhì)110存儲該新的讀取電壓閾值以用于后續(xù)數(shù)據(jù)讀取。在一個實施例中,配置模塊352可監(jiān)測每個數(shù)據(jù)包讀取的讀取偏置,并將該數(shù)據(jù)包或其他數(shù)據(jù)集的偏置與已知偏置進行比較以響應讀取請求。在另一個實施例中,配置模塊352可監(jiān)測每個數(shù)據(jù)包讀取的讀取偏置,并可將該數(shù)據(jù)集或數(shù)據(jù)包的偏置與已知偏置進行比較以響應數(shù)據(jù)錯誤,例如ECC解碼器322無法糾正的位錯誤等。在另一個實施例中,配置模塊352不會監(jiān)測每個數(shù)據(jù)包讀取的讀取偏置,但可確定數(shù)據(jù)集或數(shù)據(jù)包的偏置并將其與已知偏置進行比較以響應數(shù)據(jù)錯誤。如下文結(jié)合圖4和圖5中的主動配置模塊424所述,在某些實施例中,代替基于讀取數(shù)據(jù)集或數(shù)據(jù)包的調(diào)整,或是除了基于讀取數(shù)據(jù)集或數(shù)據(jù)包的調(diào)整之外,配置模塊352基于存儲介質(zhì)特性,主動地設(shè)置或調(diào)整讀取電壓閾值或其他配置參數(shù)。在一個實施例中,固態(tài)存儲控制器104可從固態(tài)存儲介質(zhì)110中的多個通道、存儲元件、管芯、芯片、物理擦除塊(“PEB”)和存儲單元分組等讀取數(shù)據(jù)包中的數(shù)據(jù),其中每一項可具有獨立的讀取電壓閾值。通道、存儲元件、管芯、芯片和/或存儲單元分組的制造商可為由固態(tài)存儲控制器104獨立調(diào)整的每個通道、存儲元件、管芯、芯片和/或存儲單元分組制定讀取電壓閾值?;蛘叱酥猓ǖ?、存儲元件、管芯、芯片和/或存儲單元組的制造商可為由固態(tài)存儲控制器104作為單個組調(diào)整的通道組、存儲元件組、管芯組、芯片組和/或存儲單元分組的組制定讀取電壓閾值。 在一個實施例中,ECC編碼器304為每個通道、存儲元件、管芯、芯片、PEB或其他存儲單元組生成獨立的ECC校驗位。ECC校驗位由數(shù)據(jù)存儲在特定存儲單元分組上,而不是分布在多個分組中。如果每個存儲單元分組獨立地生成并存儲ECC校驗位,則為了響應數(shù)據(jù)錯誤,配置模塊352可將ECC校驗位和已知結(jié)構(gòu)用于如何將ECC校驗位寫入存儲單元分組以確定發(fā)生數(shù)據(jù)錯誤的存儲單元分組并調(diào)整這些分組的讀取電壓閾值。如果數(shù)據(jù)包的ECC校驗位存儲在多個存儲單元分組上,則配置模塊352可單獨地檢查來自每個存儲單元分組的數(shù)據(jù)集的讀取偏置并調(diào)整一個或多個相應的讀取電壓閾值。結(jié)合圖6A和6B更詳細地描述了具有多個通道的存儲元件陣列。在一個實施例中,讀取數(shù)據(jù)流水線108包括反向偏置模塊332,該反向偏置模塊可直接或間接地從ECC解碼器322接收一個或多個請求的偏置數(shù)據(jù)包,并在將一個或多個請求的數(shù)據(jù)包發(fā)送至解包器324之前通過反轉(zhuǎn)偏置模塊318的偏置過程以將一個或多個請求的數(shù)據(jù)包轉(zhuǎn)換回它們的初始源形式。在一個實施例中,反向偏置模塊332可使用偏置模塊318存儲的一個或多個指示器將偏置的數(shù)據(jù)包轉(zhuǎn)換回它們的初始源數(shù)據(jù)。在某些實施例中,反向偏置模塊332可將數(shù)據(jù)包或其他數(shù)據(jù)集的已知偏置、讀取偏置和/或已知偏置的偏移提供給配置模塊352,如下文結(jié)合圖3B所述。在另一個實施例中,反向偏置模塊332在不使用指示器的情況下將偏置的數(shù)據(jù)包轉(zhuǎn)換回它們的初始源數(shù)據(jù)。不使用指示器,反向偏置模塊332可實施偏置模塊318反向操作的算法。該算法可反轉(zhuǎn)每個接收到的數(shù)據(jù)包和/或接收到的所選數(shù)量的數(shù)據(jù)包的偏置。在所示實施例中,反向偏置模塊332位于ECC解碼器322和解包器324之間。在另一個實施例中,基于在寫入數(shù)據(jù)流水線106中偏置模塊318的位置,反向偏置模塊332可位于讀取數(shù)據(jù)流水線108的其他位置。在另一個實施例中,讀取數(shù)據(jù)流水線108包括解密模塊334,該解密模塊在將數(shù)據(jù)段發(fā)送至輸出緩沖區(qū)330之前解密由解包器324格式化的數(shù)據(jù)段。可使用接收到的密匙并結(jié)合使用讀取請求解密加密數(shù)據(jù)段,而該讀取請求會引發(fā)由讀取同步緩沖區(qū)328接收的請求數(shù)據(jù)包的檢索。解密模塊334可使用與第一數(shù)據(jù)包的讀取請求一起接收到的加密密鑰解密第一數(shù)據(jù)包,然后可用不同的加密密鑰解密第二數(shù)據(jù)包,或者可在未解密的情況下將第二數(shù)據(jù)包傳遞至讀取數(shù)據(jù)流水線108的下一階段。當數(shù)據(jù)包存儲為非秘密加密隨機數(shù)時,該隨機數(shù)結(jié)合加密密鑰用于解密該數(shù)據(jù)包。加密密鑰可從一個客戶端114、一個計算機112、密鑰管理器或其他管理加密密鑰的設(shè)備接收以用于固態(tài)存儲控制器104。在另一個實施例中,讀取數(shù)據(jù)流水線108包括可將解包器324格式化的數(shù)據(jù)段進行解壓的解壓模塊336。在一個實施例中,解壓模塊336使用存儲在數(shù)據(jù)包頭和容器標簽中其中一個或者兩個中的壓縮信息來選擇補充例程以用于由壓縮模塊312壓縮數(shù)據(jù)。在另一個實施例中,解壓模塊336使用的解壓例程由請求解壓數(shù)據(jù)段的設(shè)備決定。在另一個實施例中,解壓模塊336可根據(jù)基于每個數(shù)據(jù)結(jié)構(gòu)類型或數(shù)據(jù)結(jié)構(gòu)類別的默認設(shè)置選擇解壓例程。第一對象的第一數(shù)據(jù)包可覆蓋默認解壓例程,并且對于相同數(shù)據(jù)結(jié)構(gòu)類別和數(shù)據(jù)結(jié)構(gòu)類型第二數(shù)據(jù)結(jié)構(gòu)第二數(shù)據(jù)包可使用默認解壓例程,以及對于相同數(shù)據(jù)結(jié)構(gòu)類別和數(shù)據(jù)結(jié)構(gòu)類型的第三數(shù)據(jù)結(jié)構(gòu)的第三數(shù)據(jù)包可以不使用解壓。在另一個實施例中,讀取數(shù)據(jù)流水線108包括在讀取數(shù)據(jù)流水線108中具有一個或多個用戶可自定義功能的讀取程序模塊338。讀取程序模塊338具有與寫入程序模塊310 類似的特性,允許用戶為讀取數(shù)據(jù)流水線108提供自定義功能。讀取程序模塊338可位于如圖3A中所示的位置、可位于讀取數(shù)據(jù)流水線108中的另一個位置或可包括讀取數(shù)據(jù)流水線108內(nèi)的多個位置中的多個部分。另外,在讀取數(shù)據(jù)流水線108內(nèi)的多個位置中可存在多個獨立運行的讀取程序模塊338。本領(lǐng)域的技術(shù)人員可以認識到讀取數(shù)據(jù)流水線108中其他形式的讀取程序模塊338。與寫入數(shù)據(jù)流水線106—樣,讀取數(shù)據(jù)流水線108的各個階段可重新排列,并且本產(chǎn)品的一項功能是可以辨認讀取數(shù)據(jù)流水線108中各個階段的其他順序。固態(tài)存儲控制器104包括控制和狀態(tài)寄存器340和相應的控制隊列342。控制和狀態(tài)寄存器340和控制隊列342有利于對在寫入和讀取數(shù)據(jù)流水線106、108中與處理的數(shù)據(jù)相關(guān)的控制和排序命令和子命令。例如,打包器302中的數(shù)據(jù)段在控制隊列342可具有與ECC編碼器304相關(guān)的一個或多個相應控制命令或指令。打包數(shù)據(jù)段時,可在打包器302中執(zhí)行一些指令或命令。從數(shù)據(jù)段生成的新數(shù)據(jù)包傳遞至下一階段時,可通過控制和狀態(tài)寄存器340將其他命令或指令傳遞至下一控制隊列342。當各階段執(zhí)行各自的數(shù)據(jù)包時,每個流水線階段抽取合適的命令或指令,來將數(shù)據(jù)包傳輸至寫入流水線106,同時將相應的命令與指令載入到控制隊列342。類似的,當各自的數(shù)據(jù)包在相應流水線階段執(zhí)行時,用于從讀入數(shù)據(jù)流水線108請求數(shù)據(jù)包的命令或指令被載入到控制隊列342,同時每一個流水線階段抽取相應的命令或指令。本領(lǐng)域的技術(shù)人員應當了解控制和狀態(tài)寄存器340以及控制隊列342的其他特征和功能。該固態(tài)存儲控制器104和/或固態(tài)存儲設(shè)備102還可包括內(nèi)存庫交錯控制器344、同步緩沖區(qū)346、存儲總線控制器348和復用器(“MUX”)350。配置存儲單元圖3B所示為固態(tài)存儲控制器104的另一個實施例301的示意性框圖。在所示實施例301中,固態(tài)存儲控制器104包括設(shè)備因素模塊354、反向偏置模塊332、ECC解碼器322以及配置模塊352。雖未在圖3B中示出,但圖3B所示實施例中的固態(tài)存儲控制器104在某些實施例中也可包括來自如上所述的在圖3A中示出的固態(tài)存儲控制器104的一個或多個附加模塊或者其他元件。在所示實施例301中,配置模塊352接收來自反向偏置模塊332、ECC解碼器322和設(shè)備因素模塊354的輸入,并且配置模塊352基于輸入確定配置參數(shù)調(diào)整358。在其他實施例中,配置模塊352可接收僅來自反向偏置模塊332、僅來自ECC解碼器322、僅來自設(shè)備因素模塊354的輸入,或者接收來自反向偏置模塊332、ECC解碼器322、和/或設(shè)備因素模塊354的不同組合的輸入。在一個實施例中,反向偏置模塊332向配置模塊352提供數(shù)據(jù)集的已知偏置和/或?qū)嶋H讀取偏置。反向偏置模塊332可提供已知偏置作為基于可逆偏置算法計算的預期偏置,在此算法中,偏置模塊318應用于寫入固態(tài)存儲介質(zhì)110的數(shù)據(jù)。在某些實施例中,預期偏置可以是精確偏置,其中偏置模塊318使用可逆偏置算法將偏置置數(shù)據(jù)以精確匹配偏置。例如,偏置模塊318可添加填充數(shù)據(jù)到數(shù)據(jù)集,以便使數(shù)據(jù)集具有二進制一和二進制零的精確平衡,或者具有類似平衡,同時已知偏置也可為精確的。在另一個實施例中,反向偏置模塊332基于偏置模塊318應用于數(shù)據(jù)的可逆偏置算法可將預期偏置提供為一個范圍、一個分布、一個平均值、一個估值等。例如,因反向偏置模塊332將反向偏置算法應用于從固態(tài)存儲介質(zhì)110讀取的數(shù)據(jù),反向偏置模塊332可測量或獲悉隨時間變化的預期偏置。在一個實施例中,預期偏置可以是采用數(shù)學或者其他方式從偏置模塊318的可逆偏置算法中得到,該可逆偏置算法是可能或可行偏置的范圍或分布。·
例如,如果偏置模塊318將數(shù)據(jù)偏置至一半二進制一和一半二進制零的平衡,該平衡也可稱為直流(“DC”)平衡,偏置數(shù)據(jù)的實際偏置范圍可以在大約百分之四十六二進制一到百分之五十四二進制一之間,或者類似范圍內(nèi)。在其他實施例中,數(shù)據(jù)集的已知偏置和讀取偏置也可以基于多位符號或位模式,而不只基于單個二進制一和零等。雖然在已示出的實施例301中,反向偏置模塊332為配置模塊352提供輸入,但是在某些實施例中,偏置模塊318可為配置模塊352提供預期偏置作為已知偏置,而該已知偏置可以硬編碼或編程到配置模塊352等。在一個實施例中,反向偏置模塊332提供了從固態(tài)存儲介質(zhì)110讀取的數(shù)據(jù)集的讀取偏置到配置模塊352。例如,因反向偏置模塊332通過顛倒偏置模塊318的偏置過程將偏置數(shù)據(jù)包或其他數(shù)據(jù)集轉(zhuǎn)換回它們的原始源代碼形式,反向偏置模塊332可確定、測量或檢測數(shù)據(jù)包或其他數(shù)據(jù)集的讀取偏置。反向偏置模塊332可根據(jù)使用的偏置過程,在顛倒偏置過程之前、期間和之后確定讀取偏置。在某些實施例中,如果反向偏置模塊332確定數(shù)據(jù)集的讀取偏置與數(shù)據(jù)集的已知/預期偏置有偏差,那么反向偏置模塊332可向配置模塊352提供數(shù)據(jù)集,作出配置參數(shù)調(diào)整358,以調(diào)整數(shù)據(jù)集存儲單元,使數(shù)據(jù)集可重新讀取。在其他實施例中,如以上參照圖3A所述,配置模塊352可在反向偏置模塊332接收數(shù)據(jù)集前調(diào)整數(shù)據(jù)集的讀取電壓閾值。本領(lǐng)域的技術(shù)人員按照本說明書,將認識到配置模塊352、反向偏置模塊332和ECC解碼器322的其他布置方式,并且每個布置方式均在本發(fā)明范圍內(nèi)。在一個實施例中,ECC解碼器322為配置模塊352提供數(shù)據(jù)集的已知偏置和/或讀取偏置。ECC解碼器322可為具有位糾正狀態(tài)的數(shù)據(jù)集提供數(shù)據(jù)集的已知偏置。例如,一旦ECC解碼器322已經(jīng)糾正數(shù)據(jù)集中一個或多個可糾正的位錯誤,那么ECC解碼器322可向配置模塊352提供數(shù)據(jù)集的位的已糾正錯誤狀態(tài)作為已知偏置,根據(jù)該已知偏置,將數(shù)據(jù)集寫入固態(tài)存儲介質(zhì)110。在另外的實施例中,ECC解碼器322可為數(shù)據(jù)集提供讀取偏置作為錯誤偏置,該錯誤偏置指示當數(shù)據(jù)集從固態(tài)存儲介質(zhì)110讀取時,數(shù)據(jù)集中處于錯誤狀態(tài)的一個或多個位。因為對于可糾正的錯誤,ECC解碼器322可以確定數(shù)據(jù)集位(已知偏置)的精確、原始的、正確的值,并且確定數(shù)據(jù)集中處于錯誤狀態(tài)的位(錯誤偏置)的精確位置,配置模塊352可確定數(shù)據(jù)集對于已知偏置的精確偏差。為此,在某些實施例中,配置模塊352可使用來自ECC解碼器322的已知偏置和錯誤偏置(可用時)作出更多精確的配置參數(shù)調(diào)整358,而不使用來自反向偏置模塊332的預期偏置和讀取偏置。在一個實施例中,配置模塊352響應于數(shù)據(jù)集中一個或多個可糾正的位錯誤而使用來自ECC解碼器322的數(shù)據(jù)集的已知偏置和/或錯誤偏置。在另外的實施例中,配置模塊352使用基于可逆偏置算法的預期偏置作為已知偏置。在某些實施例中,預期偏置響應于數(shù)據(jù)集中一個或多個不可糾正的位錯誤而用作已知偏置。因為不可糾正的位錯誤狀態(tài)使偏置未定義,來自ECC解碼器322的錯誤偏置作為不可糾正的位錯誤可能不可用于配置模塊352。在某些實施例中,對于數(shù)據(jù)集中不可糾正的位錯誤,因這些錯誤更嚴重,數(shù)據(jù)集的讀·取偏置與數(shù)據(jù)集的已知預期偏置的偏差可能大于與可糾正位錯誤的已知預期偏置的偏差。由于數(shù)據(jù)集的讀取偏置與不可糾正位錯誤的數(shù)據(jù)集的已知預期偏置之間的偏差更大,來自反向偏置模塊332的偏置信息可為不可糾正的位錯誤提供好于可糾正位錯誤的配置參數(shù)調(diào)整358的方向指示器。在一個實施例中,設(shè)備因素模塊354為配置模塊352提供給固態(tài)存儲設(shè)備102的一個或多個統(tǒng)計數(shù)據(jù)。在某些實施例中,配置模塊352可基于一個或多個統(tǒng)計數(shù)據(jù)作出配置參數(shù)調(diào)整358,可為來自反向偏置模塊332和/或ECC解碼器322的信息補充一個或多個統(tǒng)計數(shù)據(jù)等。在一個實施例中,固態(tài)存儲設(shè)備102的一個或多個統(tǒng)計數(shù)據(jù)包括可能影響固態(tài)存儲設(shè)備102存儲單元讀取電壓的統(tǒng)計數(shù)據(jù)。例如,在某些實施例中,一個或多個統(tǒng)計數(shù)據(jù)可包括固態(tài)存儲設(shè)備102的溫度、固態(tài)存儲設(shè)備102的錯誤率(如不可糾正位錯誤率“UBER”等)、固態(tài)存儲設(shè)備102的擦除循環(huán)計數(shù)、固態(tài)存儲設(shè)備102的存儲請求延遲(如平均值、最大值或其他存儲請求執(zhí)行延遲)、固態(tài)存儲設(shè)備102的老化、和/或其他統(tǒng)計數(shù)據(jù)或特性。在所示實施例301中,設(shè)備因素模塊354接收來自一個或多個傳感器356的輸入。一個或多個傳感器356各自檢測固態(tài)存儲設(shè)備102的統(tǒng)計數(shù)據(jù)或特性,例如溫度、濕度、移動和/或其他統(tǒng)計數(shù)據(jù)。例如,在多個實施例中,一個或多個傳感器356可包括固態(tài)存儲設(shè)備102的溫度傳感器、濕度傳感器、加速計和/或另一類型的傳感器。在一個實施例中,設(shè)備因素模塊354和/或配置模塊352可接收來自一個或多個其他模塊或元件的固態(tài)存儲設(shè)備102的一個或多個統(tǒng)計數(shù)據(jù)。例如,設(shè)備因素模塊354和/或配置模塊352可接收來自ECC解碼器322的固態(tài)存儲設(shè)備102的錯誤率,例如UBER等。在多個實施例中,配置模塊352可將配置參數(shù)調(diào)整358建立在來自反向偏置模塊332,ECC解碼器322和/或設(shè)備因素模塊354的單個輸入或輸入組合的基礎(chǔ)上。在某些實施例中,來自反向偏置模塊332、ECC解碼器322和/或設(shè)備因素模塊354的一個或多個輸入可能不可用于數(shù)據(jù)集。例如,ECC解碼器322可能不會為具有不可糾正位錯誤的數(shù)據(jù)集提供錯誤偏置和已知偏置,當反向偏置模塊332確定預期偏置時在其學習期間,反向偏置模塊332可能不會為數(shù)據(jù)集提供已知的預期偏置或讀取偏置,設(shè)備因素模塊354可能不會在初始啟動期間提供一個或多個統(tǒng)計數(shù)據(jù)等。在一個實施例中,配置模塊352依照預定的輸入層級或等級,將配置參數(shù)調(diào)整358建立在最佳的可用輸入的基礎(chǔ)上。例如,配置模塊352可將配置參數(shù)調(diào)整358建立在來自ECC解碼器322的已知偏置和錯誤偏置(如可用)的基礎(chǔ)上;如果來自ECC解碼器322的輸入不可用,則建立在來自反向偏置模塊332的已知的預期偏置和讀取偏置的基礎(chǔ)上;如果來自ECC解碼器322和反向偏置模塊332的輸入均不可用,則建立在來自設(shè)備因素模塊354的一個或多個統(tǒng)計數(shù)據(jù)的基礎(chǔ)上。在另外的實施例中,如果來自反向偏置模塊332、ECC解碼器322和設(shè)備因素模塊354之中每一者的輸入不可用,配置模塊352響應于數(shù)據(jù)錯誤等可作出隨機配置參數(shù)調(diào)整 358。例如,配置模塊352可嘗試一個方向上的配置參數(shù)調(diào)整358,重新讀取數(shù)據(jù)集并檢查錯誤,如果錯誤持續(xù)存在,則嘗試另一方向上的配置參數(shù)調(diào)整358。在另一實施例中,配置模塊352可通過合并來自反向偏置模塊332、ECC解碼器322和/或設(shè)備因素模塊354的輸入,將配置參數(shù)調(diào)整358建立在多個輸入的基礎(chǔ)上。配置模塊352可縮放輸入、加權(quán)輸入、將輸入轉(zhuǎn)換為常用單位等以方便輸入的組合。例如,在一個實施例中,配置模塊352可將每一個輸入轉(zhuǎn)換成單個初始閾值調(diào)整量,然后對初始閾值調(diào)整量求和,以提供配置參數(shù)調(diào)整358。在該例中,配置模塊352可以基于預定的相關(guān)輸入的層級或等級加權(quán)每一個初始閾值調(diào)整量。例如,如果來自ECC解碼器322的已知偏置和錯誤偏置指示一個方向上的配置參數(shù)調(diào)整358,并且來自反向偏置模塊332的已知的預期偏置和讀取偏置指示另一方向上的配置參數(shù)調(diào)整358,在預定的層級或等級中具有更大權(quán)重或優(yōu)先級的輸入將指示配置參數(shù)調(diào)整358的方向。圖4為示出了配置模塊352的一個實施例的示意性框圖。在所示實施例中,配置模塊352包括數(shù)據(jù)集讀取模塊402、偏差模塊404、方向模塊406、調(diào)整模塊408、持久性模塊410、ECC模塊412、分配模塊414、數(shù)據(jù)集源模塊422、主動配置模塊424以及寫入電壓模塊416。寫入電壓模塊416可與配置模塊352集成,或者與配置模塊352分離。如以上參照圖3A和圖3B的配置模塊352所述的,配置模塊352可以是寫入數(shù)據(jù)流水線106的一部分、讀取數(shù)據(jù)流水線108的一部分、固態(tài)存儲介質(zhì)110的一部分等,使得配置模塊352可調(diào)整固態(tài)存儲介質(zhì)110 —個或多個存儲單元的讀取電壓閾值和/或另一配置參數(shù)。雖然具體實施例通過使用讀取電壓閾值作為示例性配置參數(shù)的方式進行描述,配置模塊352可以通過同樣的方式確定并調(diào)整其他配置參數(shù)。在一個實施例中,配置模塊352通過使用主動配置模塊424,以開環(huán)模型主動地設(shè)置配置參數(shù)。在另一個實施例中,配置模塊352通過使用數(shù)據(jù)集讀取模塊402、偏差模塊404、方向模塊406和/或調(diào)整模塊408,以閉環(huán)模型被動地設(shè)置配置參數(shù)。在某些實施例中,配置模塊352可對配置參數(shù)進行數(shù)層或數(shù)個階段的調(diào)整,通過使用主動配置模塊424主動地確定配置參數(shù),并在數(shù)據(jù)集讀取模塊402從固態(tài)存儲介質(zhì)110中讀取數(shù)據(jù)集時被動地調(diào)整配置參數(shù)。在一個實施例中,數(shù)據(jù)集讀取模塊402從固態(tài)存儲介質(zhì)110的存儲單元中讀取數(shù)據(jù)集。數(shù)據(jù)集讀取模塊402可以從固態(tài)存儲介質(zhì)110中直接或間接讀取數(shù)據(jù)集。例如,在一個實施例中,數(shù)據(jù)集讀取模塊402可以從讀取數(shù)據(jù)流水線108、固態(tài)存儲介質(zhì)110等中的另一模塊或元件中接收數(shù)據(jù)集。在一個實施例中,數(shù)據(jù)集讀取模塊402響應于測試操作而讀取數(shù)據(jù)集,數(shù)據(jù)集可以是作為測試操作一部分讀取的樣本數(shù)據(jù)集。在另外的實施例中,數(shù)據(jù)集讀取模塊402響應于客戶端發(fā)出的讀取請求而讀取數(shù)據(jù)集,并且數(shù)據(jù)集可以是客戶端請求的數(shù)據(jù)集。在一個實施例中,數(shù)據(jù)集可以是完整的數(shù)據(jù)包、數(shù)據(jù)包的一部分等。在另一個實施例中,數(shù)據(jù)集的大小可以通過測試操作、通過客戶端發(fā)出的讀取請求等進行設(shè)定。在另外的實施例中,數(shù)據(jù)集可以是來自固態(tài)存儲介質(zhì)110、與數(shù)據(jù)包或者其他數(shù)據(jù)結(jié)構(gòu)無關(guān)的原始數(shù)據(jù)。在另外的實施例中,數(shù)據(jù)集最初以已知偏置存儲在存儲單元中。例如,數(shù)據(jù)集可以是來自偏置模塊318已偏置的數(shù)據(jù)包,可以是來自處于原始狀態(tài)的固態(tài)存儲介質(zhì)110的存儲單元,這些存儲單元以例如固態(tài)存儲介質(zhì)110的制造商等設(shè)定的已知偏置來存儲默認數(shù)據(jù)或編程到固態(tài)存儲介質(zhì)110的其他數(shù)據(jù)。在一個實施例中,數(shù)據(jù)集的大小可相對于偏置模塊318用于偏置數(shù)據(jù)包的偏置方 案進行調(diào)整。例如,在一個實施例中,數(shù)據(jù)集的大小可以基于確定性序列的周期,例如偏置模塊318用于偏置數(shù)據(jù)包的偽隨機二進制序列的周期來進行調(diào)整。數(shù)據(jù)集的大小與偽隨機二進制序列的周期的整數(shù)倍越接近,所得數(shù)據(jù)集的偏置就越可能匹配已知偏置。在另外的實施例中,偏置模塊318可保證預定大小的數(shù)據(jù)集具有的偏置與已知偏置的偏差不超過閾值量。閾值量可以在零至給定的整數(shù)值或百分比值范圍內(nèi)變化。如上所述,偏置是在一組用以表示特定數(shù)據(jù)模式的位元中的位元值的傾向、概率、或趨向。在一個實施例中,已知偏置是二進制一和二進制零在一組位元或數(shù)個分組的位元組內(nèi)的已知比率。在一個實施例中,已知比率可以表示為零和一之間的比例或百分比,其中零比率表示排他性的一個值的偏置,而一比率表示排他性的其他值的偏置。在一個實施例中,已知比率大于零且小于一,說明已知比率為一個排他性二進制值和排他性相反的進制值之間的偏移量。如果已知比率大于零且小于一,數(shù)據(jù)集的讀取偏置中的偏差可在已知比率的任一方向出現(xiàn),同時仍然可通過配置模塊352進行檢測。在所示實施例中,數(shù)據(jù)集讀取模塊402包括監(jiān)控模塊418和讀取錯誤模塊420。在一個實施例中,數(shù)據(jù)集讀取模塊402可以通過使用監(jiān)控模塊418和/或讀取錯誤模塊420來讀取數(shù)據(jù)集。在一個實施例中,監(jiān)控模塊418對響應于計算機112或其他客戶端114發(fā)出的讀取請求而從固態(tài)存儲介質(zhì)Iio讀取的數(shù)據(jù)集進行監(jiān)控。監(jiān)控模塊418可以響應于存儲客戶端等發(fā)出的命令或指令,按照預定的時間間隔,監(jiān)控從固態(tài)存儲介質(zhì)110讀取的每一個數(shù)據(jù)集,或者選擇從固態(tài)存儲介質(zhì)110讀取的某些數(shù)據(jù)集。通過使用監(jiān)控模塊418監(jiān)控從固態(tài)存儲介質(zhì)110讀取的數(shù)據(jù)集,配置模塊352可動態(tài)調(diào)整固態(tài)存儲介質(zhì)110的讀取電壓閾值,防止發(fā)生不可糾正的數(shù)據(jù)錯誤。在一個實施例中,讀取錯誤模塊420響應于數(shù)據(jù)集中識別出的數(shù)據(jù)錯誤而讀取數(shù)據(jù)集。例如,ECC解碼器322或另一模塊可以確定數(shù)據(jù)錯誤是否已經(jīng)發(fā)生。在一個實施例中,數(shù)據(jù)錯誤是ECC解碼器322沒有足夠信息進行糾正的不可糾正的位錯誤。特別地,在一個實施例中,ECC解碼器322被配置成檢測和糾正數(shù)據(jù)集中處于錯誤狀態(tài)的多達一定數(shù)量的位(處于錯誤狀態(tài)的位的數(shù)量_#BER)。當處于錯誤狀態(tài)的位的數(shù)量超過#BER時,ECC解碼器322可以發(fā)出信號通知出現(xiàn)不可糾正的數(shù)據(jù)錯誤、不可糾正的位錯誤等。因固態(tài)存儲介質(zhì)110的一個或多個存儲單元中保留的電壓電平的偏移,可能出現(xiàn)數(shù)據(jù)錯誤。本文中存儲單元的保留電壓電平稱為讀取電壓電平。在一個實施例中,讀取錯誤模塊420讀取數(shù)據(jù)集,作為測試操作一部分。配置模塊352響應于數(shù)據(jù)錯誤、響應于計劃維護操作、響應于初始校準操作等而可執(zhí)行測試操作。數(shù)據(jù)錯誤模塊420使用的數(shù)據(jù)集可以來自客戶端請求的數(shù)據(jù)包,或者可以是作為測試操作一部分讀取的樣本數(shù)據(jù)。在某些實施例中,數(shù)據(jù)集讀取模塊402在響應于測試操作而定期或在監(jiān)控期間等讀取樣本數(shù)據(jù)的數(shù)據(jù)集時,可調(diào)整樣本數(shù)據(jù)集的大小,使其處于固態(tài)存儲介質(zhì)110的剩余讀取帶寬范圍內(nèi)。在一個實施例中,通過調(diào)整樣本數(shù)據(jù)的大小使其位于固態(tài)存儲介質(zhì)110的剩余讀取帶寬范圍內(nèi),讀取樣本數(shù)據(jù)可能不會影響到用于向固態(tài)存儲介質(zhì)110提出讀取請求的讀取帶寬或固態(tài)存儲介質(zhì)110的讀取通量。在一個實施例中,數(shù)據(jù)集讀取模塊402可以從固態(tài)存儲介質(zhì)110讀取具有比讀取請求所要求數(shù)據(jù)量更大的數(shù)據(jù)量的數(shù)據(jù)集,為配置模塊352提供更大的位樣本以用來確定讀取電壓閾值的調(diào)整等。在某些實施例中,大于 所請求數(shù)據(jù)量的樣本大小可提高讀取電壓閾值調(diào)整的精確度。例如,如果用戶應用請求512字節(jié)的數(shù)據(jù),而固態(tài)存儲介質(zhì)110在一個讀取請求中可以與512字節(jié)數(shù)據(jù)基本相同的速度讀取800字節(jié)的數(shù)據(jù),在一個實施例中,那么數(shù)據(jù)集讀取模塊402可以讀取800字節(jié)的數(shù)據(jù)集,以便調(diào)整讀取電壓閾值在,不影響操作的讀取時間的前提下,向用戶應用提供請求的512字節(jié)(800字節(jié)數(shù)據(jù)集的子集)。在一個實施例中,數(shù)據(jù)集讀取模塊402設(shè)置了最少數(shù)據(jù)集請求量,即便讀取請求是要小于最少數(shù)據(jù)請求量,也為每個讀取請求檢索至少具有最少數(shù)據(jù)集請求量的數(shù)據(jù)。在某些實施例中,最少數(shù)據(jù)集請求量可經(jīng)選擇以便位于一個或多個ECC數(shù)據(jù)塊界限內(nèi)、一頁或多頁內(nèi)、一個或多個擦除塊內(nèi)、固態(tài)存儲介質(zhì)HO的剩余帶寬內(nèi)等。在一個實施例中,最少數(shù)據(jù)集請求量可基于固態(tài)存儲介質(zhì)110、讀取數(shù)據(jù)流水線108等的結(jié)構(gòu)或幾何形狀進行選擇。在一個實施例中,偏差模塊404確定了數(shù)據(jù)集的讀取偏置與數(shù)據(jù)集初始存儲時具有的已知偏置的偏差。當讀取偏置與已知偏置存在差異時,數(shù)據(jù)集的讀取偏置與已知偏置有偏差。在一個實施例中,當已知偏置是精確的情況下,例如在已知偏置包括糾錯位值或偏置模塊318偏向精確偏置的情況下,偏差模塊404可以確定讀取偏置和已知偏置間的任何差值都包含與已知偏置的偏差。在其他實施例中,已知偏置可包括平均偏置、估計偏置、偏置分布、偏置范圍等。在這些實施例中,偏差模塊404可以確定在已知偏置分布范圍外的讀取偏置、遠離已知偏置的至少一個預定偏差閾值等與已知偏置有偏差。在一個實施例中,數(shù)據(jù)集讀取偏置和已知偏置之間的差值可以是二進制一與二進制零比率的差值。在其他實施例中,數(shù)據(jù)集的偏置和已知偏置之間的差值可以是二進制模式的差值、多位二進制符號的差值等。如以上參照圖3B所述的,在多個實施例中,偏差模塊404可以接收來自ECC解碼器322、來自反向偏置模塊332等的數(shù)據(jù)集的原始的已知偏置和/或讀取偏置。在一個實施例中,偏差模塊404通過比較讀取偏置和已知偏置來確定數(shù)據(jù)集的讀取偏置是否與已知偏置有偏差。偏差模塊404可以通過如下方式比較讀取偏置和已知偏置計算數(shù)據(jù)集中二進制一的數(shù)量和二進制零的數(shù)量以便確定數(shù)據(jù)集中二進制一和二進制零的比率,并且將該比率與已知偏置的比率進行比較。在另外的實施例中,偏差模塊404可以搜索和/或計算已知偏置的預期模式或其他預期屬性的發(fā)生率,并且將數(shù)據(jù)集中類似搜索和/或計算的結(jié)果與預期屬性進行比較。在某些實施例中,ECC解碼器322通過為配置模塊352等提供數(shù)據(jù)集的錯誤偏置,向偏差模塊404指示數(shù)據(jù)集的讀取偏置與已知偏置有偏差。在已知偏置包括位模式、多位二進制符號等的實施例中,偏差模塊404可以對數(shù)據(jù)集的位進行轉(zhuǎn)換,可以分析數(shù)據(jù)集的位子集等,以便確定數(shù)據(jù)集的讀取偏置是否與已知偏置有偏差。例如,偏差模塊404可以基于用于固態(tài)存儲介質(zhì)110的存儲單元的編碼類型,例如格雷碼編碼類型、二進制代碼編碼類型等,進行轉(zhuǎn)換。在某些實施例中,轉(zhuǎn)換可以基于存儲介質(zhì)110的存儲單元的物理和/或電氣結(jié)構(gòu)進行。例如,如下文參照圖6C所述的,多級存儲單元存儲至少一個最高有效位(“MSB”)和一個最低有效位(“LSB”)。在某些實施例中,MSB和LSB盡管屬于相同物理多級存儲單 元的一部分,也可分配至固態(tài)存儲介質(zhì)110的不同頁。在某些實施例中,多個多級存儲單元在固態(tài)存儲介質(zhì)110 (例如NAND閃存)上組織構(gòu)成物理頁。在某些固態(tài)存儲介質(zhì)110中,物理頁是可寫入固態(tài)存儲介質(zhì)110的最小單元。在此類實施例中,多級存儲單元可以與頁對相關(guān)。頁對是與單組物理多級存儲單元相關(guān)聯(lián)的一對頁(較高頁和較低頁)。例如,多級存儲單元可與包括較高頁和較低頁的頁對相關(guān)聯(lián)。較高頁可以與MSB相關(guān)聯(lián),較低頁可以與LSB相關(guān)聯(lián),反之亦然。因此,在同一多級存儲單元中的MSB和LSB可以在存儲設(shè)備102中具有不同的地址。在某些實施例中,較高頁包括多個多級存儲單元的MSB,較低頁包括同一多級存儲單元的LSB。因此,涉及較高頁的寫入可只造成相關(guān)多級存儲單元中MSB的改變,而涉及較低頁的寫入可只造成相關(guān)多級存儲單元中LSB的改變。如下文參照圖6C所詳述的,在某些實施例中,數(shù)據(jù)集讀取模塊402可以讀取只包括由多級存儲單元分組存儲的位子集,偏差模塊404可基于位子集確定數(shù)據(jù)集的讀取偏置是否與已知偏置有偏差。例如,數(shù)據(jù)集可以只包括來自LSB(較低頁)的數(shù)據(jù)值,只包括來自MSB(較高頁)的值等。在另一個實施例中,偏差模塊404可以至少部分基于固態(tài)存儲介質(zhì)110使用的編碼類型、存儲介質(zhì)110存儲單元的物理和/或電氣結(jié)構(gòu)等,來確定數(shù)據(jù)集的讀取偏置是否與已知偏置有偏差。在其他實施例中,偏差模塊404可以對數(shù)據(jù)集(該數(shù)據(jù)集可組合來自不同頁的數(shù)據(jù)以在單個數(shù)據(jù)集中包括LSB和MSB位)執(zhí)行轉(zhuǎn)換,從而協(xié)調(diào)來自不同數(shù)據(jù)集的LSB和MSB位和/或頁等。在一個實施例中,偏差模塊404檢測數(shù)據(jù)集讀取模塊402讀取的每個數(shù)據(jù)集的讀取偏置。例如,如果數(shù)據(jù)集讀取模塊402使用監(jiān)控模塊418,隨著數(shù)據(jù)集從固態(tài)存儲介質(zhì)110讀取,偏差模塊404可以定期監(jiān)控這些數(shù)據(jù)集的讀取偏置。在一個實施例中,監(jiān)控模塊418可以比較由客戶端請求的每個數(shù)據(jù)集的讀取偏置。在另外的實施例中,監(jiān)控模塊418可以檢查請求數(shù)據(jù)集的讀取偏置,例如每隔一段時間進行檢查和/或響應于命令進行檢查等。在另一個實施例中,如果數(shù)據(jù)集讀取模塊402使用讀取錯誤模塊420,偏差模塊404則可以響應于數(shù)據(jù)錯誤而檢查數(shù)據(jù)集的讀取偏置,作為測試操作一部分等。在一個實施例中,方向模塊406確定數(shù)據(jù)集偏移的方向。在一個實施例中,偏移的方向是數(shù)據(jù)集讀取偏置和已知偏置之間的差值。方向或差值可以表示為數(shù)值、符號(即正或負)、關(guān)系(即大于、小于)、方向(即上、下)等。在某些實施例中,方向模塊406可以基于固態(tài)存儲介質(zhì)110的存儲單元所用的編碼類型、基于存儲介質(zhì)110的存儲單元的物理和/或電氣結(jié)構(gòu)等,來確定偏移方向。例如,方向模塊406可檢查數(shù)據(jù)集中的偏置偏差,以基于存儲介質(zhì)類型(2位MLC、3位MLC、n位MLC)、讀取多階段編程模型的哪頁、固態(tài)存儲介質(zhì)110的編碼類型(例如格雷碼編碼類型、二進制代碼編碼類型等)和/或所確定偏差的大小,來確定偏移方向。在一個實施例中,方向模塊406可以通過從數(shù)據(jù)集讀取偏置表示中減去已知偏置的比率、比例或其他表示來確定方向。例如,在一個實施例中,方向模塊406可以從數(shù)據(jù)集中的二進制一、零、多位二進制符號等的比例減去基于已知偏置所預期的二進制一、零、多位二進制符號等的比例。根據(jù)是否比較二進制一的比率或是否比較二進制零的比率,以及是否高電壓表示二進制一或二進制零,或者根據(jù)存儲單元的其他具體結(jié)構(gòu),方向模塊406可以反轉(zhuǎn)差值或執(zhí)行另一轉(zhuǎn)換以便確定方向。在來自ECC解碼器322的錯誤偏置可用的實施例中,方向模塊406可以按照錯誤偏置的指示,基于處于錯誤狀態(tài)的數(shù)據(jù)集的一個或多個位來確定偏移方向。在其他實施例 中,如上文參照圖3B所述的,方向模塊406可以基于來自反向偏置模塊332、ECC解碼器322和/或設(shè)備因素模塊354的輸入而合并方向,從而確定偏移方向等。在一個實施例中,二進制零由低于讀取電壓閾值的電壓表示,二進制一由高于讀取電壓閾值的電壓表示。在一個例子中,存儲具有O. 5的已知偏置的數(shù)據(jù)集,表示數(shù)據(jù)集的預期偏置應為一半二進制一或為直流平衡的。在此例子中,數(shù)據(jù)集從存儲單元讀取,并且數(shù)據(jù)集具有O. 7的讀取偏置,意味著數(shù)據(jù)位的百分之七十為二進制一。在一個實施例中,為確定方向,方向模塊406從數(shù)據(jù)集的讀取偏置O. 7中減去預期偏置O. 5,得到方向O. 2。方向可以是完整結(jié)果(即“O. 2”)、結(jié)果符號(即“正”)、關(guān)系(即“大于”)、方向(即“上”)或者另一表示預期偏置O. 5和讀取偏置O. 7之間差值的指示符。在另一個例子中,如果數(shù)據(jù)集的讀取偏置為O. 3,意味著數(shù)據(jù)位的百分之三十是二進制一,方向模塊406在一個實施例中將從數(shù)據(jù)集的讀取偏置O. 3中減去預期偏置O. 5,得到差值-O. 2。在此例子中,方向可以與第一個例子中相反,即“-O. 2”、“負”、“小于”、“下”
坐寸ο因為預期偏置是已知的,相對于已知偏置比較讀取偏置指示本應滿足已知偏置的某些位現(xiàn)在并未滿足,這可能是由于數(shù)據(jù)錯誤或由于位寫入后存儲單元內(nèi)存儲的電壓電平有變化。此外,確定差值為正或負指示讀取電壓是否應增加或減少,使得數(shù)據(jù)集的重新讀取將產(chǎn)生與已知偏置相同或接近的讀取偏置。在一個實施例中,配置模塊352按照與方向模塊406指示的方向相同的方向?qū)ψx取電壓電平進行調(diào)整。有利的是,具有關(guān)于調(diào)整讀取電壓閾值方向的指示可使識別新的調(diào)整后電壓電平所需的時間和資源顯著減少。如果創(chuàng)建讀取電壓閾值的方向未知,識別新的讀取電壓閾值可能要求試誤法的勞動和時間密集過程,此時會對不同的可能讀取電壓閾值進行設(shè)置、隨后測試并隨后按需求進行調(diào)整??赡苄枰诉^程來找到可使數(shù)據(jù)包的重新讀取基本匹配已知偏置的讀取電壓閾值。在一個實施例中,調(diào)整模塊408基于方向模塊406確定的偏移方向,調(diào)整固態(tài)存儲介質(zhì)110的存儲單元的讀取電壓閾值。在一個實施例中,調(diào)整模塊408可以在偏移方向上、遠離偏移方向等的方向上對讀取電壓閾值進行調(diào)整。例如,在一個實施例中,方向模塊406檢測出已知偏置中二進制一多于預期數(shù)量時,調(diào)整模塊408可對此作出響應,從前一讀取電壓閾值提高讀取電壓閾值,而在檢測出二進制一少于預期數(shù)量時,則降低讀取電壓閾值。雖然相對方向可以基于固態(tài)存儲介質(zhì)110的存儲單元特性以及采用的存儲方案來進行改變,調(diào)整模塊408可調(diào)整讀取電壓閾值,以校正或補償由方向模塊406確定的差值。在另外的實施例中,調(diào)整模塊408基于由方向模塊406確定的方向振幅或差值大小,來確定讀取電壓閾值的調(diào)整量。在另一個實施例中,調(diào)整模塊408可以縮放或以其他方式調(diào)整來自方向模塊406的振幅,并將讀取電壓閾值調(diào)整到調(diào)整量。例如,在一個實施例中,調(diào)整模塊408可以基于方向振幅,在單次調(diào)整中以數(shù)個調(diào)整水平調(diào)整讀取電壓閾值。在另外的實施例中,調(diào)整模塊408可基于諸如固態(tài)存儲介質(zhì)110的老化、耗損量、使用歷史、錯誤歷史或其他方面等附加因素,來選擇讀取電壓閾值的調(diào)整量。如上文參照圖3B所述的,在某些實施例中,調(diào)整模塊408可基于配置模塊352從設(shè)備因素模塊354中 接收到的、固態(tài)存儲設(shè)備102的一個或多個統(tǒng)計數(shù)據(jù),來作出讀取電壓閾值調(diào)整。在另一個實施例中,調(diào)整模塊408使用搜索算法,基于偏移方向來確定讀取電壓閾值。例如,從當前讀取電壓閾值偏移的方向上的電壓范圍可以是搜索算法的搜索空間。在一個實施例中,調(diào)整模塊408可以使用線性搜索、二分搜索等來確定讀取電壓閾值。為檢查作為搜索算法一部分的每一個步驟,數(shù)據(jù)集讀取模塊402可以響應于每一次調(diào)整而重新讀取數(shù)據(jù)集,并且偏差模塊404可以重新確定是否重新讀取數(shù)據(jù)集的讀取偏置與已知偏置有偏差。方向模塊406可以重新確定重新讀取數(shù)據(jù)集的偏移方向,以便進行進一步的搜索。調(diào)整模塊408可以基于重新確定的偏移方向,反復重新調(diào)整讀取電壓閾值,直到偏差模塊404確定重新讀取的數(shù)據(jù)集的讀取偏置與已知偏置無偏差,或者直到每個讀取電壓閾值電平已經(jīng)得到測試,和/或直到數(shù)據(jù)集可使用ECC校驗位等進行校正。在一個實施例中,一旦重試閾值已滿足,調(diào)整模塊408就停止讀取電壓閾值的重新調(diào)整。例如,如果ECC解碼器322不能校正數(shù)據(jù)錯誤和/或如果數(shù)據(jù)集的重試閾值已滿足時數(shù)據(jù)集的讀取偏置繼續(xù)從已知偏置偏移,那么調(diào)整模塊408可以停止對讀取電壓閾值進行調(diào)整。重試閾值可以基于一組可能的讀取電壓閾值電平等進行選擇。在一個實施例中,重試閾值設(shè)置調(diào)整模塊408可以調(diào)整讀取電壓閾值的次數(shù)。在另一個實施例中,重試閾值可以設(shè)置調(diào)整模塊408可進行讀取電壓閾值調(diào)整的時間量。在某些實施例中,重試閾值滿足時,固態(tài)存儲控制器104可對此作出響應,采取進一步的補救措施,例如使與數(shù)據(jù)集相關(guān)聯(lián)的存儲單元停止工作、邏輯替換與數(shù)據(jù)集相關(guān)聯(lián)的存儲單元等。在一個實施例中,即使偏差模塊404確定數(shù)據(jù)集的讀取偏置與已知偏置有偏差、數(shù)據(jù)錯誤已經(jīng)發(fā)生、重試閾值未能滿足等,調(diào)整模塊408也不會調(diào)整讀取電壓閾值。在某些實施例中,調(diào)整模塊408可以基于與存儲單元組的調(diào)整相關(guān)的一個或多個風險因素,選擇性地調(diào)整讀取電壓閾值。例如,風險因素可以包括存儲單元組的錯誤率(例如UBER等)、存儲單元組的擦除循環(huán)計數(shù)、存儲單元組的存儲請求延遲(例如平均值、最大值或其他存儲請求執(zhí)行延遲)、存儲單元組的老化、存儲單元組的讀取電壓閾值的先前調(diào)整次數(shù)、和/或其他潛在風險因素。在一個實施例中,一個或多個風險因素滿足風險閾值時,調(diào)整模塊408可對此作出響應,取消或延緩讀取電壓閾值的調(diào)整。在另外的實施例中,一個或多個風險因素滿足風險閾值時,固態(tài)存儲控制器104可對此作出響應,采取進一步的補救措施。在一個實施例中,調(diào)整模塊408使用由固態(tài)存儲介質(zhì)110的制造商提供的程序或命令,對讀取電壓閾值進行調(diào)整。例如,在一個實施例中,調(diào)整模塊408可以通過如下方式調(diào)整讀取電壓閾值在固態(tài)存儲介質(zhì)110的設(shè)置寄存器中寫入值,發(fā)送讀取電壓閾值參數(shù)到固態(tài)存儲介質(zhì)110,或以其他方式將讀取電壓閾值的調(diào)整傳送給固態(tài)存儲介質(zhì)110。調(diào)整模塊408可以讀取電壓閾值的絕對值、讀取電壓閾值的調(diào)整量等形式傳送調(diào)整。在另外的實施例中,固態(tài)存儲介質(zhì)110提供讀取電壓閾值可以調(diào)整到的多個離散電平(即2和15之間的不同電平)。在其他實施例中,讀取電壓閾值調(diào)整的量級可以由固態(tài)存儲介質(zhì)110的制造商或供應商定義或推薦。在一個實施例中,調(diào)整模塊408單獨調(diào)整固態(tài)存儲介質(zhì)110的管芯、芯片、PEB或其他離散段的讀取電壓閾值。在另外的實施例中,調(diào)整模塊408為每個存儲單元調(diào)整多個讀取電壓閾值。例如,在一個實施例中,固態(tài)存儲介質(zhì)110的存儲單元為MLC存儲單元,每個單元具有多個讀取電壓閾值(即一個2位MLC存儲單元可以具有三個不同的讀取電壓閾值)。調(diào)整模塊408可以將多個讀取電壓閾值中的每個一起移動,或者單個地移動它們。
在存儲單元具有多個讀取電壓閾值的實施例中,每個讀取電壓閾值以一定的間距分隔。在一個實施例中,各讀取電壓閾值之間的間隔是一致的。在另外的實施例中,調(diào)整模塊408使用單一命令或程序?qū)Χ鄠€讀取電壓閾值進行調(diào)整,并且多個讀取電壓閾值之間的間隔根據(jù)調(diào)整量進行縮放。例如,在一個實施例中,讀取電壓閾值之間的間隔可以在讀取電壓閾值更高時增大,并在讀取電壓閾值更低時減小。在一個實施例中,根據(jù)調(diào)整量縮放讀取電壓閾值間的間隔,使讀取電壓閾值分布更均勻,因此范圍端點處電壓的范圍并未縮小或擴大,同時中間范圍保持不變。在一個實施例中,持久性模塊410存儲讀取電壓閾值的狀態(tài)。在一個實施例中,持久性模塊410是固態(tài)存儲控制器104的一部分。在另一個實施例中,持久性模塊410可以隨著每一次讀取操作,將讀取電壓閾值發(fā)送到固態(tài)存儲介質(zhì)110。在另外的實施例中,持久性模塊410是固態(tài)存儲介質(zhì)110的一部分,可使固態(tài)存儲介質(zhì)110保持調(diào)整模塊408作出的讀取電壓閾值調(diào)整。在一個實施例中,持久性模塊410存儲多個讀取電壓閾值,每個讀取電壓閾值針對固態(tài)存儲介質(zhì)110的存儲單元不同段或不同分組。在一個實施例中,固態(tài)存儲介質(zhì)110的制造商提供命令或程序,以便調(diào)整預定存儲單元組(例如芯片、物理擦除塊、物理頁或管芯)的讀取電壓閾值。在另外的實施例中,持久性模塊410存儲小于預定存儲單元組的存儲單元子分組的讀取電壓閾值,調(diào)整模塊408可以使用制造商提供的命令或程序?qū)υ撟x取電壓閾值進行調(diào)整。在另一個實施例中,當從基于持久性模塊410存儲的讀取電壓閾值的子分組讀取數(shù)據(jù)集時,調(diào)整模塊408則可以重新調(diào)整讀取電壓閾值。子分組的例子可以包括PEB、頁、ECC數(shù)據(jù)塊、或存儲單元組的其他物理或邏輯分區(qū)。例如,響應于存儲單元第一子分組中數(shù)據(jù)集的讀取請求,調(diào)整模塊408可以將整個存儲單元組的讀取電壓閾值調(diào)整到持久性模塊410為第一子分組存儲的電平。在一個實施例中,響應于第二子分組中數(shù)據(jù)集的讀取請求,調(diào)整模塊408可以將整個分組的讀取電壓閾值重新調(diào)整到持久性模塊410為第二子分組存儲的電平。這使配置模塊352可以在相比固態(tài)存儲介質(zhì)110可用的命令或程序中所提供的范圍更精細的范圍內(nèi)對固態(tài)存儲介質(zhì)110的讀取電壓閾值進行調(diào)整。例如,制造商可以提供用于調(diào)整管芯、芯片或其他存儲單元組的讀取電壓閾值的命令、程序或方法,調(diào)整模塊408可以依照上述命令、程序或方法調(diào)整單個PEB或其他子分組的讀取電壓閾值。在一個實施例中,配置模塊352響應于上述不可糾正的(在本文中指ECC解碼器322不可糾正的,如本文所討論,在讀取電壓閾值調(diào)整后可能進行糾正)數(shù)據(jù)錯誤而處理數(shù)據(jù)集,并且一次或多次調(diào)整讀取電壓閾值,直到數(shù)據(jù)錯誤不再不可糾正,并可使用數(shù)據(jù)集ECC校驗位進行修復為止。在一個實施例中,ECC模塊412與ECC解碼器322協(xié)作,確定ECC解碼器322是否可以糾正數(shù)據(jù)集中的錯誤?;蛘?,配置模塊352與ECC解碼器322協(xié)作,確定ECC解碼器322是否可以糾正數(shù)據(jù)集中的錯誤。在一個實施例中,配置模塊352重復上文所述的處理步驟,直到ECC模塊412確定ECC解碼器322可以糾正錯誤為止。例如,在另外的實施例中,數(shù)據(jù)集讀取模塊402、偏差模塊404、方向模塊406和調(diào)整模塊408可以重復讀取數(shù)據(jù)集,確定數(shù)據(jù)集的讀取偏置與已知偏置的偏差,確定數(shù)據(jù)集的偏移方向,并且如上文所述調(diào)整讀取電壓閾值,直到ECC模塊412確定ECC解碼器322可以糾正錯誤為止。 如參照圖6A和6B詳細描述的,在一個實施例中,數(shù)據(jù)集可以跨越數(shù)個管芯、芯片、通道、存儲元件、PEB或其他存儲單元組進行存儲。在一個實施例中,ECC校驗位可以針對每個存儲單元組進行獨立計算和存儲。在另一個實施例中,ECC校驗位與每個存儲單元組存儲在一起,例如,存儲為ECC數(shù)據(jù)塊的一部分。在另外的實施例中,ECC模塊412使用ECC校驗位,確定在固態(tài)存儲介質(zhì)110的哪個管芯、芯片、通道、存儲元件、PEB或其他存儲單元組中發(fā)生了不可糾正的錯誤。在一個實施例中,ECC模塊412使用ECC校驗位驗證每個存儲單元組的數(shù)據(jù)集,以便確定一組存儲單元組中具體哪個組出現(xiàn)了不可糾正的錯誤。在一個實施例中,配置模塊352調(diào)整出現(xiàn)不可糾正錯誤的具體存儲單元組中的一個或多個讀取電壓閾值。在一個實施例中,分配模塊414確定數(shù)據(jù)集的讀取偏置在已知偏置的預期分布范圍內(nèi),不應進行額外的讀取電壓閾值調(diào)整。在另外的實施例中,數(shù)據(jù)集讀取模塊402、偏差模塊404、方向模塊406和調(diào)整模塊408繼續(xù)使用新的讀取電壓閾值重新讀取數(shù)據(jù)集,重新確定數(shù)據(jù)集的讀取偏置與已知偏置的偏差,重新確定數(shù)據(jù)集的偏移方向,并重新調(diào)整讀取電壓閾值,直到分配模塊414確定數(shù)據(jù)集的讀取偏置在預期分布范圍內(nèi)。在一個實施例中,分配模塊414可以與偏差模塊404協(xié)作或集成。在一個實施例中,配置模塊352使用ECC模塊412或分配模塊414來確定讀取電壓閾值應進行調(diào)整或完成調(diào)整的時間。在另外的實施例中,分配模塊414將來自數(shù)個管芯、芯片、通道、存儲元件、PEB或固態(tài)存儲介質(zhì)110其他存儲單元組的數(shù)據(jù)集的讀取偏置與已知偏置分布進行比較,以便確定在哪個存儲單元組中發(fā)生了錯誤,同時配置模塊352調(diào)整出現(xiàn)錯誤的存儲單元組的一個或多個讀取電壓閾值。在一個實施例中,ECC模塊412和/或分配模塊414與數(shù)據(jù)集源模塊422協(xié)作。在一個實施例中,數(shù)據(jù)集源模塊422確定從哪個具體存儲單元組讀取數(shù)據(jù)集。例如,數(shù)據(jù)集源模塊422可以確定哪個管芯、芯片、通道、存儲元件、PEB或其他存儲單元組是數(shù)據(jù)集源。在一個實施例中,偏差模塊404、ECC模塊412和/或分配模塊414確定數(shù)據(jù)集具有與已知偏置有偏差的讀取偏移、具有數(shù)據(jù)錯誤等時,數(shù)據(jù)集源模塊422對此作出響應,確定從哪個具體存儲單元組讀取數(shù)據(jù)。在一個實施例中,數(shù)據(jù)集源模塊422基于數(shù)據(jù)集序列內(nèi)的數(shù)據(jù)集位置,確定從哪個具體存儲單元組讀取數(shù)據(jù)集。例如,在一個實施例中,固態(tài)存儲介質(zhì)110可以具有多個存儲單元組,每個存儲單元組可以在讀取操作期間并行讀取。在一個實施例中,數(shù)據(jù)集源模塊422可以使用關(guān)于寫入數(shù)據(jù)流水線106和/或讀取數(shù)據(jù)流水線108如何處理數(shù)據(jù)的已知信息,以及關(guān)于多個存儲單元組的已知信息,來確定從哪個存儲單元組讀取數(shù)據(jù)集。例如,在一個實施例中,寫入數(shù)據(jù)流水線106和讀取數(shù)據(jù)流水線108可以各自具有64位(8字節(jié))的數(shù)據(jù)路徑,固態(tài)存儲介質(zhì)110可具有24管芯寬的陣列,并且在讀取操作期間,可從24管芯中的每一個并行讀取8字節(jié),每次讀取操作總共讀取192字節(jié)?;谠撔畔?,在一個實施例中,數(shù)據(jù)集源模塊422可基于192字節(jié)范圍內(nèi)8字節(jié)數(shù)據(jù)集的位置來確定從哪個管芯或其他存儲單元組讀取數(shù)據(jù)集。在另外的實施例中,數(shù)據(jù)集源模塊422可以計算或以其他方式追 蹤作為讀取操作一部分所處理的數(shù)據(jù)集數(shù)量,以便確定數(shù)據(jù)集序列中數(shù)據(jù)集的位置。例如,8字節(jié)可以在24管芯中從第一管芯開始順序進行讀取,因此如果ECC模塊412和/或分配模塊414對第五個8字節(jié)數(shù)據(jù)集的操作期間,檢測出讀取偏置偏差或數(shù)據(jù)錯誤,那么數(shù)據(jù)集源模塊422識別出該8字節(jié)數(shù)據(jù)集來自24管芯中的第五管芯。在一個實施例中,通過使用數(shù)據(jù)集序列中的數(shù)據(jù)集位置和其他已知信息,數(shù)據(jù)集源模塊422無需使用標識符或其他外部信息,即可確定從中讀取數(shù)據(jù)集的存儲單元組。通過識別管芯、芯片、通道、PEB或其他呈現(xiàn)讀取偏置差值的存儲單元組,可快速執(zhí)行補救措施,例如更改讀取電壓閾值、使用預留分組對存儲單元組進行邏輯調(diào)換、或其他形式的補救措施。在一個實施例中,主動配置模塊424通過主動設(shè)置和調(diào)整固態(tài)存儲介質(zhì)110存儲單元的配置參數(shù),提高了固態(tài)存儲介質(zhì)110的實用性。通過在錯誤出現(xiàn)前主動確定配置參數(shù),主動配置模塊424避免了某些錯誤的發(fā)生,而在重試讀取或執(zhí)行其他補救措施使錯誤得以避免的過程中沒有出現(xiàn)性能損失。在某些實施例中,主動配置模塊424優(yōu)化了固態(tài)存儲設(shè)備102的用例的配置參數(shù),以優(yōu)化該用例的存儲單元,而非使用默認參數(shù)。如上文所述,配置參數(shù)是可通過接口進行修改的一組存儲單元的參數(shù),例如讀取閾值、寫入或編程閾值、擦除閾值等。用于修改配置參數(shù)的接口可以包括可編程數(shù)據(jù)寄存器、固態(tài)存儲介質(zhì)110的控制總線的命令接口、固態(tài)存儲設(shè)備102的設(shè)備驅(qū)動器的API、固態(tài)存儲控制器104的控制參數(shù)等。主動配置模塊424引用一組存儲單元的一個或多個存儲介質(zhì)特性,以確定該存儲單元組的配置參數(shù)。存儲介質(zhì)特性是與固態(tài)存儲介質(zhì)110屬性相關(guān)的統(tǒng)計數(shù)據(jù)、啟發(fā)式數(shù)值或者其他描述符號。一組存儲單元的存儲介質(zhì)特性可以是基本上靜態(tài)的,或者可以是動態(tài)且隨時間變化的。在一個實施例中,存儲介質(zhì)特性包括或涉及固態(tài)存儲設(shè)備102和/或固態(tài)存儲介質(zhì)HO的制造、模型、制造商、產(chǎn)品版本等。在另一個實施例中,存儲介質(zhì)特性描述了一組特定存儲單元的屬性或統(tǒng)計數(shù)據(jù),例如存儲單元組的編程/擦除循環(huán)計數(shù)、存儲單元組的讀取計數(shù)、從存儲單元組的前一次寫入以來的保持時間、存儲單元組的錯誤統(tǒng)計等。在另外的實施例中,存儲介質(zhì)特性可以包括或涉及固態(tài)存儲設(shè)備102和/或固態(tài)存儲介質(zhì)110的環(huán)境條件或應用,例如溫度、用例(如高速緩存用例、檔案用例、服務器用例、企業(yè)用例、消費者用例等)等。響應于存儲單元組的配置參數(shù)的確定,主動配置模塊424配置存儲單元組,以使用所確定的配置參數(shù)。主動配置模塊424可以周期性更新存儲單元組的存儲介質(zhì)特性,更新存儲單元組的配置參數(shù),并且重新配置存儲單元組以使用已更新的配置參數(shù)。存儲單元組的后臺掃描表明存儲介質(zhì)特性已變化等時,主動配置模塊424可對此作出響應,在輸入/輸出操作執(zhí)行期間、啟動期間,使用配置參數(shù)配置存儲單元。在某些實施例中,主動配置模塊424以獨立于上述調(diào)整模塊408所做調(diào)整的方式對存儲單元進行配置。例如,主動配置模塊424可以與配置模塊352分離,主動配置模塊424可以是不具有配置模塊352等的存儲控制器104的一部分。在其他實施例中,調(diào)整模塊408和主動配置模塊424可以協(xié)作。例如,調(diào)整模塊408可以對一個或多個由主動配置模塊424使用開環(huán)模型等進行設(shè)置的配置參數(shù)進行基于閉環(huán)反饋的調(diào)整。在一個實施例中,寫入電壓模塊416設(shè)置寫入電壓電平,以便對固態(tài)存儲介質(zhì)110的存儲單元寫入數(shù)據(jù)。寫入電壓電平是指定了用于編程或更改存儲單元狀態(tài)的最小或最大電壓的編程電壓,是遞增步長脈沖編程操作的步長量級,是遞增步長脈沖編程操作的最大迭代次數(shù),是程序操作的程序驗證閾值,是遞增步長脈沖編程操作的初始偏置等。在一個實 施例中,寫入電壓模塊416可以與配置模塊352和/或主動配置模塊424集成。例如,對于NAND閃存固態(tài)存儲,寫入電壓和/或其他程序相關(guān)的配置參數(shù),將存儲單元的狀態(tài)從二進制一更改為二進制零。在一個實施例中,寫入電壓模塊416將已知模式寫入存儲單元,然后將該模式讀取回來,以確定讀取電壓閾值,再調(diào)整寫入閾值,直到滿足所需的讀取閾值。在另外的實施例中,寫入電壓模塊416基于數(shù)學模型調(diào)整寫入電壓電平,該數(shù)學模型基于與存儲單元老化有關(guān)的存儲單元耐久性和數(shù)據(jù)保持要求來指定寫入電壓電平值。在一個實施例中,存儲單元的老化依照編程和擦除循環(huán)進行計算。在一個實施例中,寫入電壓模塊416對一個或多個存儲單元執(zhí)行測試寫入,檢測至少一個存儲單元的讀取電壓,并且調(diào)整寫入電壓電平,直到讀取電壓達到閾值。在另外的實施例中,寫入電壓模塊416通過將具有已知偏置的數(shù)據(jù)集寫入存儲單元,來執(zhí)行測試寫入,并且通過確定讀取數(shù)據(jù)集的讀取偏置是否與已知偏置有偏差,來測試讀取電壓。在一個實施例中,寫入電壓模塊416可以從最小寫入電壓開始,然后增加寫入電壓,直到讀取電壓達到閾值。在另外的實施例中,寫入電壓模塊416可以從最大寫入電壓開始,然后降低寫入電壓,直到讀取電壓達到閾值。在一個實施例中,寫入電壓模塊416可以選擇特定的寫入電壓電平,使存儲單元的編程時間與存儲單元的所需耐久性和/或數(shù)據(jù)保持達到平衡。主動配置圖5示出了主動配置模塊424的一個實施例。在某些實施例中,主動配置模塊424可以基本上類似于上文中結(jié)合圖4所述的主動配置模塊424。在所示實施例中,主動配置模塊424包括介質(zhì)特性模塊502、配置參數(shù)模塊504、存儲單元配置模塊506、特性更新模塊508、配置更新模塊510和自適應配置模塊512。介質(zhì)特性模塊502、配置參數(shù)模塊504、存儲單元配置模塊、特性更新模塊508、配置更新模塊510和自適應配置模塊512可以是安裝在計算機112或另一個主機設(shè)備上的固態(tài)存儲設(shè)備102的設(shè)備驅(qū)動器的一部分和/或固態(tài)存儲設(shè)備硬件的一部分,例如FPGA、ASIC的固件等。在一個實施例中,介質(zhì)特性模塊502引用固態(tài)存儲介質(zhì)110的一組存儲單元的一種或多種存儲介質(zhì)特性。介質(zhì)特性模塊502可以確定自身的一種或多種存儲介質(zhì)特性,可以從另一個模塊接收存儲介質(zhì)特性,可以在存儲介質(zhì)特性庫中檢索存儲介質(zhì)特性,諸如此類。如上所述,存儲介質(zhì)特性是與固態(tài)存儲介質(zhì)110的屬性相關(guān)的統(tǒng)計數(shù)據(jù)、啟發(fā)式數(shù)值或其他描述符。存儲介質(zhì)特性可包括和/或涉及固態(tài)存儲設(shè)備102和/或固態(tài)存儲介質(zhì)110的構(gòu)造、型號、制造商、產(chǎn)品版本等;一組存儲單元的屬性或統(tǒng)計數(shù)據(jù);固態(tài)存儲設(shè)備102和/或固態(tài)存儲介質(zhì)110的環(huán)境條件或用例;和/或固態(tài)存儲介質(zhì)110的屬性的另一個統(tǒng)計數(shù)據(jù)、啟發(fā)式數(shù)值或其他描述符。一組存儲單元的存儲介質(zhì)特性會影響或告知該組存儲單元的配置參數(shù)的確定。在一個實施例中,存儲介質(zhì)特性包括一組存儲單元的編程/擦除循環(huán)計數(shù)。在另一個實施例中,存儲介質(zhì)特性包括一組存儲單元的讀取計數(shù)。在另一個實施例中,存儲介質(zhì)特性包括一組存儲單元自上次寫入后的保持時間。在另一個實施例中,存儲介質(zhì)特性包括一組存儲單元的溫度。在某些實施例中,存儲介質(zhì)特性包括一組存儲單元的用例。在另一個實施例中,存儲介質(zhì)特性包括一組存儲單元的錯誤統(tǒng)計,例如UBER等。在另一個實施例中,存儲介質(zhì)特性可包括一組存儲單元之前的或歷史的配置參數(shù)、其他存儲單元組的配置參數(shù)或存儲介質(zhì)特性等。 在某些實施例中,介質(zhì)特性模塊502管理存儲介質(zhì)特性的收集和/或維護。介質(zhì)特性模塊502可以維護存儲介質(zhì)特性庫中的存儲介質(zhì)特性和/或從存儲介質(zhì)特性庫中檢索存儲介質(zhì)特性。存儲介質(zhì)特性庫的一個例子將在下文中結(jié)合圖7A和7B進行更詳細的描述。在某些實施例中,介質(zhì)特性模塊502引用、確定和/或管理若干不同存儲單元組的存儲介質(zhì)特性,例如固態(tài)存儲設(shè)備102的每個存儲介質(zhì)區(qū)域或存儲介質(zhì)分區(qū)。存儲介質(zhì)區(qū)域可包括擦除塊(邏輯的或物理的)、頁、邏輯頁、ECC數(shù)據(jù)塊、頁內(nèi)分區(qū)、管芯、管芯平面、芯片等。在一個實施例中,介質(zhì)特性模塊502可以類似于上文結(jié)合圖3B所述的設(shè)備因素模塊354,可以與其一起運行,和/或可以與其整合。例如,存儲介質(zhì)特性可包括上文中結(jié)合設(shè)備因素模塊354所述的統(tǒng)計數(shù)據(jù)中的一者或多者,例如固態(tài)存儲設(shè)備102的溫度、固態(tài)存儲設(shè)備102的錯誤率(例如無法糾正的位錯誤率UBER等)、固態(tài)存儲設(shè)備102的擦除循環(huán)計數(shù)、固態(tài)存儲設(shè)備102的存儲請求延遲(例如平均值、最大值或其他存儲請求執(zhí)行延遲)、固態(tài)存儲設(shè)備102的老化,和/或其他統(tǒng)計數(shù)據(jù)或特性。在某些實施例中,介質(zhì)特性模塊502可以直接或間接地從一個或多個傳感器356、從其他模塊或元件(如ECC解碼器322)接收輸入,諸如此類。在一個實施例中,配置參數(shù)模塊504根據(jù)一組存儲單元的介質(zhì)特性模塊502的一個或多個存儲介質(zhì)特性確定該組存儲單元的配置參數(shù)。如上所述,配置參數(shù)是可通過接口修改的一組存儲單元的參數(shù)。配置參數(shù)可以涉及寫入或編程存儲單元、從存儲單元讀取、擦除存儲單元,和/或存儲單元的其他參數(shù)。配置參數(shù)模塊504可以將配置參數(shù)確定為絕對數(shù)據(jù)值、確定為數(shù)據(jù)值的偏移量或調(diào)整量、或確定為存儲單元配置模塊506可用于配置一組存儲單元的其他參數(shù),所述如下。用于從存儲單元進行讀取的配置參數(shù)的一個實施例是讀取閾值,例如讀取電壓閾值、電阻率閾值等。用于寫入/編程存儲單元的配置參數(shù)的多個實施例包括遞增步長脈沖編程操作的步長量級、遞增步長脈沖編程操作的最大迭代次數(shù)、程序操作的程序驗證閾值、遞增步長脈沖編程操作的初始偏置等。在某些實施例中,用于擦除存儲單元的配置參數(shù)可包括遞增步長脈沖擦除操作的步長量級、遞增步長脈沖擦除操作的最大迭代次數(shù)、擦除操作的擦除驗證閾值、遞增步長脈沖擦除操作的初始偏置等。按照本說明書,本領(lǐng)域的技術(shù)人員將會了解可通過接口修改的存儲單元的其他配置參數(shù)。配置參數(shù)模塊504可以通過以下方法使配置參數(shù)基于一個或多個存儲介質(zhì)特性將一個或多個存儲介質(zhì)特性輸入方程、查找表(“LUT”)、矩陣等中;在一個或多個存儲介質(zhì)特性上執(zhí)行預定轉(zhuǎn)換或操作;或者引用和/或使用該一個或多個存儲介質(zhì)特性,以確定配置參數(shù)。配置參數(shù)方程、查找表、矩陣等可以基于經(jīng)驗數(shù)據(jù),例如測試數(shù)據(jù)、歷史數(shù)據(jù)等等。在一個實施例中,設(shè)計工程師等可以測試具有多個存儲介質(zhì)特性的多組存儲單元,例如來自多個制造商的固態(tài)存儲介質(zhì)等,并確定具有多個存儲介質(zhì)特性的存儲單元的最佳配置參數(shù)。例如,方程、查找表、矩陣等可以表明,來自制造商X的固態(tài)存儲介質(zhì)110在1,000個編程/擦除循環(huán)后往往具有單元值自然漂移量Y,使得可以通過將讀取閾值增大Z伏特進行補償,諸如此類。在一個實施例中,一組存儲單元的存儲介質(zhì)特性包括溫度。一組存儲單元的溫度可以影響該組存儲單元上的一個或多個其他存儲介質(zhì)特性的效應速度。例如,在較高溫度下,與錯誤統(tǒng)計相關(guān)的存儲介質(zhì)特性的變化速率(例如原始位錯誤率(RBER)和數(shù)據(jù)保持時 間)會增加,對配置參數(shù)的某些調(diào)整會減輕影響。在某些實施例中,配置參數(shù)模塊504可以根據(jù)溫度來調(diào)整或縮放配置參數(shù)、存儲介質(zhì)特性等,以補償溫度的影響,為溫度規(guī)范數(shù)據(jù)。一組存儲單元的溫度可以是平均溫度、滑動窗口上的溫度、當前溫度、固態(tài)存儲設(shè)備102的溫度或與一組或多組存儲單元相關(guān)的其他溫度量度。在一個實施例中,一個或多個存儲介質(zhì)特性可為配置參數(shù)模塊504表明配置參數(shù)的趨勢、優(yōu)化等,并且配置參數(shù)模塊504確定滿足該趨勢或優(yōu)化的配置參數(shù)。例如,編程/擦除循環(huán)計數(shù)、讀取計數(shù)、UBER的大小或另一個存儲介質(zhì)特性可以表明讀取電壓已漂移的量,配置參數(shù)模塊504可根據(jù)存儲介質(zhì)特性主動確定讀取電壓閾值或其他配置參數(shù),無需來自存儲單元的直接反饋,例如讀取、讀取重試等。在一個實施例中,配置參數(shù)模塊504維護配置參數(shù)庫中固態(tài)存儲介質(zhì)110的不同存儲區(qū)域或存儲分區(qū)的多組存儲單元的配置參數(shù)。配置參數(shù)庫的一個例子將在下文中結(jié)合圖8A和SB進行更詳細的描述。通過確定和管理不同存儲區(qū)域的單獨的存儲介質(zhì)特性和/或配置參數(shù),在某些實施例中,主動配置模塊424可以為每個存儲區(qū)域單獨定制配置參數(shù),從而通過減少錯誤、延長固態(tài)存儲介質(zhì)110的使用壽命等提高固態(tài)存儲介質(zhì)110的實用性。在某些實施例中,配置參數(shù)模塊504可根據(jù)目標存儲單元組確定一組存儲單元的配置參數(shù)。目標存儲單元組可以具有已知的和/或受控的使用特性(如存儲介質(zhì)特性等),配置參數(shù)模塊504可以通過此使用特性確定另一組存儲單元的配置參數(shù)。具體地講,配置參數(shù)模塊504可以將目標存儲單元組的存儲介質(zhì)特性與所配置的一組存儲單元的存儲介質(zhì)特性進行比較。此類比較可用于進一步優(yōu)化一組存儲單元的已確定配置參數(shù)。目標存儲單元組可以存儲已知的數(shù)據(jù),例如元數(shù)據(jù)、系統(tǒng)數(shù)據(jù)、已知數(shù)據(jù)模式等,并且配置參數(shù)模塊504可以根據(jù)已知的數(shù)據(jù)確定另一組數(shù)據(jù)的配置參數(shù)。在另一個實施例中,配置參數(shù)模塊504根據(jù)目標存儲單元組的已確定配置參數(shù)、根據(jù)目標存儲單元組的一個或多個存儲介質(zhì)特性等確定一組存儲單元的配置參數(shù)。例如,配置參數(shù)模塊504可以將目標存儲單元組的配置參數(shù)用作另一組存儲單元的配置參數(shù),可以調(diào)整目標存儲單元組的配置參數(shù)以用于確定另一組存儲單元的配置參數(shù),可以用目標存儲單元組的存儲介質(zhì)特性確定另一組存儲單元的配置參數(shù),諸如此類。這樣,目標存儲單元組充當用于管理其他存儲單元組的對照組。在某些實施例中,在存儲設(shè)備102的使用期內(nèi),目標存儲單元組可采用類似于“系統(tǒng)軌跡”用于硬盤驅(qū)動技術(shù)的方式對配置參數(shù)進行修改。在另一個實施例中,配置參數(shù)模塊504將一組存儲單元的一個或多個存儲介質(zhì)特性與目標存儲單元組的一個或多個存儲介質(zhì)特性進行比較,并根據(jù)存儲介質(zhì)特性之間的差異確定該組存儲單元的配置參數(shù)。在某些實施例中,配置參數(shù)模塊504在目標存儲單元組的基礎(chǔ)上確定一組存儲單元的配置參數(shù)來自舉配置參數(shù),以響應該組存儲單元的已知存儲介質(zhì)特性的缺乏。配置參數(shù)模塊504可以在啟動操作過程中,或是在一組存儲單元的存儲介質(zhì)特性尚不可用但目標存儲單元組的存儲介質(zhì)特性或其他數(shù)據(jù)可用的另一種操作過程中,自舉該組存儲單元的配置參數(shù)。例如,存儲在固態(tài)存儲介質(zhì)110的元數(shù)據(jù)區(qū)域中的元數(shù)據(jù)可以具有已知的或受控的編程/擦除計數(shù),配置參數(shù)模塊504可在元數(shù)據(jù)區(qū) 域的已知或受控的編程/擦除計數(shù)基礎(chǔ)上,確定用于存儲用戶數(shù)據(jù)的固態(tài)存儲介質(zhì)110的區(qū)域的配置參數(shù)。在一個實施例中,存儲單元配置模塊506配置一組存儲單元,以便使用配置參數(shù)模塊504為該組存儲單元確定的配置參數(shù)。存儲單元配置模塊506用一組存儲單元的接口配置該組存儲單元。該接口可包括眾所周知的接口或?qū)S媒涌?。配置模塊506可以通過設(shè)置數(shù)據(jù)寄存器、通過在固態(tài)存儲介質(zhì)HO的控制總線的命令接口上發(fā)送命令、通過調(diào)用固態(tài)存儲設(shè)備102的設(shè)備驅(qū)動器的API、通過設(shè)置固態(tài)存儲控制器104的控制參數(shù)或以其他方式配置該組存儲單元,從而對一組存儲單元進行配置。存儲單元配置模塊506可使用特定命令指令、某些命令指令序列和/或使用特定參數(shù)、寄存器設(shè)置或其他不同于常規(guī)命令(通用命令)的、用來與存儲單元組建立接口的命令指令。存儲單元配置模塊506可接收來自配置參數(shù)模塊504的配置參數(shù),可從配置參數(shù)庫中檢索配置參數(shù),諸如此類。在一個實施例中,存儲單元配置模塊506將一組存儲單元配置為可使用已確定的配置參數(shù)以響應觸發(fā)。在某些實施例中,根據(jù)固態(tài)存儲設(shè)備102和/或固態(tài)存儲介質(zhì)110的結(jié)構(gòu)選擇觸發(fā)。例如,某些固態(tài)存儲設(shè)備102和/或固態(tài)存儲介質(zhì)110可保留多次輸入/輸出操作過程中的配置參數(shù),而另一個固態(tài)存儲設(shè)備102和/或固態(tài)存儲介質(zhì)110可能需要為每次輸入/輸出操作設(shè)置配置參數(shù),諸如此類。在固態(tài)存儲介質(zhì)110初始化過程中,存儲單元配置模塊506動態(tài)地使用分發(fā)到一組存儲單元的每個命令,配置該組存儲單元;在固態(tài)存儲介質(zhì)110運行期間,為了響應事件或時間間隔,或者為了響應其他的觸發(fā)等等,存儲單元配置模塊506也會配置該組存儲單元。在一個實施例中,存儲單元配置模塊506的觸發(fā)包括一組存儲單元的存儲介質(zhì)特性的變化、該組存儲單元的存儲介質(zhì)特性的預定量級的變化等,并且存儲單元配置模塊506將配置該組存儲單元以響應存儲介質(zhì)特性的變化。在另一個實施例中,存儲單元配置模塊506的觸發(fā)包括一組存儲單元的輸入/輸出請求,例如讀取請求、寫入請求、擦除請求等。例如,在某些實施例中,存儲單元配置模塊506可以將一組存儲單元配置為使用讀取配置參數(shù)以響應該存儲單元的讀取請求,可以將一組存儲單元配置為使用寫入配置參數(shù)以響應該存儲單元的寫入請求,可以將一組存儲單元配置為使用擦除配置參數(shù)以響應擦除請求,諸如此類。在另一個實施例中,固態(tài)存儲設(shè)備102的啟動操作、固態(tài)存儲設(shè)備102的常規(guī)關(guān)機操作等等是使存儲單元配置模塊506配置一組或多組存儲單元的觸發(fā)。在某些實施例中,一旦存儲單元配置模塊506使用配置參數(shù)配置一組存儲單元以響應啟動操作,該組存儲單元將在關(guān)機操作和后續(xù)啟動操作等之前保留配置參數(shù)。一組存儲單元保留配置參數(shù)的方式可以有所不同,具體取決于配置參數(shù)的類型、該組存儲單元的結(jié)構(gòu)等等。在一個實施例中,特性更新模塊508更新一組存儲單元的一個或多個存儲介質(zhì)特性以響應該組存儲單元的更新事件。更新事件是觸發(fā),特性更新模塊508為響應該觸發(fā)而更新存儲介質(zhì)特性。固態(tài)存儲設(shè)備102和/或固態(tài)存儲介質(zhì)110的某些存儲介質(zhì)特性(例如構(gòu)造、型號、制造商、產(chǎn)品版本等)可以大體上是靜態(tài)的,在某些實施例中,特性更新模塊508可能不更新此類存儲介質(zhì)特性,可能會不太頻繁地更新此類存儲介質(zhì)特性,諸如此類。而其他存儲介質(zhì)特性(例如編程/擦除循環(huán)計數(shù)、讀取計數(shù)、保持時間、溫度、用例、錯誤統(tǒng)計等等)可以是動態(tài)的,并可以頻繁變化。在一個實施例中,固態(tài)存儲介質(zhì)110的后臺掃描可以是更新事件。例如,特性更新模塊508可以執(zhí)行固態(tài)存儲介質(zhì)110的后臺掃描,并在后臺掃描過程中更新存儲單元組的 存儲介質(zhì)特性的記錄以響應存儲單元組的掃描。在另一個實施例中,該組存儲單元或相鄰的一組存儲單元的輸入/輸出請求(例如讀取請求、寫入請求、擦除請求等)是更新事件,特性更新模塊508將更新一組存儲單元的存儲介質(zhì)特性以響應該輸入/輸出請求。在另一個實施例中,特性更新模塊508的更新事件可包括固態(tài)存儲設(shè)備102的啟動操作和/或關(guān)機操作。在某些實施例中,一組存儲單元的垃圾收集操作是更新事件。例如,當通過垃圾收集操作恢復一組存儲單元的存儲容量時,特性更新模塊508可更新該組存儲單元的存儲介質(zhì)特性,諸如此類。在一個實施例中,特性更新模塊508與介質(zhì)特性模塊502協(xié)作,使用介質(zhì)特性模塊502更新存儲介質(zhì)特性,諸如此類。在某些實施例中,特性更新模塊508可以更新存儲在存儲介質(zhì)特性庫中的存儲介質(zhì)特性,如下文結(jié)合圖7A和7B所詳述。在一個實施例中,配置更新模塊510更新一組存儲單元的配置參數(shù)。在某些實施例中,配置更新模塊510更新配置參數(shù)以響應與該配置參數(shù)相應的一個或多個存儲介質(zhì)特性的變化。特性更新模塊508可向配置更新模塊510告知特性更新模塊508已更新存儲介質(zhì)特性,配置更新模塊510可周期性地掃描存儲介質(zhì)特性的變化,配置更新模塊510可檢查存儲介質(zhì)特性的變化以響應一組存儲單元的配置觸發(fā),諸如此類。在某些實施例中,配置更新模塊510更新配置參數(shù)以響應存儲介質(zhì)特性大于預定變化閾值的變化。在一個實施例中,配置更新模塊510與配置參數(shù)模塊504協(xié)作,使用配置參數(shù)模塊504更新配置參數(shù),諸如此類。在另一個實施例中,配置更新模塊510可更新存儲在配置參數(shù)庫中的配置參數(shù),如下文結(jié)合圖8A和8B所詳述。在一個實施例中,自適應配置模塊512動態(tài)調(diào)整和修改固態(tài)存儲設(shè)備102和/或固態(tài)存儲介質(zhì)110的一個或多個配置參數(shù)、閾值、管理技術(shù)等。在某些實施例中,自適應配置模塊512可以在固態(tài)存儲設(shè)備102老化時、固態(tài)存儲設(shè)備102的用例改變時等等情況下進行調(diào)整或修改。用例的例子可包括緩存用例、歸檔用例、服務器用例、企業(yè)用例、消費者用例等。在一個實施例中,自適應配置模塊512根據(jù)固態(tài)存儲設(shè)備102的先驗知識、收集的固態(tài)存儲設(shè)備102的運行時間統(tǒng)計數(shù)據(jù)、固態(tài)存儲設(shè)備102的存儲單元的存儲介質(zhì)特性等進行調(diào)整或適應。與磁存儲器不同,固態(tài)存儲的介質(zhì)屬性通常會在存儲設(shè)備的使用壽命期間發(fā)生變化。例如,可周期性地處理固態(tài)存儲介質(zhì)110的存儲區(qū)域以進行存儲容量恢復或垃圾收集,從而控制讀取干擾的影響,并確??煽康臄?shù)據(jù)保持。在固態(tài)存儲介質(zhì)110中,當選擇并讀取存儲單元時,在未被選擇的相鄰的存儲單元中可能會發(fā)生稱為讀取干擾的效應,從而引起未被選擇的存儲單元的浮柵極上的電荷聚集,使未選擇的存儲單元具有并非有意施加的增高電壓。克服讀取干擾效應的一種方法是將有效數(shù)據(jù)從受干擾的單元中移出,同時這些單元中的值仍是可確定的??蓪⒂行?shù)據(jù)重新寫入新的物理位置,并擦除受干擾的單元,以消除讀取干擾效應。此方法稱為刷新,刷新操作之間的時間稱為數(shù)據(jù)刷新間隔。讀取干擾閾值是在需要采取補救措施減輕讀取干擾效應之前相鄰單元的讀取次數(shù)。對于處理存儲區(qū)域以進行存儲容量恢復和/或數(shù)據(jù)刷新的數(shù)據(jù)刷新間隔而言,如果數(shù)據(jù)刷新間隔適合于使用壽命接近終止的固態(tài)存儲設(shè)備102,則該數(shù)據(jù)刷新頻率對于剛開始使用的固態(tài)存儲設(shè)備102而言可能過于激進。在多個實施例中,自適應配置模塊512可以根據(jù)固態(tài)存儲設(shè)備102的老化(以絕對時間、通電時間、用戶數(shù)據(jù)寫入量等表示)動態(tài)地調(diào)整或修改數(shù)據(jù)刷新間隔、根據(jù)固態(tài)存·儲設(shè)備102的耗損調(diào)整或修改讀取干擾閾值(即,刷新數(shù)據(jù)以減輕讀取干擾效應之前的讀取操作次數(shù))、根據(jù)固態(tài)存儲設(shè)備102的老化調(diào)整或修改擦除塊報廢標準、根據(jù)主機工作量調(diào)整或修改固態(tài)存儲設(shè)備102的垃圾收集方法、根據(jù)盡可能減小活動和非活動數(shù)據(jù)之間的混亂的活動程度調(diào)整或修改固態(tài)存儲設(shè)備102的按區(qū)域垃圾收集方法、在固態(tài)存儲設(shè)備102老化時調(diào)整或修改清理間隔以增加清理次數(shù),諸如此類。圖6A為根據(jù)本發(fā)明示出了 N個存儲元件606的陣列600的一個實施例的示意性框圖。在所示實施例中,ECC數(shù)據(jù)塊616包含來自若干存儲元件606的數(shù)據(jù)612。在另一個實施例中,ECC數(shù)據(jù)塊616的ECC校驗位還存儲在若干存儲元件606中。在一個實施例中,存儲元件606的陣列600包括N個存儲元件606a、606b、606c、... 606η。每個存儲元件606可包括設(shè)備、芯片、芯片的一部分、管芯等。在所示實施例中,存儲兀件606a_n形成內(nèi)存庫602a。在一個實施例中,陣列600包括若干內(nèi)存庫602a. · · 602m。在所示實施例中,內(nèi)存庫602a_m包括若干通道604a、604b、604c、. · ·、604n。在一個實施例中,數(shù)據(jù)包或數(shù)據(jù)集被寫入若干通道604a-n中,從每個通道604a_n分別讀取數(shù)據(jù)并重新組裝成數(shù)據(jù)包。在另一個實施例中,ECC數(shù)據(jù)塊616、數(shù)據(jù)包或數(shù)據(jù)集被寫入若干通道604a-n中,并從所有通道604a_n并行讀取數(shù)據(jù)。內(nèi)存庫602a上的一次讀取操作可以讀取整個ECC數(shù)據(jù)塊616、數(shù)據(jù)包或數(shù)據(jù)集、或重新組裝成整個ECC數(shù)據(jù)塊616、數(shù)據(jù)包或數(shù)據(jù)集的ECC數(shù)據(jù)塊616、數(shù)據(jù)包或數(shù)據(jù)集的一部分。在所示實施例中,每個內(nèi)存庫602中的每個通道包括至少一個存儲元件606。此外,在一個實施例中,每個存儲元件606包括物理擦除塊或“PEB”608。例如,存儲元件1606a包括PEB 1608a。物理擦除塊通常為位于一個管芯、芯片或其他存儲元件606上的擦除塊。每個PEB 608包括m個物理頁610。例如,PEB 1608a包括頁面0610a頁面m614a。每個物理頁610a存儲數(shù)據(jù)(“D”)612的一部分和隨數(shù)據(jù)612分布的ECC校驗位。在一個實施例中,一組PEB (PEB 1608a_PEB m 608m)形成邏輯擦除塊(“LEB”)。LEB跨越N個存儲元件600的陣列。此外,在一個實施例中,邏輯頁(“LP”)跨越行中的多個物理頁610。在另一個實施例中,邏輯頁跨越N個存儲元件606a-n。
在一個實施例中,ECC為分布數(shù)據(jù)的塊碼。此外,數(shù)據(jù)和ECC可以不與任何特定物理硬件邊界對齊。因此,用ECC代碼進行的錯誤糾正不取決于特定硬件配置。因此,ECC和相應數(shù)據(jù)可形成ECC數(shù)據(jù)塊616,ECC數(shù)據(jù)塊可劃分并存儲在N個存儲元件606a_n中的一者或多者上。ECC數(shù)據(jù)塊616通??缭竭壿嬳摰亩鄠€物理頁610的至少一部分,其中從數(shù)據(jù)612a、612b、. . . 612m生成的數(shù)據(jù)和ECC遍布在N個存儲元件606a_n上。在一個實施例中,LP包括多個ECC數(shù)據(jù)塊616。物理頁610可包含ECC數(shù)據(jù)塊616的一個或多個數(shù)據(jù)字節(jié)。ECC數(shù)據(jù)塊616可跨越物理頁610內(nèi)的多個行,物理頁610可包括多個ECC數(shù)據(jù)塊616。在所示實施例中,由于ECC數(shù)據(jù)塊616的ECC校驗位遍布若干存儲元件606a_n和通道604a-n,因此當由于存儲元件606a-n中的一者或多者的讀取電壓變化而發(fā)生數(shù)據(jù)錯誤時,ECC模塊412無法確定哪個存儲元件606的錯誤可通過調(diào)整讀取電壓閾值糾正。在一個實施例中,分配模塊414可確定哪個存儲元件606或通道604的數(shù)據(jù)具有在已知偏置的預期分布之外的讀取偏置,配置模塊352可調(diào)整由分配模塊414確定的存儲元件606的讀取電壓閾值?!ぴ谝粋€實施例中,偏差模塊404、ECC模塊412和/或分配模塊414確定數(shù)據(jù)集是否具有錯誤或偏移已知偏置的讀取偏置,數(shù)據(jù)集源模塊422確定從哪個存儲元件606讀取數(shù)據(jù)集。例如,在一個實施例中,陣列600可具有24個通道604,在每次讀取操作共可讀取192個字節(jié)的讀取操作過程中,可以從單個內(nèi)存庫602的24個存儲元件606并行讀取8個字節(jié)。根據(jù)該信息,在一個實施例中,數(shù)據(jù)集源模塊422可以根據(jù)192字節(jié)內(nèi)8字節(jié)數(shù)據(jù)集的位置確定從哪個存儲元件606讀取數(shù)據(jù)集。在一個實施例中,192字節(jié)包括ECC數(shù)據(jù)塊616。通過將來自每個通道604a_n的數(shù)據(jù)的讀取偏置與已知偏置進行比較,即使不使用ECC校驗位,配置模塊352也可以糾正由于特定通道的讀取電壓改變而發(fā)生的數(shù)據(jù)錯誤。如果不將來自通道604a-n的數(shù)據(jù)的讀取偏置與已知偏置進行比較,調(diào)整讀取電壓閾值將需要大量的試錯測試來調(diào)整和測試通道604a-n的每個可能組合的每個可能的讀取電壓閾值調(diào)整值。通過將來自通道604a-n的數(shù)據(jù)的讀取偏置與已知偏置進行比較,配置模塊352可準確確定要調(diào)整哪個通道604。通過確定這些通道的偏差方向,配置模塊352還將這些通道的讀取電壓閾值的搜索范圍縮小了一半。為了闡明合適的調(diào)整后讀取電壓閾值的搜索范圍的可能大小,假設(shè)ECC數(shù)據(jù)塊616 (即ECC碼字-包括數(shù)據(jù)和相應ECC校驗位)存儲在存儲元件606a-606n中。另外,假設(shè)存儲ECC數(shù)據(jù)塊616的陣列600行中的存儲元件606a-606n各自具有可獨立調(diào)整的讀取電壓閾值。例如,在一個實施例中,具有Π通道604a-n的陣列600的讀取電壓閾值設(shè)置的不同組合數(shù)、每個通道可以設(shè)置讀取電壓閾值的級數(shù)λ和具有需要調(diào)整的讀取電壓閾值的通道數(shù)X由公式I給定= (二: . .*(I)在一個實施例中,具有最多Π個通道604a_n的所有排列的陣列600的讀取電壓閾值設(shè)置的不同組合數(shù)由公式2給定= EjL- /(,. I"), a;(2)使用公式1,例如,如果有24個通道606a_n(n = 24)、每個通道606具有8個可能的讀取電壓閾值設(shè)置(λ = 8),并且24個通道606a-n中只有兩個具有需要調(diào)整的讀取電壓閾值(X = 2),那么總共有17,644個讀取電壓閾值設(shè)置的不同組合。如果具有需要調(diào)整的讀取電壓閾值的通道606數(shù)量增至三個,那么不同組合數(shù)將增至1,036,288。配置模塊352通過檢測哪些通道606a-n具有需要調(diào)整的讀取電壓閾值使這些數(shù)量大幅減小。此夕卜,將存儲分組中介質(zhì)上的數(shù)據(jù)的已知偏置與當前偏置比較可指示調(diào)整讀取電壓閾值的方向。了解讀取電壓閾值的調(diào)整方向可大大縮小在已知具有數(shù)據(jù)錯誤的通道中合適電壓的搜索范圍。因此,需要嘗試的組合數(shù)從17,644 (其中X = 2)變至32,并從1,036, 288 (其中x=3)變至256,這是因為配置模塊352使用已知偏置確定了哪個通道具有需要調(diào)整的讀取電壓閾值以及調(diào)整方向。然而,并不需要嘗試這些組合中的每一個,因為當以迭代方式進行調(diào)整時,已知的數(shù)據(jù)偏差繼續(xù)指示進行每次后續(xù)調(diào)整的方向,每次迭代有可能將搜索范圍縮小至少一半。可以用多種搜索算法迅速辨識合適的調(diào)整后讀取電壓閾值。(即,二進制搜索)。圖6B為根據(jù)本發(fā)明示出了 N個存儲元件606的陣列650的一個實施例的示意性 框圖。在所示實施例中,陣列650基本上類似于圖6A的陣列600,但ECC數(shù)據(jù)塊652包括單個存儲元件606a中的數(shù)據(jù)612a,而不是橫跨若干存儲元件606a_n。在一個實施例中,ECC數(shù)據(jù)塊652的ECC校驗位存儲在單個存儲元件606a中。因為每個存儲元件606a_n或通道604a-n具有單獨的ECC校驗位,在一個實施例中,ECC模塊412使用單獨的ECC校驗位確定發(fā)生錯誤的存儲元件606a-n或通道604a_n,配置模塊352調(diào)整由ECC模塊412確定的一個或多個特定存儲元件606的讀取電壓閾值。圖6C用示例性編碼或編程模型示出了一組多級存儲單元的配置參數(shù)662a_c的一個實施例,例如MLC NAND閃存存儲單元等。示出的編碼模型中的任何固有限制不一定適用于所有其他編碼模型,不應將本發(fā)明理解為固有地包含任何此類限制。在所示實施例中,使用格雷碼編碼模型對讀取電壓狀態(tài)進行編碼,其中編碼中相鄰狀態(tài)的二進制值相差一個比特位。圖6C示出,值“11”與最低讀取電壓狀態(tài)(標記為L0,“擦除”狀態(tài))相關(guān),值“01”與次低讀取電壓狀態(tài)(標記為LI)相關(guān),值“00”與次高讀取電壓狀態(tài)(標記為L2)相關(guān),值“10”與最高讀取電壓狀態(tài)(標記為L3)相關(guān)。在圖6C中,最低讀取電壓狀態(tài)LO示出為負電壓。本發(fā)明所涵蓋的讀取電壓的值、量級、大小等可能隨制造商和固態(tài)存儲單元類型而有所不同。如上所述,在所示實施例中,配置參數(shù)662是可區(qū)分狀態(tài)L0、LI、L2和L3的讀取電壓閾值662。固態(tài)存儲控制器104將存儲在多級存儲單元中的四個離散的電壓電平解析為表示兩個二進制位,一個由單元編碼中的最高有效位(MSB)表示,一個由單元編碼中的最低有效位(LSB)表示。如上所述,可以使用其他編程和編碼模型。另外,某些固態(tài)存儲介質(zhì)110可具有四個以上的可能狀態(tài),以允許將兩個以上的二進制值存儲在單個多級存儲單元中。電壓電平L0、L1、L2和L3可以是鄰接的,也可以不是鄰接的;例如,在某些實施例中,電壓電平被稱為防護頻帶的帶隙隔開。例如,LO和LI可以間隔O. 3V。在一個實施例中,LSB對應于較低數(shù)據(jù)頁,MSB對應于較高數(shù)據(jù)頁。在某些實施例中,多級存儲單元可以附著到雙相編程模型上,如下所述,這需要在寫入MSB之前寫入LSB,反之亦然。在另一個實施例中,LSB和MSB可以由固態(tài)存儲控制器104單獨編程??筛鶕?jù)供應商或制造商對頁面配對(即,MLC單元的LSB位與另一個MLC單元的MSB位配對)和頁面尋址(即,LSB頁面必須在MSB頁面之前進行編程,反之亦然)的要求采用此類方法。在某些情況下,必須在寫入MSB之前寫入LSB,在寫入LSB之前寫入MSB,諸如此類。在某些實施例中,固態(tài)存儲介質(zhì)110可以采用雙相編程模型。在此類模型中,首先通過較低頁的第一寫入命令將二進制值寫入LSB。寫入命令使多級存儲單元從其初始狀態(tài)(例如,標記為LO的11狀態(tài))移至被配置為可在隨后讀取00狀態(tài)的中間狀態(tài)(低至中LM狀態(tài)-介于LI和L2之間)。例如,將“O”寫入較低頁會使多級存儲單元從LO狀態(tài)(其中LSB和MSB均為I)更改為L2狀態(tài)(其中LSB變?yōu)镺)。隨后將“O”寫入較高頁會將多級存儲單元從中間狀態(tài)(通常在LI狀態(tài)與L2狀態(tài)之間)移至L2狀態(tài),使得MLC兩個位均為“O”。因此,在該實施例中,需要通過兩次寫入(一次寫入較低頁,一次寫入較高頁)將多級單元從LO移至L2,這是因為單元通過中間狀態(tài)過渡,并且MLC設(shè)備要求在較高頁之前對較低頁進行編程,而且不允許在沒有中間擦除操作的情況下進行頁面的部分編程。將“I”寫入較高頁或較低頁中的任一個會使MLC轉(zhuǎn)換到LI或L3,具體取決于當時較低頁的二進制值。此外,某些固態(tài)介質(zhì)供應商會強加一些要求,諸如必須在較高頁之前寫入較低頁等等。在其他實施例中,固態(tài)存儲介質(zhì)110可以采用雙相編程模型,其中首先通過較高頁的第一寫入命令將二進制值寫入MSB。 在一個實施例中,配置模塊352根據(jù)多級存儲單元存儲的二進制數(shù)據(jù)子集調(diào)整一個或多個讀取電壓閾值662,例如僅較高頁、僅較低頁等。在此類實施例中,通過檢查LSB位的狀態(tài)變化可指示多級存儲單元中電壓的變化方向。對于位值的格雷碼編碼(如圖6C所示)和二進制代碼編碼而言,多級存儲單元的LSB在介于中間兩個位置或狀態(tài)之間的二進制零和二進制一之間轉(zhuǎn)換,在所示實施例中,為LI狀態(tài)和L2狀態(tài)。對于其他編碼模型而言,MSB可以在介于中間兩個位置或狀態(tài)之間的二進制零和二進制一之間轉(zhuǎn)換,諸如此類。對于格雷碼或二進制代碼編碼模型而言,LSB在較低范圍(包括較低的兩個狀態(tài)或位置,LO和LI)內(nèi)具有讀取電壓值“1”,LSB在較高范圍(包括較高的兩個狀態(tài)或位置,L2和L3)內(nèi)具有讀取電壓值“O”。通過僅使用MLC存儲單元的LSB確定讀取偏置是否與已知偏置偏移,在一個實施例中,配置模塊352可使用基本上類似于確定SLC存儲單元的讀取偏置是否與已知偏置偏移的方式,通過計算或記錄LSB數(shù)據(jù)集的二進制一和/或二進制零等進行確定。對于某些類型的多級存儲單元而言,中間讀取電壓閾值662b以及相鄰的LI和L2狀態(tài)可能對讀取干擾或會導致讀取電壓漂移的其他因素更敏感。另外,如上所述,在某些實施例中,單個多級存儲單元的LSB和MSB可以表示存儲在不同物理頁中的數(shù)據(jù)。在一個實施例中,將來自多個多級存儲單元中的每一個的單個位用作數(shù)據(jù)集可以減少檢索數(shù)據(jù)集的讀取操作數(shù)量。在其他實施例中,將來自多個多級存儲單元中的每一個的單個位用于較低頁簡化了檢測多級存儲單元的讀取偏置與已知偏置的偏移和方向的過程。在一個實施例中,方向模塊406根據(jù)包括來自多級存儲單元的一個或多個較低頁的數(shù)據(jù)在內(nèi)的數(shù)據(jù)集,來確定多級存儲單元組的偏移方向。因為較低頁包括LSB,在某些實施例中,較低頁的讀取偏置與較低頁的已知偏置之間的差異表明LSB的存儲單元值已從二進制一轉(zhuǎn)換為二進制零,方向模塊406對此作出響應,確定讀取電壓閾值662向較大讀取電壓偏移。對于LSB從二進制一轉(zhuǎn)換為二進制零的情況,采用圖6C編碼模型的多級存儲單元的讀取電壓必定會從LO或LI狀態(tài)漂移至L2或L3狀態(tài),這表明一個或多個讀取電壓閾值662應增高以使讀取電壓返回至初始LO或LI狀態(tài)。
相似地,在某些實施例中,較低頁的讀取偏置與較低頁的已知偏置之間的差異表明LSB的存儲單元值已從二進制零轉(zhuǎn)換為二進制一,方向模塊406對此作出響應,確定讀取電壓閾值662趨向于較小讀取電壓偏移。對于LSB從二進制零轉(zhuǎn)換為二進制一的情況,采用圖6C編碼模型的多級存儲單元的讀取電壓必定會從L3或L2狀態(tài)漂移至LI或LO狀態(tài),這表明一個或多個讀取電壓閾值662應降低以使讀取電壓返回至初始L3或L2狀態(tài)。在某些實施例中,不太可能出現(xiàn)跨越多個狀態(tài)的偏移,并且使用LSB可檢測的偏移可以介于LI與L2狀態(tài)之間,這表明在任一方向上都有著明確的偏移。在另一個實施例中,方向模塊406至少部分地基于用于固態(tài)存儲介質(zhì)110的存儲單元的編碼類型、存儲介質(zhì)Iio的存儲單元的物理和/或電氣結(jié)構(gòu)等,來確定偏移方向。例如,基于圖6C的編碼模型,方向模塊406可以基于2位MLC存儲介質(zhì)類型,基于數(shù)據(jù)集是包括較高頁還是較低頁,基于所示格雷碼編碼類型,基于所確定的偏移的大小等等,來確定偏移方向。在另一個實施例中,方向模塊406可以將單獨或不同地址(例如不同物理頁等)的LSB和MSB轉(zhuǎn)換或合并成單個數(shù)據(jù)集,或者可以另外方式調(diào)整LSB和MSB以確定偏移方 向。在某些實施例中,使用存儲在多級存儲單元內(nèi)的每個位確定讀取電壓閾值調(diào)整量,這樣可以提高讀取電壓閾值調(diào)整的精度,但會增加讀取操作次數(shù)或使確定過程更為復雜。在一個實施例中,如果ECC解碼器322在多級存儲單元組的較高頁中檢測到數(shù)據(jù)錯誤,那么數(shù)據(jù)集讀取模塊402檢索該分組的一個或多個較低頁,并且配置模塊352基于較低頁對該分組的讀取電壓閾值進行調(diào)整。圖6D示出了固態(tài)存儲介質(zhì)110的一組多級存儲單元的調(diào)整后配置參數(shù)672a_c的一個實施例。在某些實施例中,圖6C的配置參數(shù)662a-c是由制造商、供應商等設(shè)置的默認配置參數(shù),配置模塊352和/或主動配置模塊424將默認配置參數(shù)662a-c調(diào)整或配置為調(diào)整后配置參數(shù)672a-c。與默認配置參數(shù)662a_c相比,調(diào)整后配置參數(shù)672a_c更貼切地匹配圖6D的存儲單元狀態(tài)的實際分布。如果對應的存儲單元組采用具有圖6D的存儲單元狀態(tài)分布的默認配置參數(shù)662a-c,該分布中漂移過默認配置參數(shù)662a-c位置的部分會對數(shù)據(jù)錯誤進行寄存。配置模塊352通過配置對應的存儲單元組使用調(diào)整后配置參數(shù)672a-c,從而防止、避免或校正潛在的數(shù)據(jù)錯誤。在一個實施例中,配置模塊352米用如上所述的偏差模塊404、方向模塊406、調(diào)整模塊408等被動地確定調(diào)整后配置參數(shù)672a-c。在另一個實施例中,配置模塊352采用主動配置模塊424,根據(jù)如上所述對應組的存儲單元的存儲介質(zhì)特性,主動地確定調(diào)整后配置參數(shù) 672a-c。圖7A示出了介質(zhì)特性模塊502和存儲介質(zhì)特性庫702的一個實施例。在所示實施例中,介質(zhì)特性模塊502為存儲介質(zhì)特性庫702中多個不同組的存儲單元存儲并維護介質(zhì)特性。存儲介質(zhì)特性庫702存儲這樣的條目,這些條目羅列固態(tài)存儲介質(zhì)110的多組存儲單元的存儲介質(zhì)特性。存儲介質(zhì)特性庫702可以具體呈現(xiàn)為一個或多個對存儲介質(zhì)特性進行存儲的表格、矩陣、陣列、數(shù)據(jù)庫、文件或另一種數(shù)據(jù)結(jié)構(gòu)。介質(zhì)特性模塊502可將存儲介質(zhì)特性庫存儲在固態(tài)存儲介質(zhì)110的一個或多個元數(shù)據(jù)區(qū)域中,存儲在固態(tài)存儲設(shè)備102和/或計算機112的易失性存儲器中,存儲在固態(tài)存儲設(shè)備102的配置文件中(該配置文件存儲在計算機112的非易失性存儲器中),存儲在固態(tài)存儲設(shè)備102的專用非易失性存儲器中等。介質(zhì)特性模塊502可以將介質(zhì)特性庫702和/或存儲介質(zhì)特性存儲在單個位置,或分開存儲在多個位置。例如,在一個實施例中,介質(zhì)特性模塊502可以從固態(tài)存儲設(shè)備102的非易失性存儲器(例如在經(jīng)制造商或供應商編程的可編程只讀存儲器(“PR0M”)等)中訪問靜態(tài)存儲介質(zhì)特性,例如固態(tài)存儲設(shè)備102和/或固態(tài)存儲介質(zhì)110的構(gòu)造、型號、制造商、產(chǎn)品版本等。介質(zhì)特性模塊502可以存儲動態(tài)存儲介質(zhì)特性,例如固態(tài)存儲設(shè)備102和/或計算機112的易失性存儲器中的編程/擦除循環(huán)計數(shù)、讀取計數(shù)、保持時間、溫度、用例、錯誤統(tǒng)計等,固態(tài)存儲介質(zhì)110上的元數(shù)據(jù)等等。如果介質(zhì)特性模塊502將存儲介質(zhì)特性庫702的至少一部分存儲在易失性存儲器中,那么在某些實施例中,介質(zhì)特性模塊502可周期性地將存儲介質(zhì)特性庫702的數(shù)據(jù)保存到固態(tài)存儲介質(zhì)110或保存到其他非易失性存儲器中,從而在發(fā)生電源故障、錯誤關(guān)機等時,介質(zhì)特性模塊502可以重建存儲介質(zhì)特性庫702。
圖7B示出了存儲介質(zhì)特性庫702的另一個實施例。存儲介質(zhì)特性庫702包括多組存儲單元的多個條目708。在所示實施例中,所述多組存儲單元由存儲介質(zhì)區(qū)域706組織,使存儲介質(zhì)特性庫702中每個存儲介質(zhì)區(qū)域706具有從LEB O到LEB N的條目708。雖然所示實施例中的存儲介質(zhì)區(qū)域706以如上所述的邏輯擦除塊LEB O到LEB N示出,但在其他實施例中,存儲介質(zhì)區(qū)域706可包括物理擦除塊、頁、邏輯頁、ECC數(shù)據(jù)塊、頁內(nèi)分區(qū)、管芯、管芯平面、芯片等。每個條目708還包括相應存儲介質(zhì)區(qū)域706的存儲介質(zhì)特性704。在所示實施例中,存儲介質(zhì)特性704包括編程/擦除循環(huán)計數(shù)704a、讀取計數(shù)704b、保持時間704c、溫度704d和位錯誤率704e。特性更新模塊508可與介質(zhì)特性模塊502協(xié)作,對如上所述的存儲介質(zhì)特性庫702進行更新。圖8A示出了配置參數(shù)模塊504和配置參數(shù)庫802的一個實施例。在所示實施例中,配置參數(shù)模塊504為配置參數(shù)庫802中多個不同組的存儲單元存儲并保持配置參數(shù)。在某些實施例中,配置參數(shù)庫802可與存儲介質(zhì)特性庫702整合為單個庫702、802。配置參數(shù)庫802存儲這樣的條目,這些條目羅列固態(tài)存儲介質(zhì)110的多組存儲單元的配置參數(shù)。配置參數(shù)庫802可以具體呈現(xiàn)為一個或多個對配置參數(shù)進行存儲的表格、矩陣、陣列、數(shù)據(jù)庫、文件或另一種數(shù)據(jù)結(jié)構(gòu)。圖8B示出了配置參數(shù)庫802的另一個實施例。配置參數(shù)庫802包括多組存儲單元的多個條目808。在所示實施例中,所述多組存儲單元由存儲介質(zhì)區(qū)域706組織,并且條目808對應從LEB O到LEB N的存儲介質(zhì)區(qū)域706。每個條目808還包括對應存儲介質(zhì)區(qū)域706的配置參數(shù)804。在所示實施例中,配置參數(shù)804包括讀取電平R1804a、讀取電平R2804b和讀取電平R3804c的讀取電壓閾值調(diào)整量804a_c,其中每個條目為相對于默認讀取電壓閾值的十六進制偏移量。雖然所示實施例中的配置參數(shù)804以如上所述讀取電壓閾值調(diào)整量示出,但在其他實施例中,配置參數(shù)804可包括固態(tài)存儲介質(zhì)110的電阻率閾值、寫入或編程閾值、擦除閾值和/或其他可修改的參數(shù)。如上所述,配置參數(shù)804可包括絕對數(shù)據(jù)值、數(shù)據(jù)值的偏移量或調(diào)整量、或另一個參數(shù)。配置更新模塊510可與配置參數(shù)模塊504協(xié)作,對如上所述配置參數(shù)庫802進行更新。
流稈9示出了用于提高固態(tài)存儲介質(zhì)110實用性的方法900的一個實施例。方法900開始,在902處介質(zhì)特性模塊502為固態(tài)存儲介質(zhì)110的一組存儲單元引用一個或多個存儲介質(zhì)特性。在904處配置參數(shù)模塊504基于902處引用的一個或多個存儲介質(zhì)特性確定該組存儲單元 的配置參數(shù)。在906處存儲單元配置模塊506對該組存儲單元進行配置以使用904處所確定的配置參數(shù),然后方法900結(jié)束。圖10示出了用于提高固態(tài)存儲介質(zhì)110實用性的方法1000的另一個實施例。方法1000開始,在1002處特性更新模塊508確定固態(tài)存儲介質(zhì)110的一組存儲單元是否發(fā)生了更新事件。如果在1002處特性更新模塊508確定發(fā)生了更新事件,那么在1004處特性更新模塊508在存儲介質(zhì)特性庫702等中對該組存儲單元的一個或多個存儲介質(zhì)特性進行更新。如果在1002處特性更新模塊508確定尚未發(fā)生更新事件,那么在1004處特性更新模塊508不對該組存儲單元的一個或多個存儲介質(zhì)特性進行更新。在1004處特性更新模塊508對該組存儲單元的一個或多個存儲介質(zhì)特性等進行更新后,在1006處配置更新模塊510確定一個或多個存儲介質(zhì)特性是否有變化。如果在1006處配置更新模塊510確定該組存儲單元的一個或多個存儲介質(zhì)特性有變化,那么在1008處介質(zhì)特性模塊502為該組存儲單元引用一個或多個存儲介質(zhì)特性,并且在1010處配置參數(shù)模塊504和/或配置更新模塊510確定/更新該組存儲單元的配置參數(shù)。如果在1006處配置更新模塊510確定該組存儲單元的一個或多個存儲介質(zhì)特性沒有變化,那么方法1000跳過引用步驟1008和確定/更新步驟1010。在1012處存儲單元配置模塊506確定該組存儲單元是否發(fā)生了配置觸發(fā)。如果在1012處存儲單元配置模塊506確定發(fā)生了配置觸發(fā),那么在1014處存儲單元配置模塊506對該組存儲單元進行配置以使用1010處確定/更新的配置參數(shù),然后重復方法1000。如果在1012處存儲單元配置模塊506確定尚未發(fā)生配置觸發(fā),則重復方法1000。在不脫離本發(fā)明精神或本質(zhì)特性的情況下,本發(fā)明可以其他具體方式體現(xiàn)。無論從哪個方面來看,都應將所述實施例視為僅為示例性的而非限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求書指明而非上述說明內(nèi)容指明。落入權(quán)利要求等同物的意義和范圍內(nèi)的所有變化都包括在其范圍內(nèi)。
權(quán)利要求
1.一種提高固態(tài)存儲介質(zhì)實用性的方法,所述方法包括 為固態(tài)存儲介質(zhì)的一組存儲單元引用一個或多個存儲介質(zhì)特性; 基于所述一個或多個存儲介質(zhì)特性確定所述一組存儲單元的配置參數(shù);以及 配置所述一組存儲單元以使用確定的配置參數(shù)。
2.根據(jù)權(quán)利要求I所述的方法,還包括更新所述一組存儲單元的所述一個或多個存儲介質(zhì)特性以響應更新事件。
3.根據(jù)權(quán)利要求2所述的方法,其中所述更新事件包括以下一個或多個對具有所述一組存儲單元的所述固態(tài)存儲介質(zhì)的后臺掃描,對所述一組存儲單元的讀取請求,對所述一組存儲單元的相鄰存儲單元的讀取請求,對具有所述一組存儲單元的設(shè)備的啟動操作,對具有所述一組存儲單元的設(shè)備的關(guān)機操作,以及對所述一組存儲單元的垃圾收集操作。
4.根據(jù)權(quán)利要求I所述的方法,還包括更新所述一組存儲單元的所述配置參數(shù)以響應所述一個或多個存儲介質(zhì)特性的改變。
5.根據(jù)權(quán)利要求I所述的方法,還包括基于所述固態(tài)存儲介質(zhì)的多個不同組存儲單元的存儲介質(zhì)特性為所述多個不同組存儲單元確定多個額外的配置參數(shù),以及配置所述多個不同組存儲單元以使用所述多個額外的配置參數(shù)。
6.根據(jù)權(quán)利要求I所述的方法,其中所述配置參數(shù)包括可通過接口修改的所述一組存儲單元的參數(shù),所述配置參數(shù)選自讀取電壓、遞增步長脈沖編程操作的步長量級、遞增步長脈沖編程操作的最大迭代次數(shù)、程序操作的程序驗證閾值、遞增步長脈沖編程操作的初始偏置、遞增步長脈沖擦除操作的步長量級、遞增步長脈沖擦除操作的最大迭代次數(shù)、擦除操作的擦除驗證閾值、以及遞增步長脈沖擦除操作的初始偏置。
7.根據(jù)權(quán)利要求I所述的方法,其中配置所述一組存儲單元以使用所述確定的配置參數(shù),還包括配置所述一組存儲單元以使用所述確定的配置參數(shù)以響應觸發(fā)。
8.根據(jù)權(quán)利要求7所述的方法,其中所述觸發(fā)包括如下之一一個或多個存儲介質(zhì)特性的改變,對所述一組存儲單元的讀取請求,對具有所述一組存儲單元的設(shè)備的啟動操作,以及對具有所述一組存儲單元的設(shè)備的常規(guī)關(guān)機操作。
9.根據(jù)權(quán)利要求I所述的方法,其中所述一個或多個存儲介質(zhì)特性包括以下一個或多個所述一組存儲單元的編程/擦除循環(huán)計數(shù),所述一組存儲單元的讀取計數(shù),自所述一組存儲單元的上次寫入以來的保持時間,所述一組存儲單元的溫度,所述一組存儲單元的用例,以及所述一組存儲單元的錯誤統(tǒng)計。
10.根據(jù)權(quán)利要求I所述的方法,其中所述確定的配置參數(shù)基于目標組存儲單元,所述目標組存儲單元具有受控的使用特性。
11.根據(jù)權(quán)利要求10所述的方法,其中所述一組存儲單元的所述確定的配置參數(shù)基于如下之一所述目標組存儲單元的確定的配置參數(shù)和所述目標組存儲單元的一個或多個存儲介質(zhì)特性。
12.根據(jù)權(quán)利要求10所述的方法,其中確定所述一組存儲單元的所述配置參數(shù)包括 將所述一組存儲單元的一個或多個存儲介質(zhì)特性中的至少一個與所述目標組存儲單元的至少一個存儲介質(zhì)特性比較;以及 基于所述一組存儲單元的所述至少一個存儲介質(zhì)特性與所述目標組存儲單元的所述至少一個存儲介質(zhì)特性之間的差異確定所述一組存儲單元的所述配置參數(shù)。
13.一種提高固態(tài)存儲介質(zhì)實用性的裝置,所述裝置包括 介質(zhì)特性模塊,所述介質(zhì)特性模塊為固態(tài)存儲介質(zhì)的一組存儲單元引用一個或多個存儲介質(zhì)特性; 配置參數(shù)模塊,所述配置參數(shù)模塊基于所述一個或多個存儲介質(zhì)特性確定所述一組存儲單元的配置參數(shù);和 存儲單元配置模塊,所述存儲單元配置模塊配置所述一組存儲單元以使用確定的配置參數(shù)。
14.根據(jù)權(quán)利要求13所述的裝置,還包括特性更新模塊,所述特性更新模塊更新所述一組存儲單元的所述一個或多個存儲介質(zhì)特性以響應更新事件。
15.根據(jù)權(quán)利要求13所述的裝置,還包括配置更新模塊,所述配置更新模塊更新所述一組存儲單元的所述配置參數(shù)以響應所述一個或多個存儲介質(zhì)特性的改變。
16.根據(jù)權(quán)利要求13所述的裝置,其中所述介質(zhì)特性模塊在存儲介質(zhì)特性庫中保持所述一組存儲單元的所述一個或多個存儲介質(zhì)特性,所述存儲介質(zhì)特性庫包括所述固態(tài)存儲介質(zhì)的多個不同組存儲單元的存儲介質(zhì)特性。
17.根據(jù)權(quán)利要求13所述的裝置,其中所述配置參數(shù)模塊在配置參數(shù)庫中保持所述一組存儲單元的所述確定的配置參數(shù),所述配置參數(shù)庫包括所述固態(tài)存儲介質(zhì)的多個不同組存儲單元的配置參數(shù)。
18.根據(jù)權(quán)利要求13所述的裝置,其中所述一個或多個存儲介質(zhì)特性包括以下一個或多個所述一組存儲單元的編程/擦除循環(huán)計數(shù),所述一組存儲單元的讀取計數(shù),自所述一組存儲單元的上次寫入以來的保持時間,所述一組存儲單元的溫度,所述一組存儲單元的用例,以及所述一組存儲單元的錯誤統(tǒng)計。
19.一種提高固態(tài)存儲介質(zhì)實用性的系統(tǒng),所述系統(tǒng)包括 固態(tài)存儲設(shè)備,所述固態(tài)存儲設(shè)備包括固態(tài)存儲介質(zhì); 介質(zhì)特性模塊,所述介質(zhì)特性模塊為所述固態(tài)存儲介質(zhì)的一組存儲單元引用一個或多個存儲介質(zhì)特性; 配置參數(shù)模塊,所述配置參數(shù)模塊基于所述一個或多個存儲介質(zhì)特性確定所述一組存儲單元的配置參數(shù);以及 存儲單元配置模塊,所述存儲單元配置模塊配置所述一組存儲單元以使用確定的配置參數(shù)。
20.根據(jù)權(quán)利要求19所述的系統(tǒng),還包括與所述固態(tài)存儲設(shè)備通信的主機設(shè)備,其中所述介質(zhì)特性模塊、所述配置參數(shù)模塊和所述存儲單元配置模塊中的一個或多個的至少一部分為所述固態(tài)存儲設(shè)備的設(shè)備驅(qū)動器的一部分,所述設(shè)備驅(qū)動器安裝在所述主機設(shè)備上。
全文摘要
本發(fā)明公開了一種裝置、系統(tǒng)和方法,用于通過確定固態(tài)存儲介質(zhì)的一個或多個配置參數(shù)來提高所述固態(tài)存儲介質(zhì)的實用性。介質(zhì)特性模塊為固態(tài)存儲介質(zhì)的一組存儲單元引用一個或多個存儲介質(zhì)特性。配置參數(shù)模塊基于所述一個或多個存儲介質(zhì)特性確定所述一組存儲單元的配置參數(shù)。存儲單元配置模塊配置所述一組存儲單元以使用所述確定的配置參數(shù)。
文檔編號G06F3/06GK102890621SQ201210252569
公開日2013年1月23日 申請日期2012年7月20日 優(yōu)先權(quán)日2011年7月22日
發(fā)明者羅伯特·伍德, 珍·玄, 孫海榮 申請人:弗森-艾奧公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1