基于ecc糾錯(cuò)碼的nand-flash壞塊恢復(fù)方法
【專(zhuān)利摘要】本發(fā)明屬于航空電子【技術(shù)領(lǐng)域】,特別是涉及到基于ECC糾錯(cuò)碼的NAND-FLASH壞塊恢復(fù)方法,針對(duì)由m片NAND-FLASH且每片F(xiàn)LASH有n個(gè)Block塊構(gòu)成的大容量數(shù)據(jù)存儲(chǔ)設(shè)備,首先將數(shù)據(jù)編碼寫(xiě)入前m-k片NAND-FLASH的Block塊中,然后在后k片NAND-FLASH的Block塊中放入該行數(shù)據(jù)編碼后的效驗(yàn)碼,此后的編碼以此類(lèi)推。本發(fā)明應(yīng)用于由多片NAND-FLASH組成的大容量數(shù)據(jù)存儲(chǔ)設(shè)備中,如果在擦寫(xiě)NAND-FLASH過(guò)程中遇到壞塊,不需要像傳統(tǒng)方法那樣拷貝數(shù)據(jù)到完好的NAND-FLASH數(shù)據(jù)塊中,降低了NAND-FLASH壞塊管理的難度。
【專(zhuān)利說(shuō)明】基于ECC糾錯(cuò)碼的NAND-FLASH壞塊恢復(fù)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于航空電子【技術(shù)領(lǐng)域】,涉及到大容量數(shù)據(jù)存儲(chǔ)速度及可靠性技術(shù),特別是涉及到基于ECC糾錯(cuò)碼的NAND-FLASH壞塊恢復(fù)方法。
【背景技術(shù)】
[0002]NAND-FLASH因其體積小、非易失性、多次可擦除性、更快的寫(xiě)入和擦除速度以及更低廉的每比特價(jià)格等特點(diǎn)在電子產(chǎn)品應(yīng)用市場(chǎng)中得到了迅猛的發(fā)展。
[0003]NAND-FLASH在產(chǎn)品出廠時(shí)會(huì)做一次壞塊標(biāo)定。在使用過(guò)程中,由于程序設(shè)計(jì)者在編程過(guò)程中對(duì)NAND-FLASH的反復(fù)擦除與寫(xiě)入會(huì)導(dǎo)致NAND-FLASH —定程度上的磨損,從而出現(xiàn)壞塊,導(dǎo)致存儲(chǔ)數(shù)據(jù)的不可靠或丟失。目前傳統(tǒng)的針對(duì)NAND-FLASH使用過(guò)程中產(chǎn)生的壞塊處理主要有兩種方法:第一種方法是首先標(biāo)記出當(dāng)前出現(xiàn)的壞塊,然后將已寫(xiě)入的數(shù)據(jù)全部拷貝至新的數(shù)據(jù)塊中,接著依次寫(xiě)入后續(xù)數(shù)據(jù)。第二種方法是直接標(biāo)記出NAND-FLASH的壞塊,同時(shí)丟掉該壞塊中已寫(xiě)入的數(shù)據(jù),跳轉(zhuǎn)到新的數(shù)據(jù)塊中進(jìn)行數(shù)據(jù)寫(xiě)入。
[0004]然而,采用方法一進(jìn)行壞塊處理時(shí),會(huì)導(dǎo)致數(shù)據(jù)寫(xiě)入速度不穩(wěn)定,并且當(dāng)壞塊已寫(xiě)入數(shù)據(jù)無(wú)法正常讀取時(shí)會(huì)造成數(shù)據(jù)的丟失。而采用方法二進(jìn)行壞塊處理時(shí),會(huì)直接導(dǎo)致已寫(xiě)入當(dāng)前壞塊中的數(shù)據(jù)丟失。
【發(fā)明內(nèi)容】
[0005]發(fā)明目的:本發(fā)明的目的是提出一種基于ECC糾錯(cuò)碼的NAND-FLASH壞塊恢復(fù)方法,解決在NAND-FLASH使用過(guò)程中,尤其是大容量數(shù)據(jù)存儲(chǔ)過(guò)程中出現(xiàn)的壞塊恢復(fù)處理問(wèn)題。相對(duì)于傳統(tǒng)的兩種處理方法,該技術(shù)即不影響數(shù)據(jù)流的寫(xiě)入速度,也不會(huì)導(dǎo)致當(dāng)前壞塊的數(shù)據(jù)丟失。
[0006]技術(shù)方案:基于ECC糾錯(cuò)碼的NAND-FLASH壞塊恢復(fù)方法,針對(duì)由m片NAND-FLASH且每片F(xiàn)LASH有n個(gè)Block塊構(gòu)成的大容量數(shù)據(jù)存儲(chǔ)設(shè)備,其特征在于,首先將數(shù)據(jù)編碼寫(xiě)入前m-k片NAND-FLASH的Block塊中,然后在后k片NAND-FLASH的Block塊中放入該行數(shù)據(jù)編碼后的效驗(yàn)碼,此后的編碼以此類(lèi)推,每一行的前m-k片NAND-FLASH的Block塊FLASH1-FLASHnrit 中存儲(chǔ)編碼數(shù)據(jù),而后 k 片 NAND-FLASH 的 Block 塊 FLASHn^1-FLASHni 中存放該行數(shù)據(jù)編碼后的效驗(yàn)碼;當(dāng)某一行出現(xiàn)壞塊要對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行恢復(fù)還原時(shí),首先對(duì)壞塊區(qū)設(shè)定一個(gè)初值,然后利用該行的后k片NAND-FLASH的Block塊中的效驗(yàn)碼進(jìn)行解碼,對(duì)壞塊中的數(shù)據(jù)進(jìn)行糾錯(cuò),從而完成對(duì)壞塊中數(shù)據(jù)的恢復(fù)。
[0007]2、根據(jù)權(quán)利要求1所述的基于ECC糾錯(cuò)碼的NAND-FLASH壞塊恢復(fù)方法,其特征在于,該效驗(yàn)碼可由BCH編碼或者RS編碼方法產(chǎn)生。
[0008]3、根據(jù)權(quán)利要求1或2所述的基于ECC糾錯(cuò)碼的NAND-FLASH壞塊恢復(fù)方法,其特征在于,具體包括以下 步驟:
[0009]步驟1:將所要記錄和存儲(chǔ)的數(shù)據(jù)依次寫(xiě)入FLASH1-FLASHk芯片中Blockl的第一行,即Byte1-Byte4依次存入FLASHrFLASHK,每片F(xiàn)LASH都為8bit數(shù)據(jù);[0010]步驟2:通過(guò)ECC編碼計(jì)算所寫(xiě)入數(shù)據(jù)的效驗(yàn)碼;
[0011]步驟3:寫(xiě)完第一行數(shù)據(jù)后,進(jìn)行第二行數(shù)據(jù)及其校驗(yàn)碼錄入,之后依次類(lèi)推;
[0012]步驟4:讀取數(shù)據(jù)時(shí),對(duì)于出錯(cuò)的FLASH數(shù)據(jù)塊,則對(duì)應(yīng)的Byte數(shù)據(jù)無(wú)法讀取,只能讀取未出錯(cuò)FLASH數(shù)據(jù)塊對(duì)應(yīng)的Byte數(shù)據(jù)及其對(duì)應(yīng)的校驗(yàn)碼;
[0013]步驟5:對(duì)出錯(cuò)FLASH數(shù)據(jù)塊對(duì)應(yīng)的Byte數(shù)據(jù)賦以固定初值,然后通過(guò)BCH解碼完成該Byte數(shù)據(jù)的糾正。
[0014]有益效果:
[0015](I)本發(fā)明應(yīng)用于由多片NAND-FLASH組成的大容量數(shù)據(jù)存儲(chǔ)設(shè)備中,如果在擦寫(xiě)NAND-FLASH過(guò)程中遇到壞塊,不需要像傳統(tǒng)方法那樣拷貝數(shù)據(jù)到完好的NAND-FLASH數(shù)據(jù)塊中,可以完全不考慮壞塊的情況,簡(jiǎn)單易行,降低了 NAND-FLASH壞塊管理的難度,同時(shí)不會(huì)因?yàn)閴膲K丟失數(shù)據(jù)。
[0016](2)應(yīng)用本發(fā)明可以避免因?yàn)橥饬蛘呤褂脡勖斐蓚€(gè)別FLASH損壞而造成的數(shù)據(jù)丟失。
[0017](3)應(yīng)用本發(fā)明可以避免傳統(tǒng)方法中壞塊造成的數(shù)據(jù)寫(xiě)入速度不穩(wěn)定情況。
[0018](4)應(yīng)用本發(fā)明可以在不丟失或備份數(shù)據(jù)的情況對(duì)大容量數(shù)據(jù)存儲(chǔ)設(shè)備中個(gè)別壽命到期的NAND-FLASH進(jìn)行更換和數(shù)據(jù)恢復(fù)。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0019]圖1為本發(fā)明實(shí)施例中存儲(chǔ)設(shè)備中數(shù)據(jù)存儲(chǔ)區(qū)示意圖;
[0020]圖2數(shù)據(jù)存儲(chǔ)內(nèi)容示例。
【具體實(shí)施方式】
[0021]下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)描述,請(qǐng)參閱圖1至圖2。
[0022]基于ECC糾錯(cuò)碼的NAND-FLASH壞塊恢復(fù)方法,針對(duì)由m片NAND-FLASH且每片F(xiàn)LASH有n個(gè)Block塊構(gòu)成的大容量數(shù)據(jù)存儲(chǔ)設(shè)備,首先將Byte數(shù)據(jù)寫(xiě)入前m_k片NAND-FLASH的Block塊中,然后在后k片NAND-FLASH的Block塊中放入該行Byte數(shù)據(jù)編碼后的校驗(yàn)碼,此后的編碼以此類(lèi)推,每一行的前m-k片NAND-FLASH (FLASH1-FLASHm^k)的Block塊中存儲(chǔ)Byte數(shù)據(jù),而后k片NAND-FLASH (FLASHm_k+1-FLASHm)的Block塊中存放該行Byte數(shù)據(jù)編碼后的效驗(yàn)碼;當(dāng)某一行出現(xiàn)壞塊要對(duì)存儲(chǔ)Byte數(shù)據(jù)進(jìn)行恢復(fù)還原時(shí),首先對(duì)壞塊區(qū)對(duì)應(yīng)的Byte數(shù)據(jù)設(shè)定一個(gè)初值,然后利用該行的后k片NAND-FLASH的Block塊中的校驗(yàn)碼進(jìn)行解碼,對(duì)壞塊中的Byte數(shù)據(jù)的初值進(jìn)行糾錯(cuò),從而完成對(duì)壞塊中數(shù)據(jù)的恢復(fù)。
[0023]該校驗(yàn)碼可由BCH編碼或者RS編碼方法產(chǎn)生。存儲(chǔ)校驗(yàn)碼的NAND-FLASH片數(shù)K,可根據(jù)糾正的錯(cuò)誤位數(shù)按照所選擇編碼的理論進(jìn)行選擇。
[0024]實(shí)施例:假設(shè)該設(shè)備由8片NAND FLASH芯片,分別對(duì)應(yīng)FLASHl~FLASH8,每片F(xiàn)LASH有n個(gè)塊,分別對(duì)應(yīng)Block1~Blockn,具體包括以下步驟:
[0025]步驟1:將所要記錄和存儲(chǔ)的數(shù)據(jù)依次寫(xiě)入Flash1-Flash4芯片中Biocki的第一行,即Bytel-Byte4依次存入FLASH1-FLASH4,每片F(xiàn)LASH都為8bit數(shù)據(jù);
[0026]步驟2:通過(guò)ECC編碼計(jì)算所寫(xiě)入數(shù)據(jù)的效驗(yàn)碼,并將其寫(xiě)入FLASH5~FLASH8中;[0027]步驟3:寫(xiě)完第一行數(shù)據(jù)后,進(jìn)行第二行數(shù)據(jù)及其校驗(yàn)碼,之后依次類(lèi)推;
[0028]步驟4:讀取數(shù)據(jù)時(shí),對(duì)于出錯(cuò)的FLASH數(shù)據(jù)塊,則對(duì)應(yīng)的Byte數(shù)據(jù)無(wú)法讀取,只能讀取未出錯(cuò)FLASH數(shù)據(jù)塊對(duì)應(yīng)的Byte數(shù)據(jù)及其對(duì)應(yīng)的校驗(yàn)碼;
[0029]步驟5:對(duì)出錯(cuò)FLASH數(shù)據(jù)塊對(duì)應(yīng)的Byte數(shù)據(jù)賦以固定初值,然后通過(guò)BCH解碼完成該Byte數(shù)據(jù)的糾正。
【權(quán)利要求】
1.基于ECC糾錯(cuò)碼的NAND-FLASH壞塊恢復(fù)方法,針對(duì)由m片NAND-FLASH且每片F(xiàn)LASH有n個(gè)Block塊構(gòu)成的大容量數(shù)據(jù)存儲(chǔ)設(shè)備,其特征在于,首先將數(shù)據(jù)編碼寫(xiě)入前m-k片NAND-FLASH的Block塊中,然后在后k片NAND-FLASH的Block塊中放入該行數(shù)據(jù)編碼后的效驗(yàn)碼,此后的編碼以此類(lèi)推,每一行的前m-k片NAND-FLASH的Block塊FLASH1-FLASHnHt中存儲(chǔ)編碼數(shù)據(jù),而后k片NAND-FLASH的Block塊FLASHm_k+1-FLASHm中存放該行數(shù)據(jù)編碼后的效驗(yàn)碼;當(dāng)某一行出現(xiàn)壞塊要對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行恢復(fù)還原時(shí),首先對(duì)壞塊區(qū)設(shè)定一個(gè)初值,然后利用該行的后k片NAND-FLASH的Block塊中的效驗(yàn)碼進(jìn)行解碼,對(duì)壞塊中的數(shù)據(jù)進(jìn)行糾錯(cuò),從而完成對(duì)壞塊中數(shù)據(jù)的恢復(fù)。
2.根據(jù)權(quán)利要求1所述的基于ECC糾錯(cuò)碼的NAND-FLASH壞塊恢復(fù)方法,其特征在于,該效驗(yàn)碼可由BCH編碼或者RS編碼方法產(chǎn)生。
3.根據(jù)權(quán)利要求1或2所述的基于ECC糾錯(cuò)碼的NAND-FLASH壞塊恢復(fù)方法,其特征在于,具體包括以下步驟: 步驟1:將所要記錄和存儲(chǔ)的數(shù)據(jù)依次寫(xiě)入FLASH1-FLASHk芯片中Blockl的第一行,即 Byte1-Byte4 依次存入 FLASHrFLASHK,每片 FLASH 都為 8bit 數(shù)據(jù); 步驟2:通過(guò)ECC編碼計(jì)算所寫(xiě)入數(shù)據(jù)的效驗(yàn)碼; 步驟3:寫(xiě)完第一行數(shù)據(jù)后,進(jìn)行第二行數(shù)據(jù)及其校驗(yàn)碼錄入,之后依次類(lèi)推; 步驟4:讀取數(shù)據(jù)時(shí),對(duì)于出錯(cuò)的FLASH數(shù)據(jù)塊,則對(duì)應(yīng)的Byte數(shù)據(jù)無(wú)法讀取,只能讀取未出錯(cuò)FLASH數(shù)據(jù)塊對(duì)應(yīng)的Byte數(shù)據(jù)及其對(duì)應(yīng)的校驗(yàn)碼; 步驟5:對(duì)出錯(cuò)FLASH數(shù)據(jù)塊對(duì)應(yīng)的Byte數(shù)據(jù)賦以固定初值,然后通過(guò)BCH解碼完成該Byte數(shù)據(jù)的糾正。
【文檔編號(hào)】G06F11/10GK103645965SQ201310632106
【公開(kāi)日】2014年3月19日 申請(qǐng)日期:2013年11月28日 優(yōu)先權(quán)日:2013年11月28日
【發(fā)明者】程金, 賈寧 申請(qǐng)人:陜西千山航空電子有限責(zé)任公司