基于FPGA的NAND Flash ECC校驗(yàn)
此時(shí)把所有4個(gè)ECC數(shù)值進(jìn)行按位“異或”,就可以判斷是否出現(xiàn)了1個(gè)單一比特的錯(cuò)誤或者是多比特的錯(cuò)誤。如果計(jì)算結(jié)果為全“0”,說明數(shù)據(jù)在讀寫過程中未發(fā)生變化。如果計(jì)算的結(jié)果為全“1”,表明發(fā)生了1 bit錯(cuò)誤,如圖4所示。如果計(jì)算結(jié)果是除了全“0”和全“1”的任何一種情況,那么就是2 bit出錯(cuò)的情況。2 bit錯(cuò)誤總可以檢測(cè)到,然而,Hamming碼算法僅能夠保證更正單一比特的錯(cuò)誤。如果兩個(gè)或是更多的比特出錯(cuò),那么就不能修改該出錯(cuò)的數(shù)據(jù)包,在這種情況下,Hamming算法就可能不能夠指示出已經(jīng)出現(xiàn)的錯(cuò)誤。不過,考慮到SLC NAND器件的比特錯(cuò)誤的情況,出現(xiàn)2、3 bit錯(cuò)誤的可能性非常低。本文引用地址:http://2s4d.com/article/191099.htm
對(duì)于1 bit錯(cuò)誤的情況,出錯(cuò)地址可通過將原有ECCo值和新ECCo值進(jìn)行按位“異或”來識(shí)別獲取。通過圖5中的計(jì)算,結(jié)果為2,表明原數(shù)據(jù)第2 bit位出現(xiàn)了問題。該計(jì)算采用奇校驗(yàn)數(shù)據(jù)ECCo,這是因?yàn)樗鼈兛梢灾苯拥胤从吵龀鲥e(cuò)比特的位置。
找到出錯(cuò)比特后,只要通過翻轉(zhuǎn)它的狀態(tài)就可修復(fù)數(shù)據(jù)包,具體操作也就是將該位與“1”進(jìn)行異或操作,如圖6所示。
2 擴(kuò)展數(shù)據(jù)包
在上述舉例中,校驗(yàn)1個(gè)8 bit數(shù)據(jù)包需要6 bit的ECC數(shù)據(jù)。在這種情況下,校驗(yàn)數(shù)據(jù)量達(dá)到原始數(shù)據(jù)包的數(shù)據(jù)量的75%,看上去并不令人滿意。然而,隨著數(shù)據(jù)包大小的增加,Hamming算法將表現(xiàn)得越來越有效率。由前面2n bit數(shù)據(jù)需要2n bit ECC校驗(yàn)的關(guān)系推知,每增加一倍的數(shù)據(jù)要求兩個(gè)額外的ECC信息比特。這樣,當(dāng)數(shù)據(jù)增加到,比如512 Byte時(shí),僅產(chǎn)生24 bit的ECC,此時(shí)用于校驗(yàn)的數(shù)據(jù)占原數(shù)據(jù)的比例降為0.06%,效率較高。下面,以1個(gè)8 Byte的數(shù)據(jù)包為例說明擴(kuò)展數(shù)據(jù)包的校驗(yàn)情況。
在這里,由于異或操作滿足交換律,用一種更為有效的方法進(jìn)行校驗(yàn)。如圖7所示,首先將該8 Byte數(shù)據(jù)排為1個(gè)矩陣的形式,每行為1B-yte。分別計(jì)算每行各bit的異或結(jié)果記為字節(jié)校驗(yàn)碼(Byte-Wise),計(jì)算每列各bit的異或結(jié)果記為比特校驗(yàn)碼(Bit-Wise)。接下來,將兩個(gè)校驗(yàn)碼分別按上述方法分割計(jì)算得到ECC校驗(yàn)碼,并將字節(jié)校驗(yàn)碼的ECC結(jié)果作為ECCe和ECCo的高有效位(MSB)、比特校驗(yàn)碼的ECC結(jié)果做為低有效位(LSB)進(jìn)行組合,最終得到8 Byte數(shù)據(jù)包的ECC校驗(yàn)碼。
評(píng)論