NAND Flash ECC 校驗原理與實現

2021-08-25 20:47:34 字數 2441 閱讀 2965

參考文件:

nandflashecc校驗原理與實現

ecc簡介

由於nandflash的工藝不能保證nand的memoryarray在其生命周

期中保持效能的可靠,因此,在nand的生產中及使用過程中會產生壞塊。為了檢測資料的可靠性,在應用nandflash的系統中一般都會採用一定的壞

區管理策略,而管理壞區的前提是能比較可靠的進行壞區檢測。

如果操作時序和電路穩定性不存在問題的話,nandflash出錯的時候一般不會造成整個block或是page不能讀取或是全部出錯,而是整個page(例如512bytes)中只有乙個或幾個bit出錯。

對資料的校驗常用的有奇偶校驗、crc校驗等,而在nandflash處理中,一般使用一種比較專用的校驗——ecc。ecc能糾正單位元錯誤和檢測雙位元錯誤,而且計算速度很快,但對1位元以上的錯誤無法糾正,對2位元以上的錯誤不保證能檢測。

ecc原理

ecc一般每256位元組原始資料生成3位元組ecc校驗資料,這三位元組共24位元分成兩部分:6位元的列校驗和16位元的行校驗,多餘的兩個位元置1,如下圖所示:

ecc的列校驗和生成規則如下圖所示:

用數學表示式表示為:

p4=d7(+)d6(+)d5(+)d4  p4`=d3(+)d2(+)d1(+)d0

p2=d7(+)d6(+)d3(+)d2  p2`=d5(+)d4(+)d1(+)d0

p1=d7(+)d5(+)d3(+)d1  p1`=d6(+)d4(+)d2(+)d0

這裡(+)表示「位異或」操作

ecc的行校驗和生成規則如下圖所示:

用數學表示式表示為:

p8=bit7(+)bit6(+)bit5(+)bit4(+)bit3(+)bit2(+)bit1(+)bit0(+)p8

……………………………………………………………………………………

這裡(+)同樣表示「位異或」操作

當往nandflash的page中寫入資料的時候,每256位元組我們生成乙個ecc校驗和,稱之為原ecc校驗和,儲存到page的oob(out-of-band)資料區中。

當從nandflash中讀取資料的時候,每256位元組我們生成乙個ecc校驗和,稱之為新ecc校驗和。

校驗的時候,根據上述ecc生成原理不難推斷:將從oob區中讀出的原ecc校驗和新ecc校驗和按位異或,若結果為0,則表示不存在錯(或是出現了

ecc無法檢測的錯誤);若3個位元組異或結果中存在11個位元位為1,表示存在乙個位元錯誤,且可糾正;若3個位元組異或結果中只存在1個位元位為1,表示

oob區出錯;其他情況均表示出現了無法糾正的錯誤。

ecc演算法的實現

staticconstu_charnand_ecc_precalc_table=

;// createsnon-invertedecccodefromlineparity

staticvoidnand_trans_result(u_charreg2,u_charreg3,u_char*ecc_code)

/*calculatesecondeccbyte*/

b=0x80;

for(i=0;i<4;i++)

/*storetwooftheeccbytes*/

ecc_code[0]=tmp1;

ecc_code[1]=tmp2;

}// calculate3byteecccodefor256byteblock

voidnand_calculate_ecc(constu_char*dat,u_char*ecc_code)

}/*createnon-invertedecccodefromlineparity*/

nand_trans_result(reg2,reg3,ecc_code);

/*calculatefinalecccode*/

ecc_code[0]=~ecc_code[0];

ecc_code[1]=~ecc_code[1];

ecc_code[2]=((~reg1)<<2)|0x03;

}// detectandcorrecta1biterrorfor256byteblock

intnand_correct_data(u_char*dat,u_char*read_ecc,u_char*calc_ecc)

else

c=0x80;

for(i=0;i<4;i++)

bit=0;

b=0x04;

c=0x80;

for(i=0;i<3;i++)

b=0x01;

a=dat[add];

a^=(b<>=1;

}while(d2)

while(d3)

if(i==1)

else}}

NAND Flash ECC演算法長度計算

nand flash中常用的糾錯方式 因為快閃儲存器中會有出錯的可能,如果沒有使用ecc模組,讀出的資料和寫入的資料會有不匹配的可能,也許乙個檔案中只有一兩個bit不匹配,這也是不能容忍的。相對來說slc中出錯概率比較低,所以使用乙個糾錯能力不強的hanming碼就可以了,在mlc中hanming碼...

NAND Flash ECC演算法長度計算

nand flash中常用的糾錯方式 因為快閃儲存器中會有出錯的可能,如果沒有使用ecc模組,讀出的資料和寫入的資料會有不匹配的可能,也許乙個檔案中只有一兩個bit不匹配,這也是不能容忍 的。相對來說slc中出錯概率比較低,所以使用乙個糾錯能力不強的hanming碼就可以了,在mlc中hanming...

IP資料報的校驗和演算法C 版 原

為做偽ip,特地做了乙個ip包,用c 改寫ip頭的校驗和演算法。資料一 ip頭格式 版本號 4位 ip頭長度 4位 服務型別 8位 資料報長度 16位 標識段 16位 標誌段 16位 生存時間 8位 傳輸協議 8位 頭校驗和 16位 傳送位址 16位 目標位址 16位 選項 填充 資料二 ip 協議...