專利名稱:存儲介質(zhì)中數(shù)據(jù)校驗方法
技術(shù)領(lǐng)域:
本發(fā)明涉及靜態(tài)存儲器領(lǐng)域,特別涉及存儲介質(zhì)中數(shù)據(jù)校驗方法。
背景技術(shù):
現(xiàn)有閃存介質(zhì)(Flash)的生產(chǎn)及使用過程會產(chǎn)生壞位(Bit)或壞塊 (Block)。為確保閃存介質(zhì)存儲數(shù)據(jù)的可靠性, 一般需要在應(yīng)用閃存介質(zhì)的 系統(tǒng)或芯片中檢測出壞位或壞塊的位置,然后把壞位或壞塊中的數(shù)據(jù)糾正過 來,這一做法簡稱為校驗(ECC, Error Checking and Correcting)。對閃存 介質(zhì)中數(shù)據(jù)的校驗常用比較專用和較復(fù)雜的校驗技術(shù),例如RS (Reed-Solomon)校驗或BCH校驗等技術(shù),能糾正多比特的錯誤,而且用硬 件實現(xiàn)時,尋找錯誤的位置和糾正錯誤的速度很快。
以NAND閃存介質(zhì)為例,對每一頁(page)進(jìn)行校驗碼編碼常用兩種做法
1、 將數(shù)據(jù)存放在頁的前面部分,頁后面部分的冗余區(qū)則存放校驗碼;
2、 每一段數(shù)據(jù)后面跟著存放一段校驗碼, 一個頁里通常有至少兩組這樣 排列的數(shù)據(jù)和校驗碼,而且大部分情況是512byte的數(shù)據(jù)+16byte的校驗碼的 重復(fù)模式。
上述做法具有冗余區(qū)的限制,目前閃存介質(zhì)的設(shè)計是每一個扇區(qū)即512個 字節(jié)后跟有16個字節(jié)的冗余。根據(jù)目前的RS ECC算法,16個字節(jié)的冗余區(qū)只 能適合在512字節(jié)里校驗4個位的錯誤。而根據(jù)目前的BCH ECC算法,16個字節(jié) 的冗余區(qū)只能適合在512字節(jié)里校驗9個位的錯誤。并且ECC的算法相當(dāng)復(fù)雜, 想校驗更多的錯誤位(Bit), 一般需要更多的冗余區(qū)或增加算法的復(fù)雜度, 從而增加芯片/系統(tǒng)的成本,也可能降低編碼、檢測和糾錯的速度。
一般情況下,如果操作時序和電路穩(wěn)定性不存在問題,NAND閃存介質(zhì)不 會產(chǎn)生整個塊或頁全部出錯的情況,通常包含512Bytes的一個頁中只有一個 或幾個位(Bit)出錯。
發(fā)明內(nèi)容
本發(fā)明目的在于提供一種存儲介質(zhì)中數(shù)據(jù)校驗方法,以提高數(shù)據(jù)校驗效 本發(fā)明提供存儲介質(zhì)中數(shù)據(jù)校驗方法,包括組織ECC數(shù)據(jù)矩陣;對數(shù)據(jù) 編碼,產(chǎn)生行校驗碼和列校驗碼;在對ECC數(shù)據(jù)矩陣進(jìn)行數(shù)據(jù)操作時,使用行 校驗碼和列校驗碼對數(shù)據(jù)進(jìn)行校驗。
優(yōu)選地,上述組織ECC數(shù)據(jù)矩陣是將存儲介質(zhì)的一個扇區(qū)分別作為一行, 多個扇區(qū)分別取一個字節(jié)組成一列,多行與多列組成ECC數(shù)據(jù)矩陣。
優(yōu)選地,上述ECC數(shù)據(jù)矩陣的每行分為多字節(jié)的行數(shù)據(jù)區(qū)和多字節(jié)的行校 驗區(qū),各行校驗區(qū)用于存放該行的行校驗碼;根據(jù)各行數(shù)據(jù)區(qū)中的數(shù)據(jù)分別 編碼得到各行的行校驗碼,行校驗區(qū)的每一列分別存放行校驗碼的一個字節(jié)。
優(yōu)選地,ECC數(shù)據(jù)矩陣的每列分為多字節(jié)的列數(shù)據(jù)區(qū)和多字節(jié)的列校驗 區(qū),各列校驗區(qū)用于存放該列的列校驗碼;根據(jù)各列數(shù)據(jù)區(qū)中的數(shù)據(jù)分別編 碼得到各列的列校驗碼,列校驗區(qū)的每一行分別存放列校驗碼的一個字節(jié)。
優(yōu)選地,上述將數(shù)據(jù)寫入存儲介質(zhì)的過程包括對數(shù)據(jù)編碼產(chǎn)生行校驗 碼和列校驗碼的步驟;將數(shù)據(jù)與行校驗碼和列校驗碼組成ECC數(shù)據(jù)矩陣的步 驟;將ECC數(shù)據(jù)矩陣寫入存儲介質(zhì)的步驟。
上述將數(shù)據(jù)寫入所述存儲介質(zhì)的過程還包括判斷需要寫入的數(shù)據(jù)是否 夠填滿一個數(shù)據(jù)矩陣,若不夠填滿一個數(shù)據(jù)矩陣則等待下次需要寫入的數(shù)據(jù) 或用隨機數(shù)填充,使數(shù)據(jù)足夠填滿一個數(shù)據(jù)矩陣。
優(yōu)選地,上述從存儲介質(zhì)讀取數(shù)據(jù)的過程包括從存儲介質(zhì)中讀取ECC數(shù) 據(jù)矩陣的步驟;對ECC數(shù)據(jù)矩陣中的數(shù)據(jù),進(jìn)行行校驗和/或列校驗的步驟; 返回數(shù)據(jù)或校驗結(jié)果的步驟。
優(yōu)選地,上述修改存儲介質(zhì)中的數(shù)據(jù)的過程包括從存儲介質(zhì)中讀取ECC 數(shù)據(jù)矩陣的步驟;對ECC數(shù)據(jù)矩陣中的數(shù)據(jù)進(jìn)行行校驗和/或列校驗的步驟; 修改數(shù)據(jù),產(chǎn)生新的ECC數(shù)據(jù)矩陣的歩驟;將新的ECC數(shù)據(jù)矩陣寫入存儲介質(zhì) 的步驟。
本發(fā)明比單獨的行校驗具有更強的糾錯能力,能糾正更多字節(jié)的錯誤, 可提高校驗數(shù)據(jù)的位數(shù),容許存儲介質(zhì)出現(xiàn)較多的錯誤位數(shù),并能很好地糾 正這些錯誤。本發(fā)明能更好的支持MLC和4LC類的存儲介質(zhì),達(dá)到延長存儲介 質(zhì)的壽命,提高存儲介質(zhì)利用率,降低系統(tǒng)成本的目的。
圖l是本發(fā)明存儲介質(zhì)的扇區(qū)結(jié)構(gòu)示意圖2是本發(fā)明第 -實施例的ECC數(shù)據(jù)矩陣示意圖3是本發(fā)明第一實施例的寫數(shù)據(jù)流程示意圖4是本發(fā)明第一實施例的讀數(shù)據(jù)流程示意圖5是本發(fā)明第一實施例的修改數(shù)據(jù)流程示意圖6是本發(fā)明第一實施例對ECC數(shù)據(jù)矩陣校驗過程示意圖7是本發(fā)明第三實施例對ECC數(shù)據(jù)矩陣校驗過程示意圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進(jìn)一步 說明。
具體實施例方式
本發(fā)明提出第一實施例。參照圖l,存儲介質(zhì)在邏輯上分為多個扇區(qū),一 個扇區(qū)包括A字節(jié)的數(shù)據(jù)和B字節(jié)的冗余,其中變量A、 B為自然數(shù),A字節(jié)通常 為512字節(jié),B字節(jié)通常為16字節(jié)或者26字節(jié)。
本實施例提出ECC數(shù)據(jù)矩陣,將存儲介質(zhì)中一個扇區(qū)作為一行,多個扇區(qū) 分別取一個字節(jié)組成一列,形成一個矩陣稱為ECC數(shù)據(jù)矩陣。參照圖2,將該 ECC數(shù)據(jù)矩陣的每行分為N字節(jié)的行數(shù)據(jù)區(qū)和M字節(jié)的行校驗區(qū),每列也分為J 字節(jié)的列數(shù)據(jù)區(qū)和K字節(jié)的列校驗區(qū)。J個行數(shù)據(jù)區(qū)和N個列數(shù)據(jù)區(qū)形成的矩 陣均用于存放數(shù)據(jù),為便于說明,將這些數(shù)據(jù)稱為數(shù)據(jù)矩陣;各行校驗區(qū)用 于存放該行的行校驗碼,按照列從小到大的順序,行校驗區(qū)的每一列分別存 放行校驗碼的一個字節(jié);各列校驗區(qū)用于存放該列的列校驗碼,按照行從小 到大的順序,列校驗區(qū)的每一行分別存放列校驗碼的一個字節(jié)。
本實施例根據(jù)各行數(shù)據(jù)區(qū)中的數(shù)據(jù),分別用BCH或RS算法進(jìn)行編碼得到 各行的行校驗碼,根據(jù)各列數(shù)據(jù)區(qū)中的數(shù)據(jù),分別用BCH或RS算法進(jìn)行編碼 得到各列的列校驗碼。
上述變量N、 M、 J、 K為自然數(shù),根據(jù)存儲介質(zhì)條件選擇合適的取值。
本實施例在寫入數(shù)據(jù)過程中,根據(jù)數(shù)據(jù)矩陣中的數(shù)據(jù),編碼得到各行的 行校驗碼和各列的列校驗碼,分別存入ECC數(shù)據(jù)矩陣的各行校驗區(qū)和各列校驗 區(qū)中。當(dāng)讀取或修改該數(shù)據(jù)矩陣中的數(shù)據(jù)時,分別使用各行校驗碼對各行數(shù) 據(jù)進(jìn)行校驗和/或分別使用各列校驗碼對各列數(shù)據(jù)進(jìn)行校驗。
參照圖3所示的寫數(shù)據(jù)流程,本實施例對ECC數(shù)據(jù)矩陣寫數(shù)據(jù)流程包括 步驟S100,緩沖系統(tǒng)要寫入存儲介質(zhì)的數(shù)據(jù),將數(shù)據(jù)暫存在RAM中; 歩驟S102,判斷數(shù)據(jù)是否夠組成一個數(shù)據(jù)矩陣,如果不夠組成數(shù)據(jù)矩陣 則返回歩驟SIOO,否則將數(shù)據(jù)組成數(shù)據(jù)矩陣,進(jìn)行步驟S104; 步驟S104,對數(shù)據(jù)矩陣編碼產(chǎn)生行校驗碼和列校驗碼;
步驟S106,判斷是否完成編碼,產(chǎn)生所有行的行校驗碼和所有列的列校 驗碼,如果沒有完成則返回歩驟S104的編碼過程,否則進(jìn)行歩驟S108;
步驟S108,將數(shù)據(jù)矩陣與所有行校驗碼和列校驗碼組成ECC數(shù)據(jù)矩陣,將 ECC數(shù)據(jù)矩陣寫入存儲介質(zhì),寫數(shù)據(jù)流程結(jié)束。
參照圖4所示的讀數(shù)據(jù)流程,本實施例從ECC數(shù)據(jù)矩陣讀數(shù)據(jù)流程包括 步驟S200,從存儲介質(zhì)中讀取ECC數(shù)據(jù)矩陣,暫存在RAM中; 步驟S202,對ECC數(shù)據(jù)矩陣中的數(shù)據(jù)進(jìn)行行校驗和/或列校驗; 步驟S204,判斷是否已完成對ECC數(shù)據(jù)矩陣中所有數(shù)據(jù)的校驗,如果未完 成對所有數(shù)據(jù)的校驗則返回步驟S202的校驗過程,否則進(jìn)行步驟S206; 步驟S206,向系統(tǒng)返回數(shù)據(jù)或校驗結(jié)果,讀數(shù)據(jù)流程結(jié)束。
參照圖5所示的修改數(shù)據(jù)流程,本實施例修改ECC數(shù)據(jù)矩陣的流程包括 歩驟S300,從存儲介質(zhì)中讀取ECC數(shù)據(jù)矩陣,暫存在MM中; 歩驟S302,對ECC數(shù)據(jù)矩陣中的數(shù)據(jù)進(jìn)行行校驗和/或列校驗; 步驟S304,判斷是否已完成ECC數(shù)據(jù)矩陣中所有數(shù)據(jù)的校驗,如果未完成 對所有數(shù)據(jù)的校驗,則返回歩驟S302的校驗過程,否則進(jìn)行步驟S306; 步驟S306,在RAM中修改數(shù)據(jù),產(chǎn)生新數(shù)據(jù);
步驟S308,調(diào)用上述寫數(shù)據(jù)流程,將修改后的新數(shù)據(jù)寫入存儲介質(zhì)中, 修改數(shù)據(jù)流程結(jié)束。
上述讀數(shù)據(jù)和修改數(shù)據(jù)流程中對數(shù)據(jù)矩陣中的數(shù)據(jù)進(jìn)行行校驗和/或列 校驗的過程如圖6所示,包括
步驟S400,使用列校驗碼逐列校驗數(shù)據(jù)矩陣;
步驟S402,判斷是否完成對數(shù)據(jù)矩陣所有列的校驗,若未完成則返回步 驟S400,否則進(jìn)行步驟S404;
步驟S404,判斷是否己糾正數(shù)據(jù)矩陣中的所有錯誤,若已糾正所有錯誤 則進(jìn)行步驟S412,否則進(jìn)行歩驟S406;
歩驟S406,使用行校驗碼逐行校驗數(shù)據(jù)矩陣;
歩驟S408,判斷是否完成對數(shù)據(jù)矩陣所有行的校驗,若未完成則返回步
驟S406,否則進(jìn)行步驟S410;
步驟S410,判斷是否己糾正數(shù)據(jù)矩陣中的所有錯誤,若已糾正所有錯誤 則進(jìn)行步驟S412,否則進(jìn)行步驟S414;
步驟S412,報告糾錯成功的結(jié)果,流程結(jié)束;
步驟S414,報告糾錯失敗的結(jié)果,流程結(jié)束。
上述校驗過程中,步驟S400至步驟S404是從數(shù)據(jù)矩陣的第一列開始,讀 取第一列的列校驗碼,再根據(jù)其列數(shù)據(jù)區(qū)中的數(shù)據(jù)編碼產(chǎn)生列校驗碼,將這 兩個列校驗碼比較,若發(fā)現(xiàn)兩個列校驗碼不同則說明第一列的數(shù)據(jù)有錯,用 列校驗碼對其進(jìn)行糾正;然后對第二列進(jìn)行同樣的校驗,直到完成對數(shù)據(jù)矩 陣的最后一列的校驗。如果有某些列中數(shù)據(jù)的錯誤個數(shù)少于列校驗碼能糾正 的錯誤個數(shù),則將這些錯誤都糾正過來,校驗結(jié)果為成功;如果有某列數(shù)據(jù) 的錯誤個數(shù)超出了列校驗碼的糾錯能力,則保持這一列數(shù)據(jù)不變。
上述校驗過程中,步驟S406至歩驟S410,參照上文的列校驗做法,從數(shù) 據(jù)矩陣的第一行進(jìn)行校驗,依次校驗完所有行。如果有某些行中數(shù)據(jù)的錯誤 個數(shù)少于行校驗碼能糾正的錯誤個數(shù),則將這些錯誤都糾正過來,校驗結(jié)果 為成功;如果有某行數(shù)據(jù)的錯誤個數(shù)超出了行校驗碼的糾錯能力,則這些錯 誤無法被校驗,校驗結(jié)果為失敗。
上文提供了存儲介質(zhì)中數(shù)據(jù)校驗的一種實施例,本發(fā)明基于第一實施例 提出第二實施例。本實施例ECC數(shù)據(jù)矩陣的結(jié)構(gòu)、行校驗碼、列校驗碼、數(shù)據(jù) 操作流程與第一實施例類似,故不贅述。
本實施例將ECC數(shù)據(jù)矩陣應(yīng)用到NAND閃存介質(zhì)中。在物理_ t NAND閃存 介質(zhì)的組織方式一般為多個字節(jié)(byte)構(gòu)成一個頁(page),多個頁(page) 構(gòu)成一個塊(block)。 一個塊通常包含32、 64或128個頁, 一個頁至少包 含一個邏輯上的扇區(qū),即包括一組、兩組、四組或更多組的A字節(jié)和B字節(jié) 的組合。在典型應(yīng)用中,NAND閃存介質(zhì)的一個頁包含1024字節(jié)+32字節(jié),即 兩組512字節(jié)+16字節(jié)的組合, 一個塊包含128個頁。
本實施例設(shè)一520列、255行的ECC數(shù)據(jù)矩陣,N取值為512, M取值為8, J 取值為223, K取值為22。該ECC數(shù)據(jù)矩陣塊的1 233行、1 512列形成數(shù)據(jù)矩 陣存放數(shù)據(jù),各行的513 520列為行校驗區(qū),存放該行的行校驗碼;各列的 233 255行為列校驗區(qū),存放該列的列校驗碼。
當(dāng)本實施例的ECC數(shù)據(jù)矩陣應(yīng)用在此NAND閃存介質(zhì)中的時候,具體的存 儲方式是每一頁存儲ECC數(shù)據(jù)矩陣的兩行,即將1024字節(jié)+32字節(jié)分為兩組512字節(jié)+16字節(jié)的組合,每一組放ECC數(shù)據(jù)矩陣的一行,每行的基本數(shù)據(jù)放
在該組的1 512字節(jié)中,行校驗碼放在該組的513 528字節(jié)中,上述ECC 數(shù)據(jù)矩陣塊的行校驗區(qū)占其中8個字節(jié),剩余字節(jié)可以空置。 一個塊包含128 個頁,可以存放256行,其中第1頁 第116頁存放ECC數(shù)據(jù)矩陣的1 233 行,第117頁 第128頁存放ECC數(shù)據(jù)矩陣的233 255行,這部分是列校驗 區(qū),存放列校驗碼。由于ECC數(shù)據(jù)矩陣塊的列校驗區(qū)共22行,余下的一頁可 以空置,實現(xiàn)每個塊存放一個ECC數(shù)據(jù)矩陣。
本實施例也可以根據(jù)不同的NAND閃存介質(zhì)芯片和ECC數(shù)據(jù)矩陣的大小 改變存儲方式,例如多個塊放一個ECC數(shù)據(jù)矩陣,也可能一個塊放多個ECC 數(shù)據(jù)矩陣。ECC數(shù)據(jù)矩陣的一行可以對應(yīng)閃存介質(zhì)的一頁、 一頁的部分或多個 頁的組合。當(dāng)ECC數(shù)據(jù)矩陣的大小是NAND閃存介質(zhì)一個頁的倍數(shù)或者約數(shù)的 時候,可以充分使用NAND閃存介質(zhì)的數(shù)據(jù)操作特性,應(yīng)用會比較方便。
另外,通常情況下根據(jù)NAND閃存介質(zhì)的特點,N選擇為512的倍數(shù)或者 約數(shù),并且當(dāng)A為N的P倍時,M應(yīng)滿足小于等于B的P分之一,以保證NAND 閃存介質(zhì)的冗余區(qū)能放下ECC數(shù)據(jù)矩陣的行校驗碼。
參照圖3所示的寫數(shù)據(jù)流程,本實施例對上述ECC數(shù)據(jù)矩陣寫數(shù)據(jù)流程 與第一實施例類似,其中步驟S104中對數(shù)據(jù)矩陣編碼產(chǎn)生行校驗碼的具體做 法為對ECC數(shù)據(jù)矩陣1行的行數(shù)據(jù)區(qū)數(shù)據(jù)編碼產(chǎn)生22字節(jié)的行校驗碼,將 這22個字節(jié)分別依次存儲在1行的513列 520列中;同理依次處理2行、3 行直到223行,對所有行數(shù)據(jù)區(qū)都產(chǎn)生行校驗碼并存儲在相應(yīng)行校驗區(qū)中。
對數(shù)據(jù)矩陣編碼產(chǎn)生列校驗碼的具體做法為對ECC數(shù)據(jù)矩陣1列的列 數(shù)據(jù)區(qū)數(shù)據(jù)編碼產(chǎn)生8字節(jié)的列校驗碼,將這8個字節(jié)分別依次存儲在1列 的224行 255行中;同理依次處理2列、3列直到512列,對所有列數(shù)據(jù)區(qū) 都產(chǎn)生列校驗碼并存儲在相應(yīng)列校驗區(qū)中。
參照圖5所示的修改數(shù)據(jù)流程,本實施例修改ECC數(shù)據(jù)矩陣的流程與第 一實施例類似,參照上述讀取數(shù)據(jù)的校驗過程完成對所有行以及所有列的校 驗后,根據(jù)校驗的結(jié)果返回校驗失敗信息或返回數(shù)據(jù)矩陣中的數(shù)據(jù),由使用 本實施例的系統(tǒng)在其RAM中修改數(shù)據(jù)矩陣中的數(shù)據(jù),然后將修改后的新數(shù)據(jù) 寫入數(shù)據(jù)矩陣中,并參照上述寫數(shù)據(jù)的過程對數(shù)據(jù)矩陣產(chǎn)生各行校驗碼和各 列校驗碼,分別記錄在各行校驗區(qū)和各列校驗區(qū)中。
根據(jù)NAND閃存介質(zhì)的特性,本實施例提出兩種修改數(shù)據(jù)的做法,第一種
是將ECC數(shù)據(jù)矩陣所在的塊中的原有數(shù)據(jù)全部讀出保存在RAM中,將該塊全
部擦除,然后將修改得到的新ECC數(shù)據(jù)矩陣以及該塊中的其他原有數(shù)據(jù)重新
組成一個塊,寫入另取的一個空塊中。
第二種做法是取一空塊,將修改得到的新ECC數(shù)據(jù)矩陣及其所在的塊屮 原有數(shù)據(jù)復(fù)制到該空塊中,將ECC數(shù)據(jù)矩陣所在的原塊標(biāo)記為數(shù)據(jù)無用,等 待系統(tǒng)后續(xù)擦除。上述兩種修改數(shù)據(jù)的做法可以相互替換使用。第一種寫入 方式模型簡單,控制方便;第二種做法更常用、速度更高,更利于對NAND閃 存介質(zhì)壞塊的管理。
參照圖6所示的對ECC數(shù)據(jù)矩陣進(jìn)行行校驗和/或列校驗的過程屮,步驟 S400,使用列校驗碼逐列校驗數(shù)據(jù)矩陣的具體做法為依次讀取該ECC數(shù)據(jù)矩 陣1列的224行 255行,將讀出的8個字節(jié)組合得到1列的列校驗碼,再根據(jù)l 列的列數(shù)據(jù)區(qū)數(shù)據(jù)編碼產(chǎn)生列校驗碼,將兩個列校驗碼比較,若發(fā)現(xiàn)兩個列 校驗碼不同則說明l列的列數(shù)據(jù)區(qū)數(shù)據(jù)有錯,用列校驗碼對其進(jìn)行糾正;同理 依次處理2列、3列直到223列,對所有列數(shù)據(jù)區(qū)都進(jìn)行校驗。
同理,步驟S406,使用行校驗碼逐行校驗數(shù)據(jù)矩陣的具體做法為依次 讀取該ECC數(shù)據(jù)矩陣1行的513列 520列,將讀出的22字節(jié)組合得到1行的行校 驗碼,再根據(jù)l行的行數(shù)據(jù)區(qū)數(shù)據(jù)編碼產(chǎn)生行校驗碼,將兩個行校驗碼比較, 若發(fā)現(xiàn)兩個行校驗碼不同則說明l行的行數(shù)據(jù)區(qū)數(shù)據(jù)有錯,用行校驗碼對其進(jìn) 行糾正;同理依次處理2行、3行直到223行,對所有行數(shù)據(jù)區(qū)都進(jìn)行校驗。
本發(fā)明還提出第三實施例,采用二維ECC引擎對數(shù)據(jù)矩陣編碼形成ECC 數(shù)據(jù)矩陣,并對ECC數(shù)據(jù)矩陣進(jìn)行校驗。二維ECC引擎是一種數(shù)字邏輯電路, 能夠讀取RAM中的數(shù)據(jù)矩陣,根據(jù)數(shù)據(jù)矩陣中的數(shù)據(jù)計算出行校驗碼和列校 驗碼;讀取RAM中的ECC數(shù)據(jù)矩陣,根據(jù)數(shù)據(jù)矩陣中的數(shù)據(jù)計算出新行校驗 碼和新列校驗碼,通過對比新校驗碼和原來ECC數(shù)據(jù)矩陣中存儲的校驗碼, 可以檢測出壞位或壞塊的位置,把壞位或壞塊中的數(shù)據(jù)糾正過來。
本實施例提出根據(jù)ECC數(shù)據(jù)矩陣設(shè)計相應(yīng)的二維ECC引擎,二維ECC引 擎對輸入的數(shù)據(jù)矩陣進(jìn)行ECC編碼,得到相應(yīng)的ECC數(shù)據(jù)矩陣。參照第二實 施例中ECC數(shù)據(jù)矩陣的典型設(shè)計,本實施例設(shè)計二維ECC引擎,對存儲在RAM 中的數(shù)據(jù)矩陣每一行的512字節(jié)數(shù)據(jù)進(jìn)行RS (520, 512)編碼,得到8字節(jié) 的行校驗碼;對512列+8歹i」,每一列223字節(jié)的數(shù)據(jù)進(jìn)行RS (255, 223)編 碼,得到22字節(jié)的列校驗碼;從而得到一個520列,255行的ECC數(shù)據(jù)矩陣,
保存在RAM中。
二維ECC引擎對讀入RAM中的ECC數(shù)據(jù)矩陣進(jìn)行校驗,如圖6所示,第一實 施例提出了一種對數(shù)據(jù)矩陣進(jìn)行行校驗和/或列校驗的過程。
本實施例提出改進(jìn)的循環(huán)校驗過程以提高校驗的能力,如圖7所示,具體 包括
步驟S500,使用列校驗碼逐列校驗;
步驟S502,判斷是否完成對數(shù)據(jù)矩陣的所有列的校驗,若未完成則進(jìn)行 歩驟S500,否則進(jìn)行步驟S504;
步驟S504,使用行校驗碼逐行校驗;
步驟S506,判斷是否完成對數(shù)據(jù)矩陣所有行的校驗,若未完成則返回步 驟S504,否則進(jìn)行歩驟S508;
步驟S508,判斷是否在本次S500到S506的步驟中糾正了任何錯誤,若 有糾正至少一個錯誤則返回步驟S500進(jìn)行循環(huán)糾錯,若沒有糾正任何錯誤進(jìn) 行步驟S510;
歩驟S510,判斷是否已糾正所有錯誤,若已糾正所有錯誤則進(jìn)行步驟 S512,否則進(jìn)行步驟S514;
步驟S512,報告糾錯成功的結(jié)果,流程結(jié)束; 步驟S514,報告糾錯失敗的結(jié)果,流程結(jié)束。
使用二維ECC引擎將數(shù)據(jù)矩陣寫入NAND閃存介質(zhì)中,是將需要寫入的數(shù) 據(jù)暫存在RAM中;如果需要寫入的數(shù)據(jù)不夠填滿一個數(shù)據(jù)矩陣,必須等待下 次需要寫入的數(shù)據(jù),與本次需要寫入的數(shù)據(jù)共同填滿一個數(shù)據(jù)矩陣;或者用 隨機數(shù)填充,使數(shù)據(jù)足夠填滿一個數(shù)據(jù)矩陣;然后啟動二維ECC引擎,對該 數(shù)據(jù)矩陣的每一行和每一列都進(jìn)行BCH或者RS編碼,得到校驗碼,與數(shù)據(jù)矩 陣組成ECC數(shù)據(jù)矩陣;然后啟動閃存介質(zhì)控制器,將ECC數(shù)據(jù)矩陣寫入NAND 閃存介質(zhì)中。
使用二維ECC引擎從數(shù)據(jù)矩陣中讀取數(shù)據(jù),無論要讀取的數(shù)據(jù)等于還是 少于ECC數(shù)據(jù)矩陣,為了保證數(shù)據(jù)的完整無誤,都需要一次把整個ECC數(shù)據(jù) 矩陣讀到RAM中,然后啟動二維ECC引擎對ECC數(shù)據(jù)矩陣進(jìn)行校驗,將校驗 后的數(shù)據(jù)保存在RAM中。如果二維ECC引擎無法完成糾錯,則報告錯誤無法 糾正,讀取數(shù)據(jù)失敗。
使用二維ECC引擎對數(shù)據(jù)矩陣作修改,當(dāng)需要修改的數(shù)據(jù)不超過一個ECC
數(shù)據(jù)矩陣的時候,先將整個ECC數(shù)據(jù)矩陣用上述讀取數(shù)據(jù)的做法讀出來放在
RAM完成糾錯;在RAM中修改數(shù)據(jù)得到新的數(shù)據(jù)矩陣;然后啟動二維ECC引擎, 重新計算出數(shù)據(jù)矩陣的行校驗碼和列校驗碼,與新的數(shù)據(jù)矩陣組成新的ECC 數(shù)據(jù)矩陣,寫入NAND閃存介質(zhì)中。
以上述二維ECC引擎及ECC數(shù)據(jù)矩陣為例,行校驗碼最多能糾正每行隨 機4個字節(jié)的錯誤,列校驗碼最多能校驗每行l(wèi)l個字節(jié)的錯誤。設(shè)某數(shù)據(jù)矩 陣只有第一行有5個字節(jié)錯誤,因為5個字節(jié)已超出行校驗碼4個字節(jié)的糾 錯能力,只作行檢驗就無法對這5個字節(jié)進(jìn)行糾錯。但是本實施例結(jié)合列校 驗,第一行的5個字節(jié)分布在不同的5列中,每一列都只有一個字節(jié)錯誤, 小于ll個字節(jié),故可用列校驗碼將這5列中的錯誤全部糾正過來,說明本實 施例比單獨的行校驗有更強的糾錯能力,能糾正更多字節(jié)的錯誤。
上述BCH、 RS編碼方式是對編碼方式的統(tǒng)稱,每一種具體的編碼方式對 512字節(jié)的數(shù)據(jù)編碼產(chǎn)生的校驗碼的字節(jié)數(shù)也不一樣,校驗碼能糾正的錯誤字 節(jié)數(shù)也和具體的編碼方式有關(guān)。本實施例還可以采用代數(shù)幾何碼,巻積碼等 編碼方式及其結(jié)合實現(xiàn)校驗碼的編碼和校驗。
本發(fā)明除適用于NAND閃存介質(zhì)外,還適用于AG-AND等多種閃存介質(zhì), 支持MIX和4LC類的存儲介質(zhì),以及多種文件系統(tǒng)和存儲介質(zhì)組織形式,數(shù) 據(jù)校驗方法與前述實施例類似,故不贅述。
以上所述僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍, 凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接 或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種存儲介質(zhì)中數(shù)據(jù)校驗方法,包括組織ECC數(shù)據(jù)矩陣;對數(shù)據(jù)編碼,產(chǎn)生行校驗碼和列校驗碼;在對所述ECC數(shù)據(jù)矩陣進(jìn)行數(shù)據(jù)操作時,使用所述行校驗碼和列校驗碼對數(shù)據(jù)進(jìn)行校驗。
2. 根據(jù)權(quán)利要求1所述的存儲介質(zhì)中數(shù)據(jù)校驗方法,其特征在于,所述 組織ECC數(shù)據(jù)矩陣是將所述存儲介質(zhì)的一個扇區(qū)分別作為一行,多個扇區(qū)分 別取一個字節(jié)組成一列,多行與多列組成所述ECC數(shù)據(jù)矩陣。
3. 根據(jù)權(quán)利要求2所述的存儲介質(zhì)中數(shù)據(jù)校驗方法,其特征在于,所述 ECC數(shù)據(jù)矩陣的每行分為多字節(jié)的行數(shù)據(jù)區(qū)和多字節(jié)的行校驗區(qū),各行校驗區(qū) 用于存放該行的行校驗碼;根據(jù)各行數(shù)據(jù)區(qū)中的數(shù)據(jù)分別編碼得到各行的行 校驗碼,行校驗區(qū)的每一列分別存放行校驗碼的一個字節(jié)。
4. 根據(jù)權(quán)利要求2所述的存儲介質(zhì)中數(shù)據(jù)校驗方法,其特征在于 ECC數(shù)據(jù)矩陣的每列分為多字節(jié)的列數(shù)據(jù)區(qū)和多字節(jié)的列校驗區(qū),各列校驗區(qū)用于存放該列的列校驗碼;根據(jù)各列數(shù)據(jù)區(qū)中的數(shù)據(jù)分別編碼得到各列 的列校驗碼,列校驗區(qū)的每一行分別存放列校驗碼的一個字節(jié)。
5. 根據(jù)權(quán)利要求1至4任意一項所述的存儲介質(zhì)中數(shù)據(jù)校驗方法,其特征 在于,將數(shù)據(jù)寫入所述存儲介質(zhì)的過程包括對數(shù)據(jù)編碼產(chǎn)生行校驗碼和列校驗碼的歩驟; 將數(shù)據(jù)與行校驗碼和列校驗碼組成ECC數(shù)據(jù)矩陣的歩驟;將所述ECC數(shù)據(jù)矩陣寫入存儲介質(zhì)的步驟。
6. 根據(jù)權(quán)利要求5所述的存儲介質(zhì)中數(shù)據(jù)校驗方法,其特征在于,將數(shù)據(jù)寫入所述存儲介質(zhì)的過程還包括判斷需要寫入的數(shù)據(jù)是否夠填滿一個數(shù)據(jù)矩陣,若不夠填滿一個數(shù)據(jù)矩 陣則等待下次需要寫入的數(shù)據(jù)或用隨機數(shù)填充,使數(shù)據(jù)足夠填滿-一個數(shù)據(jù)矩 陣。
7.根據(jù)權(quán)利要求1至4任意一項所述的存儲介質(zhì)中數(shù)據(jù)校驗方法,其特征 在于,從存儲介質(zhì)讀取數(shù)據(jù)的過程包括從存儲介質(zhì)中讀取ECC數(shù)據(jù)矩陣的步驟; 對ECC數(shù)據(jù)矩陣中的數(shù)據(jù),進(jìn)行行校驗和/或列校驗的步驟; 返回數(shù)據(jù)或校驗結(jié)果的歩驟。
8.根據(jù)權(quán)利要求1至4任意一項所述的存儲介質(zhì)中數(shù)據(jù)校驗方法,其特征在 于,所述修改存儲介質(zhì)中的數(shù)據(jù)的過程包括 從存儲介質(zhì)中讀取ECC數(shù)據(jù)矩陣的步驟;對ECC數(shù)據(jù)矩陣中的數(shù)據(jù)進(jìn)行行校驗和/或列校驗的歩驟; 修改數(shù)據(jù),產(chǎn)生新的ECC數(shù)據(jù)矩陣的步驟;將新的ECC數(shù)據(jù)矩陣寫入存儲介質(zhì)的步驟。
9.根據(jù)權(quán)利要求1至4任意一項所述的存儲介質(zhì)中數(shù)據(jù)校驗方法,其特征在于,所述對ECC數(shù)據(jù)矩陣中的數(shù)據(jù)進(jìn)行行校驗和/或列校驗的步驟包括對所述ECC數(shù)據(jù)矩陣中的至少一行數(shù)據(jù),使用行校驗碼分別校驗,再對所述ECC數(shù)據(jù)矩陣中的至少-列數(shù)據(jù),使用列校驗碼分別校驗;或?qū)λ鯡CC數(shù)據(jù)矩陣中的至少一列數(shù)據(jù),使用列校驗碼分別校驗,再對所 述ECC數(shù)據(jù)矩陣中的至少一行數(shù)據(jù),使用行校驗碼分別校驗。
10. 根據(jù)權(quán)利要求1至4任意一項所述的存儲介質(zhì)中數(shù)據(jù)校驗方法,其特征在 于,所述對ECC數(shù)據(jù)矩陣中的數(shù)據(jù)進(jìn)行行校驗和/或列校驗的步驟包括對所述ECC數(shù)據(jù)矩陣中的至少一列數(shù)據(jù),使用列校驗碼分別校驗;對所述ECC數(shù)據(jù)矩陣中的至少一行數(shù)據(jù),使用行校驗碼分別校驗;判斷上述校驗步驟是否糾正了錯誤,若糾正至少一錯誤則循環(huán)進(jìn)行上述列校 驗和行校驗過程,直到無法糾正任何錯誤。
11、 根據(jù)權(quán)利要求1至4任意一項所述的存儲介質(zhì)中數(shù)據(jù)校驗方法,其特征在 于,所述存儲介質(zhì)為Nand Flash閃存介質(zhì),所述ECC數(shù)據(jù)矩陣的一行對應(yīng)閃存 介質(zhì)的一頁、 一頁的部分或多個頁的組合。
全文摘要
本發(fā)明提供存儲介質(zhì)中數(shù)據(jù)校驗方法,包括組織ECC數(shù)據(jù)矩陣;對數(shù)據(jù)編碼,產(chǎn)生行校驗碼和列校驗碼;在對ECC數(shù)據(jù)矩陣進(jìn)行數(shù)據(jù)操作時,使用行校驗碼和列校驗碼對數(shù)據(jù)進(jìn)行校驗。本發(fā)明比單獨的行校驗具有更強的糾錯能力,能糾正更多字節(jié)的錯誤,可提高校驗數(shù)據(jù)的位數(shù),容許存儲介質(zhì)出現(xiàn)較多的錯誤位數(shù),并能很好地糾正這些錯誤。本發(fā)明能更好的支持MLC和4LC類的存儲介質(zhì),達(dá)到延長存儲介質(zhì)的壽命,提高存儲介質(zhì)利用率,降低系統(tǒng)成本的目的。
文檔編號G11C29/04GK101183565SQ20071012497
公開日2008年5月21日 申請日期2007年12月12日 優(yōu)先權(quán)日2007年12月12日
發(fā)明者成曉華, 挺 羅, 譚四方 申請人:深圳市硅格半導(dǎo)體有限公司