專利名稱:NAND Flash存儲(chǔ)芯片的校驗(yàn)算法的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于NAND Flash存儲(chǔ)芯片校驗(yàn)算法領(lǐng)域,更具體地說,涉及一種NANDFlash存儲(chǔ)芯片多位查錯(cuò)及兩位糾錯(cuò)的校驗(yàn)算法。
背景技術(shù):
現(xiàn)今,NAND Flash存儲(chǔ)芯片作為嵌入式領(lǐng)域的一種常見存儲(chǔ)介質(zhì),相比于NORFlash存儲(chǔ)芯片,NAND Flash存儲(chǔ)芯片具有更快的讀寫速度和能夠存儲(chǔ)更多的數(shù)據(jù)的優(yōu)點(diǎn)。因此,NAND Flash存儲(chǔ)芯片一直以來廣受嵌入式設(shè)備廠商的青睞,但由于NAND Flash存儲(chǔ)芯片不能像NOR Flash存儲(chǔ)芯片那樣能保持存儲(chǔ)數(shù)據(jù)的高可靠性,從而如何提高NANDFlash存儲(chǔ)芯片內(nèi)存儲(chǔ)數(shù)據(jù)的可靠性,變成了所有使用者的難題。NAND Flash芯片的基本構(gòu)成,通常由多個(gè)塊組成,每個(gè)塊由多個(gè)頁(yè)組成,每個(gè)頁(yè)由數(shù)據(jù)區(qū)及Spare area區(qū)組成(NAND Flash芯片存儲(chǔ)的數(shù)據(jù)分有效數(shù)據(jù)和元數(shù)據(jù),元數(shù)據(jù)負(fù)責(zé)有效數(shù)據(jù)的管理,元數(shù)據(jù)存儲(chǔ)的區(qū)域叫Spare area區(qū))。塊是作為NAND Flash擦除的最小單位,頁(yè)一般作為讀寫的最小單位。對(duì)于每個(gè)頁(yè)上的Spare area區(qū)及數(shù)據(jù)區(qū)而言,數(shù)據(jù)區(qū)主要負(fù)責(zé)存放用戶數(shù)據(jù)信息,而Spare area區(qū)常用來存放糾錯(cuò)校驗(yàn)碼。常見NAND Flash存儲(chǔ)芯片中存在有三種典型的情況會(huì)導(dǎo)致數(shù)據(jù)翻轉(zhuǎn)從而使得數(shù)據(jù)錯(cuò)誤I、漂移翻轉(zhuǎn)漂移翻轉(zhuǎn)指的是,NAND Flash芯片中cell的電壓值慢慢發(fā)生改變,變的和原始值不一樣了。2、編程效應(yīng)引起的翻轉(zhuǎn)對(duì)于某個(gè)頁(yè)面的編程操作(即擦或?qū)懖僮?,引起非相關(guān)的其他頁(yè)面的某個(gè)位跳變了。3、讀翻轉(zhuǎn)此效應(yīng)是,對(duì)一個(gè)頁(yè)進(jìn)行數(shù)據(jù)讀取操作,卻使得對(duì)應(yīng)的某個(gè)位的數(shù)據(jù),產(chǎn)生了永久性的變化,即NAND Flash上該位的值發(fā)生改變。NAND Flash的工藝特點(diǎn)使其存儲(chǔ)的數(shù)據(jù)在寫入和讀出的時(shí)會(huì)不一致,因此NANDFlash采用專門的ECC(Error Checking and Correction)校驗(yàn)算法保證讀出數(shù)據(jù)的正確性。ECC校驗(yàn)算法能夠針對(duì)NAND Flash的一個(gè)頁(yè)進(jìn)行一位糾錯(cuò)和兩位查錯(cuò),然而通過高壓力的測(cè)試發(fā)現(xiàn),NAND Flash每頁(yè)出現(xiàn)兩位錯(cuò)誤的情況也時(shí)有發(fā)生,一旦發(fā)生兩位錯(cuò)誤時(shí),會(huì)導(dǎo)致建立在NAND Flash上的文件系統(tǒng)崩潰,為此急需研究一種校驗(yàn)算法以減少文件系統(tǒng)崩潰的風(fēng)險(xiǎn)。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)之不足,提供一種能夠保證糾正一位及兩位錯(cuò)誤,并能發(fā)現(xiàn)多位錯(cuò)誤的NAND Flash存儲(chǔ)芯片的校驗(yàn)算法,以及確保存放在NAND Flash芯片內(nèi)數(shù)據(jù)的完整性及準(zhǔn)確性。為了實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明采用了以下技術(shù)方案一種NAND Flash存儲(chǔ)芯片的校驗(yàn)算法,根據(jù)寫入每頁(yè)數(shù)據(jù)的行列異或值、Hash值到Spare area區(qū),通過讀取的每頁(yè)數(shù)據(jù)內(nèi)容、Spare area區(qū)中的行列異或值、Spare area區(qū)中的Hash值,三者的運(yùn)算結(jié)果進(jìn)行錯(cuò)誤數(shù)據(jù)的定位和糾錯(cuò)。包括以下步驟I)將每頁(yè)所有數(shù)據(jù)按照相同行列進(jìn)行劃分,對(duì)同一行上的所有點(diǎn)進(jìn)行異或運(yùn)算得到異或值,并對(duì)同一列上的所有點(diǎn)進(jìn)行異或運(yùn)算得到異或值,將行、列的異或值寫入Sparearea IK ; 2)將數(shù)據(jù)區(qū)進(jìn)行Hash值運(yùn)算,將運(yùn)算的結(jié)果按雙份存放在Spare area區(qū);3)取出存放在Spare area區(qū)中的行列異或值及Hash值;4)取出數(shù)據(jù)內(nèi)容,計(jì)算數(shù)據(jù)內(nèi)容中的Hash值,并與第(3)步驟中的Hash值進(jìn)行對(duì)t匕,如果完全一致則直接返回,如果不完全一致則繼續(xù)執(zhí)行步驟(5);5)根據(jù)數(shù)據(jù)計(jì)算結(jié)果發(fā)現(xiàn)的錯(cuò)誤數(shù)量及其位置,并根據(jù)錯(cuò)誤出現(xiàn)的不同條件,進(jìn)行糾錯(cuò)條件I:出現(xiàn)列錯(cuò)誤O、行錯(cuò)誤I時(shí),根據(jù)計(jì)算的錯(cuò)誤行所在的坐標(biāo)確定錯(cuò)誤行所在的位置,對(duì)該行所有的位依次進(jìn)行異或處理,每進(jìn)行一位異或處理就進(jìn)行驗(yàn)證整個(gè)數(shù)據(jù)內(nèi)容的Hash值,如果該Hash值與保存在Sparearea區(qū)的Hash值不相等,則將錯(cuò)誤位進(jìn)行恢復(fù),并開始對(duì)下一位進(jìn)行異或處理并再次驗(yàn)證Hash值,直到驗(yàn)證的Hash值完全一致時(shí),返回正確;當(dāng)所在行上的所有位進(jìn)行異或處理后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。條件2 出現(xiàn)列錯(cuò)誤O、行錯(cuò)誤2時(shí),根據(jù)前面計(jì)算的錯(cuò)誤行所在的坐標(biāo),確定錯(cuò)誤行所在的位置,對(duì)該兩行所有的位依次進(jìn)行異或處理,每進(jìn)行兩位異或處理后就重新驗(yàn)證整個(gè)數(shù)據(jù)內(nèi)容的Hash值,如果與保存在Spare area區(qū)的Hash值不相等,則將錯(cuò)誤位進(jìn)行恢復(fù),并開始對(duì)下兩位進(jìn)行異或處理并再次驗(yàn)證Hash值,直到驗(yàn)證的Hash值完全一致時(shí),返回正確;當(dāng)所在行上的所有位進(jìn)行異或處理后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。條件3 出現(xiàn)列錯(cuò)誤I、行錯(cuò)誤O時(shí),根據(jù)計(jì)算的錯(cuò)誤列所在的坐標(biāo)確定錯(cuò)誤列所在的位置,對(duì)該列所有的位依次進(jìn)行異或處理,每進(jìn)行一位異或處理就進(jìn)行驗(yàn)證整個(gè)數(shù)據(jù)內(nèi)容的Hash值,如果該Hash值與保存在Sparearea區(qū)的Hash值不相等,則將錯(cuò)誤位進(jìn)行恢復(fù),并開始對(duì)下一位進(jìn)行異或處理并再次驗(yàn)證Hash值,直到驗(yàn)證的Hash值完全一致時(shí),返回正確;當(dāng)所在列上的所有位進(jìn)行異或處理后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。條件4 出現(xiàn)列錯(cuò)誤I、行錯(cuò)誤I時(shí),根據(jù)計(jì)算的錯(cuò)誤列及錯(cuò)誤行坐標(biāo),確定錯(cuò)誤列及錯(cuò)誤行所在的位置,將該列、行坐標(biāo)對(duì)應(yīng)的位上的值進(jìn)行翻轉(zhuǎn),并驗(yàn)證Hash值,如果與保存在Spare area區(qū)的Hash值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),并返回正確;否則返回錯(cuò)誤。條件5
出現(xiàn)列錯(cuò)誤I、行錯(cuò)誤2時(shí),在這種條件下,存在兩種情況情況一保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)列的異或值出現(xiàn)了錯(cuò)誤,同時(shí)出現(xiàn)同一列上的兩個(gè)錯(cuò)誤行的數(shù)據(jù)錯(cuò)誤,這種情況的處理與“條件2” 一致,處理方法同“條件2”的處理方法;情況二 保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)行中某一個(gè)的異或值出現(xiàn)了錯(cuò)誤,同時(shí)存在另一個(gè)錯(cuò)誤行與錯(cuò)誤列對(duì)應(yīng)的坐標(biāo)上的數(shù)據(jù)翻轉(zhuǎn),這種情況的處理與“條件I”一致,處理方法同“條件I”的處理方法處理兩次。條件6 出現(xiàn)列錯(cuò)誤2、行錯(cuò)誤O時(shí),根據(jù)前面計(jì)算的錯(cuò)誤列所在的坐標(biāo),確定錯(cuò)誤列所在的位置,對(duì)該兩列所有的位依次進(jìn)行異或處理,每進(jìn)行兩位異或處理后就重新驗(yàn)證整個(gè)數(shù)據(jù)內(nèi)容的Hash值,如果與保存在Spare area區(qū)的Hash值不相等,則將錯(cuò)誤位進(jìn)行恢復(fù),并 開始對(duì)下兩位進(jìn)行異或處理并再次驗(yàn)證Hash值,直到驗(yàn)證的Hash值完全一致時(shí),返回正確;當(dāng)所在列上的所有位進(jìn)行異或處理后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。條件7 出現(xiàn)列錯(cuò)誤2、行錯(cuò)誤I時(shí),在這種條件下,存在兩種情況情況一保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)行的異或值出現(xiàn)了錯(cuò)誤,同時(shí)出現(xiàn)同一行上的兩個(gè)錯(cuò)誤列的數(shù)據(jù)錯(cuò)誤,這種情況的處理與“條件6” 一致,處理方法同“條件6”的處理方法;情況二 保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)列中某一個(gè)的異或值出現(xiàn)了錯(cuò)誤,同時(shí)存在另一個(gè)錯(cuò)誤列與錯(cuò)誤行對(duì)應(yīng)的坐標(biāo)上的數(shù)據(jù)翻轉(zhuǎn),這種情況的處理與“條件3”一致,處理方法同“條件3”的處理方法處理兩次。條件8 出現(xiàn)列錯(cuò)誤2、行錯(cuò)誤2時(shí),在這種條件下,存在兩種情況情況一錯(cuò)誤行I與錯(cuò)誤列I、錯(cuò)誤行2與錯(cuò)誤列2坐標(biāo)對(duì)應(yīng)的數(shù)據(jù)內(nèi)容發(fā)生了翻轉(zhuǎn),此時(shí)需要分別對(duì)兩個(gè)數(shù)據(jù)內(nèi)容進(jìn)行翻轉(zhuǎn),并計(jì)算Hash值,如果與保存在Spare area區(qū)的Hash值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),返回正確,否則執(zhí)行情況二;情況二 錯(cuò)誤行I與錯(cuò)誤列2、錯(cuò)誤行2與錯(cuò)誤列I坐標(biāo)對(duì)應(yīng)的數(shù)據(jù)內(nèi)容發(fā)生了翻轉(zhuǎn),此時(shí)需要分別對(duì)兩個(gè)數(shù)據(jù)內(nèi)容進(jìn)行翻轉(zhuǎn),并計(jì)算Hash值,如果與保存在Spare area區(qū)的Hash值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),返回正確,否則返回錯(cuò)誤。所述步驟(5)中的可糾錯(cuò)性為(i)根據(jù)數(shù)據(jù)計(jì)算結(jié)果,所在行或列坐標(biāo)中出現(xiàn)兩位或小于兩位的錯(cuò)誤時(shí)進(jìn)行糾錯(cuò),將錯(cuò)誤數(shù)據(jù)恢復(fù)并返回正確,結(jié)束;(ii)根據(jù)數(shù)據(jù)計(jì)算結(jié)果,所在行或列坐標(biāo)中出現(xiàn)大于兩位的錯(cuò)誤時(shí),則直接返回錯(cuò)誤,結(jié)束。本發(fā)明采用上述技術(shù)方案后相對(duì)于現(xiàn)有技術(shù)具有如下優(yōu)點(diǎn)本發(fā)明NAND Flash存儲(chǔ)芯片的校驗(yàn)算法,根據(jù)寫入每頁(yè)數(shù)據(jù)的行列異或值、Hash值到Spare area區(qū),通過讀取的每頁(yè)數(shù)據(jù)內(nèi)容、Spare area區(qū)中的行列異或值、Spare area區(qū)中的Hash值,三者的運(yùn)算結(jié)果能夠保證糾正一位及兩位錯(cuò)誤,并能發(fā)現(xiàn)多位錯(cuò)誤,從而確保存放在NAND Flash芯片內(nèi)數(shù)據(jù)的完整性及準(zhǔn)確性,起到減少文件系統(tǒng)崩潰的風(fēng)險(xiǎn)。
圖I為本發(fā)明行列校驗(yàn)值分布示意圖;
圖2為本發(fā)明NANDFlash頁(yè)的內(nèi)容組成示意圖;圖3為本發(fā)明NAND Flash校驗(yàn)算法步驟流程圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。參見圖I、圖2和圖3,本實(shí)施方式NAND Flash存儲(chǔ)芯片的校驗(yàn)算法,根據(jù)寫入每頁(yè)數(shù)據(jù)的行列異或值、Hash值到Spare area區(qū),通過讀取的每頁(yè)數(shù)據(jù)內(nèi)容、Spare area區(qū)中的行列異或值、Spare area區(qū)中的Hash值,三者的運(yùn)算結(jié)果能夠保證糾正一位及兩位錯(cuò)誤,并能發(fā)現(xiàn)多位錯(cuò)誤,從而確保存放在NAND Flash芯片內(nèi)數(shù)據(jù)的完整性及準(zhǔn)確性,起到減少文件系統(tǒng)崩潰的風(fēng)險(xiǎn)。其具體步驟如下I)將每頁(yè)所有數(shù)據(jù)按照相同行列進(jìn)行劃分,對(duì)同一行上的所有點(diǎn)進(jìn)行異或運(yùn)算得到異或值,并對(duì)同一列上的所有點(diǎn)進(jìn)行異或運(yùn)算得到異或值,將行列的異或值寫入Sparearea IK ;2)將數(shù)據(jù)區(qū)進(jìn)行Hash值運(yùn)算,將運(yùn)算的結(jié)果按雙份存放在Spare area區(qū);3)取出存放在Spare area區(qū)中的行列異或值及Hash值;4)取出數(shù)據(jù)內(nèi)容,計(jì)算數(shù)據(jù)內(nèi)容中的Hash值,并與第(3)步驟中的Hash值進(jìn)行對(duì)t匕,如果完全一致則直接返回,如果不完全一致則繼續(xù)執(zhí)行步驟(5);5)根據(jù)數(shù)據(jù)計(jì)算結(jié)果發(fā)現(xiàn)的錯(cuò)誤數(shù)量及位置,并根據(jù)錯(cuò)誤出現(xiàn)的不同條件,進(jìn)行糾錯(cuò)。其糾錯(cuò)的可行性為(i)根據(jù)數(shù)據(jù)計(jì)算結(jié)果,所在行或列坐標(biāo)中出現(xiàn)兩位或小于兩位的錯(cuò)誤時(shí)進(jìn)行糾錯(cuò),將錯(cuò)誤數(shù)據(jù)恢復(fù)并返回正確,該校驗(yàn)算法保證了能夠糾正一位及兩位錯(cuò)誤,提高了 NANDFlash存儲(chǔ)芯片內(nèi)存儲(chǔ)數(shù)據(jù)的可靠性;(ii)根據(jù)數(shù)據(jù)計(jì)算結(jié)果,所在行或列坐標(biāo)中出現(xiàn)大于兩位的錯(cuò)誤時(shí),則直接返回錯(cuò)誤,針對(duì)錯(cuò)誤的數(shù)量及位置,確定NAND Flash存儲(chǔ)芯片內(nèi)數(shù)據(jù)的完整程度,以降低數(shù)據(jù)的儲(chǔ)存風(fēng)險(xiǎn)。本發(fā)明的NAND Flash存儲(chǔ)芯片的校驗(yàn)算法能實(shí)現(xiàn)一位及兩位糾錯(cuò)和多位查錯(cuò),且能實(shí)現(xiàn)在不使用硬件ECC的情況下獲取正確的數(shù)據(jù)。實(shí)施例以Page等于2K, Spare area區(qū)為64Bytes的大頁(yè)NAND Flash芯片為例來闡述。進(jìn)行頁(yè)編程時(shí),按照如下流程執(zhí)行(I)每頁(yè)2K Bytes,共16K bits,將其排列成128*128的矩陣,對(duì)同一行的所有點(diǎn)進(jìn)行異或運(yùn)算,得到最終的奇偶值,因此記錄所有行的奇偶值需要128bits。按照相同的方式對(duì)列進(jìn)行處理,最終行列都需要16Bytes,共32Bytes,參見圖I ;
(2)計(jì)算16Bytes行校驗(yàn)值和16Bytes列校驗(yàn)值的Hash值(sha_l),共20字節(jié);(3)寫入數(shù)據(jù)的時(shí)候,將32Bytes的校驗(yàn)值寫入Spare area區(qū)域的前32Bytes中,并將Hash計(jì)算得到的值(只取前面12Bytes)重復(fù)的寫入Spare area區(qū),參見圖2。讀數(shù)據(jù)流程(I)讀取Data area和Spare area的所有數(shù)據(jù),共2112字節(jié);(2)取出存放在Spera area區(qū)中的兩份Hash值,比較兩份Hash值。由于NANDFlash的特性決定了在漂移的情況下只能由I變?yōu)?,而O無法變?yōu)镮。因此只有兩位同時(shí)為O時(shí),對(duì)應(yīng)的Hash值才會(huì)為O,這樣可以更好的保證Hash值的可靠性。(3)對(duì)整個(gè)Data area的2048Bytes進(jìn)行sha_l運(yùn)算,然后將運(yùn)算結(jié)果與流程(2)中的Hash值進(jìn)行比較,如果相等表示數(shù)據(jù)完成正確,直接返回。不相等需要針對(duì)不同錯(cuò)誤條件進(jìn)行糾錯(cuò),糾錯(cuò)的過程參見圖3。每個(gè)條件的糾錯(cuò)過程如下 條件I (列錯(cuò)誤0,行錯(cuò)誤I)出現(xiàn)該情況時(shí),只有在列的保存的異或值出現(xiàn)翻轉(zhuǎn),并且該翻轉(zhuǎn)的異或值所在的列坐標(biāo)和錯(cuò)誤行所在的行坐標(biāo)對(duì)應(yīng)的數(shù)據(jù)內(nèi)容發(fā)生了翻轉(zhuǎn)。根據(jù)前面計(jì)算的錯(cuò)誤行所在的坐標(biāo),確定錯(cuò)誤行所在的位置。再根據(jù)錯(cuò)誤行所在的位置,對(duì)該行所有的位依次進(jìn)行異或處理,每進(jìn)行一位異或處理后就重新驗(yàn)證整個(gè)數(shù)據(jù)內(nèi)容的Hash值,如果與保存在Spare area區(qū)的Hash值不相等,將前面翻轉(zhuǎn)的位進(jìn)行恢復(fù),并開始對(duì)同一行上的下一位進(jìn)行異或處理,再驗(yàn)證Hash值,直到驗(yàn)證的Hash的值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),返回正確。否則一直按照前面的處理執(zhí)行下去,當(dāng)翻轉(zhuǎn)所在行上的所有位后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。條件2 (列錯(cuò)誤0,行錯(cuò)誤2)由于對(duì)應(yīng)列存在的錯(cuò)誤為0,從而可以得到兩個(gè)錯(cuò)誤行上發(fā)生翻轉(zhuǎn)的數(shù)據(jù)在同一列上,否則不屬于“條件2”的范疇。根據(jù)前面計(jì)算的錯(cuò)誤行所在的坐標(biāo),確定兩個(gè)錯(cuò)誤行所在的位置。再根據(jù)錯(cuò)誤行所在的位置,對(duì)該兩行所有的位依次進(jìn)行異或處理,每進(jìn)行同一列上的兩位錯(cuò)誤行異或處理后就重新驗(yàn)證整個(gè)數(shù)據(jù)內(nèi)容的Hash值,如果與保存在Sparearea區(qū)的Hash值不相等,將前面翻轉(zhuǎn)的位進(jìn)行恢復(fù),并開始對(duì)下兩位進(jìn)行異或處理并驗(yàn)證Hash值,直到驗(yàn)證的Hash的值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),返回正確。否則一直按照前面的處理執(zhí)行下去,當(dāng)翻轉(zhuǎn)所在行上的所有位后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。條件3 (列錯(cuò)誤I,行錯(cuò)誤O)出現(xiàn)該情況時(shí),只有在行的保存的異或值出現(xiàn)翻轉(zhuǎn),并且該翻轉(zhuǎn)的異或值所在的行坐標(biāo)和錯(cuò)誤列所在的列坐標(biāo)對(duì)應(yīng)的數(shù)據(jù)內(nèi)容發(fā)生了翻轉(zhuǎn)。因此,根據(jù)前面計(jì)算的錯(cuò)誤坐標(biāo),確定錯(cuò)誤列所在的位置。再根據(jù)錯(cuò)誤列所在的位置,對(duì)該列所有的位依次進(jìn)行異或處理,每進(jìn)行一位異或處理后就重新驗(yàn)證Hash值,如果與保存在Spare area區(qū)的Hash值不相等,將前面翻轉(zhuǎn)的位進(jìn)行恢復(fù),并開始對(duì)下一位進(jìn)行異或再驗(yàn)證Hash值,直到驗(yàn)證的Hash值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),并返回正確,否則一直按照前面的處理執(zhí)行下去,當(dāng)翻轉(zhuǎn)所有位后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。條件4 (列錯(cuò)誤I,行錯(cuò)誤I)根據(jù)前面計(jì)算的錯(cuò)誤坐標(biāo),確定錯(cuò)誤列及錯(cuò)誤行所在的位置。將該行、列坐標(biāo)對(duì)應(yīng)的位上的值進(jìn)行翻轉(zhuǎn),進(jìn)行Hash值驗(yàn)證。如果與保存在Spare area區(qū)的Hash值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),并返回正確,否則返回錯(cuò)誤。條件5 (列錯(cuò)誤I,行錯(cuò)誤2)在這種條件下,存在兩種情況情況一保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)列的異或值出現(xiàn)了錯(cuò)誤,同時(shí)出現(xiàn)同一列上的兩個(gè)錯(cuò)誤行的數(shù)據(jù)錯(cuò)誤,這種情況的處理與“條件2” 一致,處理方法同“條件2”的處理方法;情況二 保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)行中某一個(gè)的異或值出現(xiàn)了錯(cuò)誤,同時(shí)存在另一個(gè)錯(cuò)誤行與錯(cuò)誤列對(duì)應(yīng)的坐標(biāo)上的數(shù)據(jù)翻轉(zhuǎn),這種情況的處理與“條件I” 一致,處理方法同“條件I”的處理方法。由于存在兩個(gè)行錯(cuò)誤,因此需要分別假設(shè)其中的某點(diǎn)錯(cuò)誤,故需要按照“條件I”的處理方法,處理兩次。 條件6 (列錯(cuò)誤2,行錯(cuò)誤O)由于對(duì)應(yīng)行存在的錯(cuò)誤為0,從而可以得到兩個(gè)錯(cuò)誤列上發(fā)生翻轉(zhuǎn)的數(shù)據(jù)在同一行上,否則不屬于“條件6”的范疇。根據(jù)前面計(jì)算的錯(cuò)誤坐標(biāo),確定兩個(gè)錯(cuò)誤列所在的位置。再根據(jù)錯(cuò)誤列所在的位置,對(duì)該兩列所有的位依次進(jìn)行異或處理,每進(jìn)行同一行上的兩位錯(cuò)誤列異或處理后就重新驗(yàn)證整個(gè)數(shù)據(jù)內(nèi)容的Hash值,如果與保存在Spare area區(qū)的Hash值不相等,將前面翻轉(zhuǎn)的位進(jìn)行恢復(fù),并開始對(duì)下兩位進(jìn)行異或處理并驗(yàn)證Hash值,直到驗(yàn)證的Hash值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),并返回正確,否則一直按照前面的處理執(zhí)行下去,當(dāng)翻轉(zhuǎn)所有位后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。條件7 (列錯(cuò)誤2,行錯(cuò)誤I)在這種條件下,存在兩種情況情況一保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)行的異或值出現(xiàn)了錯(cuò)誤,同時(shí)出現(xiàn)同一行上的兩個(gè)錯(cuò)誤列的數(shù)據(jù)錯(cuò)誤,這種情況的處理與“條件6” 一致,處理方法同“條件6”的處理方法;情況二 保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)列中某一個(gè)的異或值出現(xiàn)了錯(cuò)誤,同時(shí)存在另一個(gè)錯(cuò)誤列與錯(cuò)誤行對(duì)應(yīng)的坐標(biāo)上的數(shù)據(jù)翻轉(zhuǎn),這種情況的處理與“條件3”一致,處理方法同“條件3”的處理方法,由于有兩個(gè)列錯(cuò)誤,因此需要分別假設(shè)其中的某點(diǎn)錯(cuò)誤,故需要按照“條件3”的處理方法,處理兩次。條件8 (列錯(cuò)誤2,行錯(cuò)誤2)當(dāng)同時(shí)出現(xiàn)兩個(gè)行錯(cuò)誤和兩個(gè)列錯(cuò)誤時(shí),存在兩種情況情況一錯(cuò)誤行I與錯(cuò)誤列1,錯(cuò)誤行2與錯(cuò)誤列2,坐標(biāo)對(duì)應(yīng)的數(shù)據(jù)內(nèi)容發(fā)生了翻轉(zhuǎn),此時(shí)需要分別對(duì)兩個(gè)數(shù)據(jù)內(nèi)容進(jìn)行翻轉(zhuǎn),并計(jì)算Hash值,如果與保存在Spare area區(qū)的Hash值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),返回正確,否則執(zhí)行情況二;情況二 錯(cuò)誤行I與錯(cuò)誤列2,錯(cuò)誤行2與錯(cuò)誤列1,坐標(biāo)對(duì)應(yīng)的數(shù)據(jù)內(nèi)容發(fā)生了翻轉(zhuǎn),此時(shí)需要分別對(duì)兩個(gè)數(shù)據(jù)內(nèi)容進(jìn)行翻轉(zhuǎn),并計(jì)算Hash值,如果與保存在Spare area區(qū)的Hash值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),返回正確,否則返回錯(cuò)誤。
權(quán)利要求
1.一種NAND Flash存儲(chǔ)芯片的校驗(yàn)算法,其特征在于,根據(jù)寫入每頁(yè)數(shù)據(jù)的行列異或值、Hash值到Spare area區(qū),通過讀取的每頁(yè)數(shù)據(jù)內(nèi)容、Spare area區(qū)中的行列異或值、Spare area區(qū)中的Hash值,三者的運(yùn)算結(jié)果進(jìn)行錯(cuò)誤數(shù)據(jù)的定位和糾錯(cuò)。
2.根據(jù)權(quán)利要求I所述的一種NANDFlash存儲(chǔ)芯片的校驗(yàn)算法,其特征在于,包括以下步驟 1)將每頁(yè)所有數(shù)據(jù)按照相同行列進(jìn)行劃分,對(duì)同一行上的所有點(diǎn)進(jìn)行異或運(yùn)算得到異或值,并對(duì)同一列上的所有點(diǎn)進(jìn)行異或運(yùn)算得到異或值,將行、列的異或值寫入Spare area區(qū); 2)將數(shù)據(jù)區(qū)進(jìn)行Hash值運(yùn)算,將運(yùn)算的結(jié)果按雙份存放在Sparearea區(qū); 3)取出存放在Sparearea區(qū)中的行列異或值及Hash值; 4)取出數(shù)據(jù)內(nèi)容,計(jì)算數(shù)據(jù)內(nèi)容中的Hash值,并與第(3)步驟中的Hash值進(jìn)行對(duì)比,如果完全一致則直接返回,如果不完全一致則繼續(xù)執(zhí)行步驟(5); 5)根據(jù)數(shù)據(jù)計(jì)算結(jié)果發(fā)現(xiàn)的錯(cuò)誤數(shù)量及其位置,并根據(jù)錯(cuò)誤出現(xiàn)的不同條件,進(jìn)行糾錯(cuò) 條件I : 出現(xiàn)列錯(cuò)誤O、行錯(cuò)誤I時(shí),根據(jù)計(jì)算的錯(cuò)誤行所在的坐標(biāo)確定錯(cuò)誤行所在的位置,對(duì)該行所有的位依次進(jìn)行異或處理,每進(jìn)行一位異或處理就進(jìn)行驗(yàn)證整個(gè)數(shù)據(jù)內(nèi)容的Hash值,如果該Hash值與保存在Spare area區(qū)的Hash值不相等,則將錯(cuò)誤位進(jìn)行恢復(fù),并開始對(duì)下一位進(jìn)行異或處理并再次驗(yàn)證Hash值,直到驗(yàn)證的Hash值完全一致時(shí),返回正確;當(dāng)所在行上的所有位進(jìn)行異或處理后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。
條件2 出現(xiàn)列錯(cuò)誤O、行錯(cuò)誤2時(shí),根據(jù)前面計(jì)算的錯(cuò)誤行所在的坐標(biāo),確定錯(cuò)誤行所在的位置,對(duì)該兩行所有的位依次進(jìn)行異或處理,每進(jìn)行兩位異或處理后就重新驗(yàn)證整個(gè)數(shù)據(jù)內(nèi)容的Hash值,如果與保存在Spare area區(qū)的Hash值不相等,則將錯(cuò)誤位進(jìn)行恢復(fù),并開始對(duì)下兩位進(jìn)行異或處理并再次驗(yàn)證Hash值,直到驗(yàn)證的Hash值完全一致時(shí),返回正確;當(dāng)所在行上的所有位進(jìn)行異或處理后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。
條件3 出現(xiàn)列錯(cuò)誤I、行錯(cuò)誤O時(shí),根據(jù)計(jì)算的錯(cuò)誤列所在的坐標(biāo)確定錯(cuò)誤列所在的位置,對(duì)該列所有的位依次進(jìn)行異或處理,每進(jìn)行一位異或處理就進(jìn)行驗(yàn)證整個(gè)數(shù)據(jù)內(nèi)容的Hash值,如果該Hash值與保存在Spare area區(qū)的Hash值不相等,則將錯(cuò)誤位進(jìn)行恢復(fù),并開始對(duì)下一位進(jìn)行異或處理并再次驗(yàn)證Hash值,直到驗(yàn)證的Hash值完全一致時(shí),返回正確;當(dāng)所在列上的所有位進(jìn)行異或處理后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。
條件4 : 出現(xiàn)列錯(cuò)誤I、行錯(cuò)誤I時(shí),根據(jù)計(jì)算的錯(cuò)誤列及錯(cuò)誤行坐標(biāo),確定錯(cuò)誤列及錯(cuò)誤行所在的位置,將該列、行坐標(biāo)對(duì)應(yīng)的位上的值進(jìn)行翻轉(zhuǎn),并驗(yàn)證Hash值,如果與保存在Sparearea區(qū)的Hash值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),并返回正確;否則返回錯(cuò)誤。
條件5 : 出現(xiàn)列錯(cuò)誤I、行錯(cuò)誤2時(shí),在這種條件下,存在兩種情況 情況一保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)列的異或值出現(xiàn)了錯(cuò)誤,同時(shí)出現(xiàn)同一列上的兩個(gè)錯(cuò)誤行的數(shù)據(jù)錯(cuò)誤,這種情況的處理與“條件2” 一致,處理方法同“條件2”的處理方法; 情況二 保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)行中某一個(gè)的異或值出現(xiàn)了錯(cuò)誤,同時(shí)存在另一個(gè)錯(cuò)誤行與錯(cuò)誤列對(duì)應(yīng)的坐標(biāo)上的數(shù)據(jù)翻轉(zhuǎn),這種情況的處理與“條件I”一致,處理方法同“條件I ”的處理方法處理兩次。
條件6 : 出現(xiàn)列錯(cuò)誤2、行錯(cuò)誤O時(shí),根據(jù)前面計(jì)算的錯(cuò)誤列所在的坐標(biāo),確定錯(cuò)誤列所在的位置,對(duì)該兩列所有的位依次進(jìn)行異或處理,每進(jìn)行兩位異或處理后就重新驗(yàn)證整個(gè)數(shù)據(jù)內(nèi)容的Hash值,如果與保存在Spare area區(qū)的Hash值不相等,則將錯(cuò)誤位進(jìn)行恢復(fù),并開始對(duì)下兩位進(jìn)行異或處理并再次驗(yàn)證Hash值,直到驗(yàn)證的Hash值完全一致時(shí),返回正確;當(dāng)所在列上的所有位進(jìn)行異或處理后,仍未得到相等的Hash值時(shí),返回錯(cuò)誤。條件7 : 出現(xiàn)列錯(cuò)誤2、行錯(cuò)誤I時(shí),在這種條件下,存在兩種情況 情況一保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)行的異或值出現(xiàn)了錯(cuò)誤,同時(shí)出現(xiàn)同一行上的兩個(gè)錯(cuò)誤列的數(shù)據(jù)錯(cuò)誤,這種情況的處理與“條件6” 一致,處理方法同“條件6”的處理方法; 情況二 保存在Spare area區(qū)的錯(cuò)誤對(duì)應(yīng)列中某一個(gè)的異或值出現(xiàn)了錯(cuò)誤,同時(shí)存在另一個(gè)錯(cuò)誤列與錯(cuò)誤行對(duì)應(yīng)的坐標(biāo)上的數(shù)據(jù)翻轉(zhuǎn),這種情況的處理與“條件3”一致,處理方法同“條件3”的處理方法處理兩次。
條件8 : 出現(xiàn)列錯(cuò)誤2、行錯(cuò)誤2時(shí),在這種條件下,存在兩種情況 情況一錯(cuò)誤行I 與錯(cuò)誤列I、錯(cuò)誤行2與錯(cuò)誤列2坐標(biāo)對(duì)應(yīng)的數(shù)據(jù)內(nèi)容發(fā)生了翻轉(zhuǎn),此時(shí)需要分別對(duì)兩個(gè)數(shù)據(jù)內(nèi)容進(jìn)行翻轉(zhuǎn),并計(jì)算Hash值,如果與保存在Spare area區(qū)的Hash值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),返回正確,否則執(zhí)行情況二 ; 情況二 錯(cuò)誤行I與錯(cuò)誤列2、錯(cuò)誤行2與錯(cuò)誤列I坐標(biāo)對(duì)應(yīng)的數(shù)據(jù)內(nèi)容發(fā)生了翻轉(zhuǎn),此時(shí)需要分別對(duì)兩個(gè)數(shù)據(jù)內(nèi)容進(jìn)行翻轉(zhuǎn),并計(jì)算Hash值,如果與保存在Spare area區(qū)的Hash值相等,將翻轉(zhuǎn)后的數(shù)據(jù)作為糾錯(cuò)后的數(shù)據(jù),返回正確,否則返回錯(cuò)誤。
3.根據(jù)權(quán)利要求2所述的一種NAND Flash存儲(chǔ)芯片的校驗(yàn)算法,其特征在于,所述步驟(5)中的可糾錯(cuò)性為 (i)根據(jù)數(shù)據(jù)計(jì)算結(jié)果,所在行或列坐標(biāo)中出現(xiàn)兩位或小于兩位的錯(cuò)誤時(shí)進(jìn)行糾錯(cuò),將錯(cuò)誤數(shù)據(jù)恢復(fù)并返回正確,結(jié)束; (ii)根據(jù)數(shù)據(jù)計(jì)算結(jié)果,所在行或列坐標(biāo)中出現(xiàn)大于兩位的錯(cuò)誤時(shí),則直接返回錯(cuò)誤,結(jié)束。
全文摘要
本發(fā)明適用于NAND Flash存儲(chǔ)芯片的校驗(yàn)算法領(lǐng)域,提供一種NANDFlash存儲(chǔ)芯片的校驗(yàn)算法,根據(jù)寫入每頁(yè)數(shù)據(jù)的行列異或值、Hash值到Spare area區(qū),通過讀取的每頁(yè)數(shù)據(jù)內(nèi)容、Spare area區(qū)中的行列異或值、Spare area區(qū)中的Hash值,三者的運(yùn)算結(jié)果進(jìn)行錯(cuò)誤數(shù)據(jù)的定位和糾錯(cuò),能夠保證糾正一位及兩位錯(cuò)誤和發(fā)現(xiàn)多位錯(cuò)誤,從而確保存放在NAND Flash芯片內(nèi)數(shù)據(jù)的完整性及準(zhǔn)確性,起到減少文件系統(tǒng)崩潰的風(fēng)險(xiǎn)。
文檔編號(hào)G11C29/56GK102789817SQ20121025113
公開日2012年11月21日 申請(qǐng)日期2012年7月19日 優(yōu)先權(quán)日2012年7月19日
發(fā)明者萬籟民, 劉紹海, 韋獻(xiàn)康 申請(qǐng)人:百富計(jì)算機(jī)技術(shù)(深圳)有限公司