ecc的全稱是error checking and correction,是一種用於
nand
的差錯檢測和修正演算法。如果操作時序和電路穩定性不存在問題的話,
nand flash
出錯的時候一般不會造成整個
block
或是page
不能讀取或是全部出錯,而是整個
page
(例如512bytes
)中只有乙個或幾個
bit出錯。
ecc能糾正1
個位元錯誤和檢測2
個位元錯誤,而且計算速度很快,但對
1位元以上的錯誤無法糾正,對
2位元以上的錯誤不保證能檢測。
校驗碼生成演算法:ecc
校驗每次對
256位元組的資料進行操作,包含列校驗和行校驗。對每個待校驗的
bit位求異或,若結果為
0,則表明含有偶數個
1;若結果為
1,則表明含有奇數個
1。列校驗規則如表
1所示。
256位元組資料形成
256行、
8列的矩陣,矩陣每個元素表示乙個
bit位。
其中cp0 ~ cp5
為六個bit位,表示
column parity
(列極性),
cp0為第0、
2、4、
6列的極性,
cp1為第1、
3、5、
7列的極性,
cp2為第0、1、
4、5列的極性,
cp3為第2、3、
6、7列的極性,
cp4為第0、
1、2、
3列的極性,
cp5為第4、
5、6、
7列的極性。
用公式表示就是:
cp0=bit0^bit2^bit4^bit6, 表示第
0列內部
256個
bit位異或之後再跟第2列
256個
bit位異或,再跟第
4列、第
6列的每個
bit位異或,這樣,
cp0其實是
256*4=1024
個bit
位異或的結果。
cp1 ~ cp5
依此類推。
行校驗如下圖所示
其中rp0 ~ rp15
為十六個
bit位,表示
row parity
(行極性),
rp0為第0、
2、4、
6、….252、
254
個位元組的極性
rp1-----1、3、
5、7……253、
255
rp2----0、1
、4、5
、8、9…..252、
253
(處理2
個byte
,跳過2
個byte
)rp3---- 2、3
、6、7
、10、11…..254
、255
(跳過2
個byte
,處理2
個byte
)rp4---- 處理4個
byte
,跳過4
個byte
;rp5---- 跳過
4個byte
,處理4
個byte
;rp6---- 處理8個
byte
,跳過8
個byte
rp7---- 跳過
8個byte
,處理8
個byte
;rp8---- 處理16個
byte
,跳過16
個byte
rp9---- 跳過
16個byte
,處理16
個byte
;rp10----處理32個
byte
,跳過32
個byte
rp11----
跳過32
個byte
,處理32
個byte
;rp12----處理64個
byte
,跳過64
個byte
rp13----
跳過64
個byte
,處理64
個byte
;rp14----處理
128個
byte
,跳過128
個byte
rp15----
跳過128
個byte
,處理128
個byte
;可見,rp0 ~ rp15 每個
bit位都是
128個位元組(也就是
128行)即
128*8=1024
個bit
位求異或的結果。
綜上所述,對
256位元組的資料共生成了6個
bit的列校驗結果,16個
bit的行校驗結果,共22個
bit。在
nand
中使用3
個位元組存放校驗結果,多餘的兩個
bit位置
1。存放次序如下表所示:
以k9f1208
為例,每個
page
頁包含512
位元組的資料區和
16位元組的
oob區。前
256位元組資料生成3位元組
ecc校驗碼,後
256位元組資料生成3位元組
ecc校驗碼,共6位元組
ecc校驗碼存放在
oob區中,存放的位置為
oob區的第0、
1、2和
3、6、
7位元組。
TCP UDP 校驗演算法
經常看計算機網路相關的書時,每次看到關於ip或者是udp報頭校驗和時,都是一笑而過,以為相當簡單的東西,不就是16bit資料的相加嗎!最近在學習ping命令的源待時,看到裡面有關於校驗和的演算法。一頭霧水,後來查詢資料,看到校驗和是16bit字的二進位制反碼和。總是覺得很奇怪,為什麼會用反碼和,而不...
VB CRC校驗演算法實現
以下是crc16位 校驗函式,使用的是查表法 private function crc16 data as byte as string dim crc16hi as byte dim crc16lo as byte crc16hi hff crc16lo hff dim i as integer ...
奇偶校驗演算法
1即計算出所給數中包含1的個數 方法一 每一位分別異或 時間複雜度o n n代表數字數 函式功能 如果1的個數為奇數個,則返回1,如果1的個數為偶數個,則返回0。parity check unsigned x return val 0x1 取末位運算.val的二進位制形式最後一位位1則返回1,為0則...