具有糾錯(cuò)功能的閃存數(shù)據(jù)存儲(chǔ)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種閃存數(shù)據(jù)存儲(chǔ)方法,具體涉及一種具有糾錯(cuò)功能的閃存數(shù)據(jù)存儲(chǔ) 方法。
【背景技術(shù)】
[0002] 現(xiàn)有nandfIash內(nèi)存由若干物理塊組成,如圖1所示,物理塊包含若干個(gè)物理頁(yè), 物理頁(yè)包括管理字節(jié)區(qū)、若干個(gè)由至少兩個(gè)扇區(qū)組成的用戶數(shù)據(jù)區(qū)和若干個(gè)分別與所述用 戶數(shù)據(jù)區(qū)一一對(duì)應(yīng)的錯(cuò)誤校驗(yàn)區(qū)(ECC),每個(gè)錯(cuò)誤校驗(yàn)區(qū)(ECC)用于校驗(yàn)并糾錯(cuò)其負(fù)責(zé)的 用戶數(shù)據(jù)區(qū)的錯(cuò)誤代碼,所述管理字節(jié)區(qū)用來(lái)建立邏輯頁(yè)與物理頁(yè)之間或者建立邏輯塊與 物理塊之間的對(duì)應(yīng)關(guān)系。 管理理字節(jié):一般是存儲(chǔ)控制器廠家根據(jù)自己的管理算法定義的幾個(gè)字節(jié),在實(shí)際應(yīng) 用中需要單獨(dú)讀取這部分?jǐn)?shù)據(jù)用來(lái)建立邏輯頁(yè)與物理頁(yè)之間或者建立邏輯塊與物理塊之 間的對(duì)應(yīng)關(guān)系和提供其它用戶管理信息。
[0003] Ik用戶數(shù)據(jù):包含用戶數(shù)據(jù)兩個(gè)扇區(qū)的數(shù)據(jù)。
[0004] LBA: logical block address,邏輯塊地址對(duì)應(yīng)于用戶一個(gè)扇區(qū)(512個(gè)字節(jié))的 數(shù)據(jù),PC主端與存儲(chǔ)類設(shè)備通信是以一個(gè)扇區(qū)(512個(gè)字節(jié))為單位進(jìn)行讀寫的。
[0005] ECC: error correction code,錯(cuò)誤校驗(yàn)(代碼)。nandflash物理特性上使得其 數(shù)據(jù)讀寫過程中會(huì)發(fā)生一定幾率的錯(cuò)誤,需要有個(gè)對(duì)應(yīng)的錯(cuò)誤檢驗(yàn)和糾正的機(jī)制,所以存 儲(chǔ)控制器一般都提供ECC用于用戶數(shù)據(jù)的檢測(cè)和糾正.Nandflash的ECC,常見的算法有 BCH和海明碼; 當(dāng)用戶只需要Ik用戶數(shù)據(jù)中前一個(gè)扇區(qū)或后一個(gè)扇區(qū)的數(shù)據(jù),如果將整個(gè)Ik的數(shù)據(jù) 都加載到存儲(chǔ)控制器緩存中,勢(shì)必存儲(chǔ)控制器緩存需要多增加一個(gè)扇區(qū)大小的容量;另外 本來(lái)只需要對(duì)一個(gè)扇區(qū)進(jìn)行糾錯(cuò),如果對(duì)整個(gè)Ik用戶數(shù)據(jù)都進(jìn)行糾錯(cuò)的話,必然降低了 對(duì)nandflash的讀速度。因此如何提高了對(duì)nandflash存儲(chǔ)設(shè)備的讀寫速度,成為本領(lǐng)域 技術(shù)人員努力的方向。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明目的是提供一種具有糾錯(cuò)功能的閃存數(shù)據(jù)存儲(chǔ)方法,該方法提高了對(duì) nandflash存儲(chǔ)設(shè)備的讀寫速度,且保證了讀寫信息準(zhǔn)確性且硬件利用率高。
[0007] 為達(dá)到上述目的,本發(fā)明采用的技術(shù)方案是:一種應(yīng)用于nandflash存儲(chǔ)設(shè)備的 快速讀寫方法,所述nandflash存儲(chǔ)器由若干物理塊組成,物理塊包含若干個(gè)物理頁(yè),物理 頁(yè)包括管理字節(jié)區(qū)、若干個(gè)由左、右兩個(gè)扇區(qū)組成的用戶數(shù)據(jù)區(qū)和若干個(gè)分別與所述用戶 數(shù)據(jù)區(qū)一一對(duì)應(yīng)的具有糾錯(cuò)功能的錯(cuò)誤校驗(yàn)區(qū)(ECC),每個(gè)錯(cuò)誤校驗(yàn)區(qū)(ECC)用于校驗(yàn)并 糾錯(cuò)其負(fù)責(zé)的用戶數(shù)據(jù)區(qū)中錯(cuò)誤代碼,所述管理字節(jié)區(qū)用來(lái)建立邏輯頁(yè)與物理頁(yè)之間的對(duì) 應(yīng)關(guān)系或者建立邏輯塊與物理塊之間的對(duì)應(yīng)關(guān)系; 還包括一組ECC控制寄存器用于對(duì)管理字節(jié)區(qū)、用戶數(shù)據(jù)區(qū)及錯(cuò)誤校驗(yàn)區(qū)分別控制是 否進(jìn)行糾錯(cuò),此ECC控制寄存器包括: 管理字節(jié)使能位,用于控制是否對(duì)所述管理字節(jié)區(qū)進(jìn)行糾錯(cuò); 左扇區(qū)數(shù)據(jù)使能位,用于控制是否對(duì)所述用戶數(shù)據(jù)區(qū)中一個(gè)扇區(qū)進(jìn)行糾錯(cuò)處理; 右扇區(qū)數(shù)據(jù)使能位,用于控制是否對(duì)所述用戶數(shù)據(jù)區(qū)中另一個(gè)扇區(qū)進(jìn)行糾錯(cuò)處理; 錯(cuò)誤校驗(yàn)使能位,用于控制是否對(duì)所述錯(cuò)誤校驗(yàn)區(qū)(ECC)進(jìn)行糾錯(cuò)處理; 管理字節(jié)長(zhǎng)度控制位,用于配置管理字節(jié)的長(zhǎng)度,從而控制對(duì)物理頁(yè)中使能的區(qū)域進(jìn) 行糾錯(cuò),而對(duì)物理頁(yè)中關(guān)閉的區(qū)域不進(jìn)行糾錯(cuò); 所述用戶數(shù)據(jù)區(qū)包括一個(gè)第一用戶數(shù)據(jù)區(qū)和至少一個(gè)第二用戶數(shù)據(jù)區(qū),所述錯(cuò)誤校驗(yàn) 區(qū)(ECC)包括一個(gè)第一錯(cuò)誤校驗(yàn)區(qū)(ECC)和至少一個(gè)第二錯(cuò)誤校驗(yàn)區(qū)(ECC),所述第一錯(cuò)誤 校驗(yàn)區(qū)(ECC)用于將其相應(yīng)的第一用戶數(shù)據(jù)區(qū)和管理字節(jié)區(qū)合在一起進(jìn)行校驗(yàn)糾錯(cuò)編碼; 在對(duì)nandflash進(jìn)行讀操作時(shí):當(dāng)在邏輯上讀用戶數(shù)據(jù)區(qū)中左扇區(qū)時(shí),則使能ECC控制 寄存器中左扇區(qū)數(shù)據(jù)使能位,如果左扇區(qū)位于第一用戶數(shù)據(jù)區(qū)內(nèi),則配置ECC控制寄存器 中管理字節(jié)長(zhǎng)度控制位有效(長(zhǎng)度為8),發(fā)送讀命令將用戶管理信息讀入BCH模塊解碼查 錯(cuò),但不加載到控制器緩存中,將左扇區(qū)數(shù)據(jù)讀到BCH模塊解碼查錯(cuò),并加載到控制器緩存 中進(jìn)行糾錯(cuò),再將右扇區(qū)讀到BCH模塊解碼查錯(cuò),但不加載到控制器緩存中,否則,發(fā)送讀 命令將左扇區(qū)數(shù)據(jù)讀到BCH模塊解碼查錯(cuò),并加載到控制器緩存中進(jìn)行糾錯(cuò),再將右扇區(qū) 讀到BCH模塊解碼查錯(cuò),但不加載到控制器的緩存中; 當(dāng)在邏輯上讀用戶數(shù)據(jù)區(qū)中右扇區(qū)時(shí),則使能ECC控制寄存器中右扇區(qū)數(shù)據(jù)使能位, 如果右扇區(qū)位于第一用戶數(shù)據(jù)區(qū)內(nèi),則配置ECC控制寄存器中管理字節(jié)長(zhǎng)度控制位有效 (長(zhǎng)度為8),發(fā)送讀命令將用戶管理信息和左扇區(qū)數(shù)據(jù)讀入BCH模塊解碼查錯(cuò),但不加載到 控制器緩存中,將右扇區(qū)數(shù)據(jù)讀到BCH模塊解碼查錯(cuò),并加載到控制器緩存中進(jìn)行糾錯(cuò),否 貝1J,發(fā)送讀命令將左扇區(qū)讀到BCH模塊解碼查錯(cuò),但不加載到控制器的緩存中,將扇區(qū)數(shù)據(jù) 讀到BCH模塊解碼查錯(cuò),并加載到控制器緩存中進(jìn)行糾錯(cuò); 當(dāng)在邏輯上讀一個(gè)由左、右兩個(gè)扇區(qū)組成的用戶數(shù)據(jù)區(qū)時(shí),則使能ECC控制寄存器中 左、右扇區(qū)數(shù)據(jù)使能位,如果用戶數(shù)據(jù)區(qū)為第一用戶數(shù)據(jù)區(qū),則配置ECC控制寄存器中管理 字節(jié)長(zhǎng)度控制位有效(長(zhǎng)度為8),發(fā)送讀命令將用戶管理信息讀入BCH模塊解碼查錯(cuò),但不 加載到控制器緩存中,將用戶數(shù)據(jù)區(qū)數(shù)據(jù)讀到BCH模塊解碼查錯(cuò),并加載到控制器緩存中 進(jìn)行糾錯(cuò),否則,發(fā)送讀命令將用戶數(shù)據(jù)區(qū)數(shù)據(jù)讀到BCH模塊解碼查錯(cuò),并加載到控制器緩 存中進(jìn)行糾錯(cuò)。
[0008] 上述技術(shù)方案中的進(jìn)一步改進(jìn)方案如下: 上述方案中,所述用戶管理信息區(qū)長(zhǎng)度為8個(gè)字節(jié),包括4個(gè)字節(jié)的管理字節(jié)和4個(gè)字 節(jié)的CRC校驗(yàn)碼。
[0009] 由于上述技術(shù)方案運(yùn)用,本發(fā)明與現(xiàn)有技術(shù)相比具有下列優(yōu)點(diǎn)和效果: 本發(fā)明具有糾錯(cuò)功能的閃存數(shù)據(jù)存儲(chǔ)方法,其硬件在ECC控制寄存器提供了一個(gè)機(jī)制 去使能或關(guān)閉相關(guān)區(qū)域數(shù)據(jù)是否需要糾錯(cuò),所以如果我們只需要讀取前一個(gè)扇區(qū)數(shù)據(jù)到存 儲(chǔ)控制器緩存中時(shí),我們可以只使能左扇區(qū)數(shù)據(jù)區(qū)域,讓整個(gè)Ik數(shù)據(jù)+BCH碼需要經(jīng)過ECC 通道進(jìn)行查錯(cuò),但只需要讀左扇區(qū)數(shù)據(jù)到存儲(chǔ)控制器緩存中進(jìn)行糾錯(cuò);基于上面同樣的原 因,我們?cè)趯?shí)際讀取數(shù)據(jù)時(shí),可能只需要讀取右扇區(qū)數(shù)據(jù)到存儲(chǔ)控制器緩存中,而且存儲(chǔ) 控制器緩存就只能提供一個(gè)扇區(qū)的容量可用(多讀出的數(shù)據(jù)會(huì)覆蓋掉前面的有用數(shù)據(jù)),因 此,我們?cè)谥恍枰x取后一個(gè)扇區(qū)數(shù)據(jù)到存儲(chǔ)控制器緩存中時(shí),可以配置ECC控制寄存器, 只使能右扇區(qū)數(shù)據(jù)區(qū)域,將整個(gè)Ik數(shù)據(jù)+BCH碼經(jīng)過ECC通道進(jìn)行查錯(cuò),但只讀右扇區(qū)數(shù)據(jù) 到存儲(chǔ)控制器緩存中進(jìn)行糾錯(cuò);又提高了對(duì)nandflash存儲(chǔ)設(shè)備的讀寫速度。
【附圖說(shuō)明】
[0010] 附圖1為現(xiàn)有技術(shù)nandflash存儲(chǔ)器結(jié)構(gòu)示意圖; 附圖2為本發(fā)明nandflash存儲(chǔ)器結(jié)構(gòu)示意圖; 附圖3為本發(fā)明管理字節(jié)讀操作流程圖; 附圖4為本發(fā)明ECC控制寄存器結(jié)構(gòu)示意圖; 附圖5為本發(fā)明用戶數(shù)據(jù)讀操作流程圖; 附圖6為本發(fā)明用戶數(shù)據(jù)寫操作流程圖。
【具體實(shí)施方式】
[0011] 下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步描述: 實(shí)施例:一種具有糾錯(cuò)功能的閃存數(shù)據(jù)存儲(chǔ)方法,所述nandflash存儲(chǔ)器由若干物 理塊組成,物理塊包含若干個(gè)物理頁(yè),物理頁(yè)包括管理字節(jié)區(qū)、若干個(gè)由左、右兩個(gè)扇區(qū)組 成的用戶數(shù)據(jù)區(qū)和若干個(gè)分別與所述用戶數(shù)據(jù)區(qū)一一對(duì)應(yīng)的具有糾錯(cuò)功能的錯(cuò)誤校驗(yàn)區(qū) (ECC),每個(gè)錯(cuò)誤校驗(yàn)區(qū)(ECC)用于校驗(yàn)并糾錯(cuò)其負(fù)責(zé)的用戶數(shù)據(jù)區(qū)中錯(cuò)誤代碼,所述管理 字節(jié)區(qū)用來(lái)建立邏輯頁(yè)與物理頁(yè)之間的對(duì)應(yīng)關(guān)系或者建立邏輯塊與物理塊之間的對(duì)應(yīng)關(guān) 系; 還包括一組ECC控制寄存器用于對(duì)管理字節(jié)區(qū)、用戶數(shù)據(jù)區(qū)及錯(cuò)誤校驗(yàn)區(qū)分別控制是 否進(jìn)行糾錯(cuò),此ECC控制寄存器包括: 管理字節(jié)使能位,用于控制是否對(duì)所述管理字節(jié)區(qū)進(jìn)行糾錯(cuò); 左扇區(qū)數(shù)據(jù)使能位,用于控制是否對(duì)所述用戶數(shù)據(jù)區(qū)中一個(gè)扇區(qū)進(jìn)行糾錯(cuò)處理; 右扇區(qū)數(shù)據(jù)使能位,用于控制是否對(duì)所述用戶數(shù)據(jù)區(qū)中另一個(gè)扇區(qū)進(jìn)行糾錯(cuò)處理; 錯(cuò)誤校驗(yàn)使能位,用于控制是否對(duì)所述錯(cuò)誤校驗(yàn)區(qū)(ECC)進(jìn)