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