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來說已經沒有辦法糾正錯誤了,只能報告出現了不可以糾正的情況。
軟體測試中常用的幾種糾錯技術
軟體測試中常用的幾種糾錯技術 糾錯先要查錯。查錯的工作量通常佔整個糾錯的十分之九以上。所謂糾錯的技術,主要是指查明程式錯誤時可能採用的工具和手段。這些手段如果運用得當,就能明顯的提高查錯的效率。1 插入列印語句 在程式中插入暫時性的列印語句,是一種十分常見的查錯技術。這類列印語句的作用主要是顯示程式...
常用Nand Flash 指令
指令 功能 nand info 顯示可使用的 nand flash nand device dev 顯示或設定當前使用的 nand flash nand read addr off size nand flash 讀取命令,從 nand 的 off 偏移地 址處讀取 size 位元組的資料到 sdr...
常用的 Nand Flash 指令如下
指令功能 nand info 顯示可使用的 nand flash nand device dev 顯示或設定當前使用的 nand flash nand read addr off size nand flash 讀取命令,從 nand 的 off 偏移地 址處讀取 size 位元組的資料到 sdra...