hanming,rs,bch —— nand flash中常用的糾錯方式
因為快閃儲存器中會有出錯的可能,如果沒有使用ecc模組,讀出的資料和寫入的資料會有不匹配的可能,也許乙個檔案中只有一兩個bit不匹配,這也是不能容忍的。相對來說slc中出錯概率比較低,所以使用乙個糾錯能力不強的hanming碼就可以了,在mlc中hanming碼就顯得力不從心了,需要糾錯能力更強的rs或者bch糾錯方式了。
hanming碼原理演算法都不算複雜,網上應該都能找到hdl**。
rs(reed-solomon)應用也非常廣泛,按多位的組合編碼,而bch按位編碼,比如在nand flash中某個位元組應該是0x00,但是從nand flash讀出卻是0xf0; rs只認為出現了乙個錯誤,而bch卻認為出現了4個錯誤。rs方式有著不錯的突發隨機錯誤和隨機錯誤的能力,算是兩者的折中。bch擅長處理隨機錯誤,由於nand flash自身的特點,出現隨機錯誤的概率更大一些,所以在mlc中目前應用最多的還是bch方式。
大家知道即使是校驗錯誤如奇偶校驗或者crc校驗都需要在原始資訊資料的基礎上增加一些額外的資料。能夠糾正錯誤的ecc需要額外的資料空間儲存糾錯碼生成的校驗資料。所以在nand flash中page的1k資料並不是1024byte,大多數是1024+32byte, 有的是更多的額外空間;額外空間越多意味著可以使用糾錯能力越強的ecc,因為對於同一ecc演算法糾錯能力越強需要的額外空間越大。
對於bch演算法
目前通常以512byte或者1024byte為單位處理,因為bch按位處理資料,所以是4096bit或者8192bit,這裡的4096/8192bit是原始資料,bch需要生成一定的校驗資料。下面簡要介紹下原理。
設最大糾錯能力為t
如果選用4096bit的原始資料長度,則模式為bch(8191,8191-13×t,t,13)
如果選用8192bit的原始資料長度,則模式為bch(16383,16383-14×t,t,14)
校驗資料長度就是13×t,或者14×tbit
所以平均1024+32byte的mlc 大多建議使用8bit/512byte ecc
平均1024+45byte的mlc大多建議使用24bit/1024byte ecc, 此時需要14×24bit=42byte的檢驗資料空間
以8bit/512byte bch方式的ecc為例,控制器寫資料到nand flash時,每512byte資料經過bch模組就會生成13byte的校驗資料(當然剩下的16-13=3byte也可以作為某種用途的資料,可以任意使用0-3byte而不會改變ecc的使用),這些資料一起寫入到nand flash中。控制器從nand flash中讀取資料的時候需要將原始資料和校驗資料一起讀出經過bch模組,bch模組計算伴隨矩陣首先可以判斷出是否出現了錯誤,如果出現了錯誤需要計算錯誤位置多項式,然後解多項式,得到錯誤位置(目前主要使用chien-search方法),因為是位錯誤,找到錯誤的位置以後取反以後就是正確的資料。只要是錯誤個數小於等於8,bch都能夠找到錯誤的位置,但是如果錯誤個數超過了8,對於bch來說已經沒有辦法糾正錯誤了,只能報告出現了不可以糾正的情況。
NAND Flash中常用的糾錯方式
hanming,rs,bch nand flash中常用的糾錯方式 因為快閃儲存器中會有出錯的可能,如果沒有使用ecc模組,讀出的資料和寫入的資料會有不匹配的可能,也許乙個檔案中只有一兩個bit不匹配,這也是不能容忍的。相對來說slc中出錯概率比較低,所以使用乙個糾錯能力不強的hanming碼就可以...
糾錯技術之FEC(向前糾錯)
糾錯碼 error correcting code 在傳輸過程中發生錯誤後能在收端自行發現或糾正的碼。僅用來發現錯誤的碼一般常稱為檢錯碼。為使一種碼具有檢錯或糾錯能力,須對原碼字增加多餘的碼元,以擴大碼字之間的差別 即把原碼字按某種規則變成有一定剩餘度 見信源編碼 的碼字,並使每個碼字的碼之間有一定...
NAND 壞塊管理
nand的操作管理方式nand flash的管理方式 以三星flash為例,一片nand flash為乙個裝置 device 1 device x blocks 1 block x pages 1 page 528 bytes 資料塊大小 512bytes oob 塊大小 16bytes,除oob第...