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