ECC介紹
ECC,全稱為Error Correcting Code,錯(cuò)誤糾正碼,這是一種編碼方式,用于在于可以在一定程度上自行發(fā)現(xiàn)和糾正傳輸過(guò)程中發(fā)生的錯(cuò)誤。
香農(nóng)在1948年發(fā)表的《通信的數(shù)學(xué)理論》中的信道編碼定理指出:主要采取適當(dāng)?shù)募m錯(cuò)碼,就可以在多類信道上傳輸消息,其誤碼率可以任意小。經(jīng)過(guò)歷代人們的持續(xù)努力,找出了許多好的信道編碼方法,滿足許多實(shí)用要求。
在構(gòu)造糾錯(cuò)碼時(shí),將輸入信息分為k位一組進(jìn)行編碼。若編出的校驗(yàn)位僅與本組的信息位有關(guān),這樣的碼成為分組碼。若不僅與本組的K個(gè)信息位有關(guān),而且與前若干組的信息位有關(guān),則成為卷積碼。
糾錯(cuò)碼能夠檢錯(cuò)或者糾錯(cuò),主要靠碼字之間的差別。這可以用漢明距離d(x,y)來(lái)衡量。一種糾錯(cuò)碼的最小距離d定義為該種碼中任意兩個(gè)碼字之間的距離的最小值。
一種碼要能發(fā)現(xiàn)n個(gè)錯(cuò)誤,它的最小距離d應(yīng)不小于(n+1),
一種碼要能糾正n個(gè)錯(cuò)誤,它的最下距離d應(yīng)不小于(2n+1)
漢明碼介紹
它是一種可以發(fā)現(xiàn)并且糾正一個(gè)獨(dú)立錯(cuò)誤的線性分組碼,使用多余的奇偶校驗(yàn)位來(lái)識(shí)別一位的錯(cuò)誤。
1、把所有2的冪次方的數(shù)據(jù)位標(biāo)記為奇偶校驗(yàn)位(編號(hào)為1, 2, 4, 8, 16, 32, 64等的位置)
2、其他數(shù)據(jù)位用于待編碼數(shù)據(jù). (編號(hào)為3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17等的位置)
3、每個(gè)奇偶校驗(yàn)位的值代表了代碼字中部分?jǐn)?shù)據(jù)位的奇偶性,其所在位置決定了要校驗(yàn)和跳過(guò)的比特位順序。
位置1:校驗(yàn)1位,跳過(guò)1位,校驗(yàn)位數(shù)編號(hào)為:1,3,5,7,9,11,13,15,…
位置2:校驗(yàn)2位,跳過(guò)2位, 校驗(yàn)位數(shù)編號(hào)為:2,3,6,7,10,11,14,15,…
位置4:校驗(yàn)4位,跳過(guò)4位, 校驗(yàn)位數(shù)編號(hào)為:4,5,6,7,12,13,14,15,20,21,22,23,…
位置8:校驗(yàn)8位,跳過(guò)8位,校驗(yàn)位數(shù)編號(hào)為: 8-15,24-31,40-47,…
如果全部校驗(yàn)的位置中有奇數(shù)個(gè)1,把該奇偶校驗(yàn)位置為1;如果全部校驗(yàn)的位置中有偶數(shù)個(gè)1,把該奇偶校驗(yàn)位置為0
如下圖所示:
舉例說(shuō)明:一個(gè)字節(jié)的數(shù)據(jù) 1001_1010,按照上圖所示,D[0]~D[7]填寫(xiě)對(duì)應(yīng)數(shù)值,D[0]寫(xiě)1,D[1]寫(xiě)0….,需要計(jì)算得出4個(gè)校驗(yàn)位,根據(jù)上述原理可知:
C[0] = D[0] xor D[1] xor D[3] xor D[4] xor D[6] = 0
C[1] = D[0] xor D[2] xor D[3] xor D[5] xor D[6] = 1
C[2] = D[1] xor D[2] xor D[3] xor D[7] = 1
C[3] = D[4] xor D[5] xor D[6] xor D[7] = 0
最終排列出來(lái)的結(jié)果為: 011100101010 ,這個(gè)碼字代表了8位真實(shí)碼加上4位冗余碼,可以自糾正一位錯(cuò)誤。也就是說(shuō),在傳輸過(guò)程中,這列碼字,無(wú)論哪一位出現(xiàn)位翻轉(zhuǎn),在接收端都可以被檢測(cè)并且糾正回來(lái)。
在接收端收到此列數(shù)據(jù),還是按照上述方法來(lái)計(jì)算,看M[0] 和 M[2] xor M[4] xor M[5] xor M[6] xor M[10] 是否相等,如果相等,則設(shè)置對(duì)于M[0]位設(shè)為0,不等則設(shè)置對(duì)應(yīng)位為1.
通過(guò)這樣來(lái)計(jì)算四次,得到M[7] M[3] M[2] M[0],如果傳輸沒(méi)錯(cuò),則這四位均為0.如果某一位發(fā)生翻轉(zhuǎn),比如M[4]發(fā)生錯(cuò)誤,從0變?yōu)?,那么M[0]和M[3]的奇偶性就會(huì)計(jì)算錯(cuò)誤,那么
適用范圍
糾錯(cuò)碼傳輸?shù)亩际菙?shù)字信號(hào)。這既可用硬件實(shí)現(xiàn),也可用軟件實(shí)現(xiàn)。前者主要用各種數(shù)字電路,主要是采用大規(guī)模集成電路。軟件實(shí)現(xiàn)特別適合計(jì)算機(jī)通信網(wǎng)等場(chǎng)合。因?yàn)檫@時(shí)可以直接利用網(wǎng)中的計(jì)算機(jī)進(jìn)行編碼和譯碼,不需要另加專用設(shè)備。硬件實(shí)現(xiàn)的速度較高,比軟件可快幾數(shù)量級(jí)。
在傳信率一定的情況下,如果采用糾錯(cuò)碼提高可靠性,要求信道的傳輸率增加,帶寬加大。因此,糾錯(cuò)碼主要用于功率受限制而帶寬較大的信道,如衛(wèi)星、散射等系統(tǒng)中。糾錯(cuò)碼還用在一些可靠性要求較高,但設(shè)備或器件的可靠性較差,而余量較大的場(chǎng)合,如磁帶、磁盤(pán)和半導(dǎo)體存儲(chǔ)器等。
Nand Flash中的應(yīng)用
由于Nand Flash工藝,不能保證Nand中Memory Array在生命周期中保持可靠性能,因此,在使用過(guò)程中,會(huì)產(chǎn)生壞塊,為了保證數(shù)據(jù)的可靠性,Nand Flash控制器中一般都內(nèi)置了壞快管理策略。如果操作時(shí)序和電路穩(wěn)定性不存在問(wèn)題的前提下,Nand Flash出錯(cuò)一般不會(huì)造成整個(gè)Block或Page出錯(cuò)、而是整個(gè)Page中某一個(gè)或者某幾個(gè)bit出錯(cuò)。
在Nand Flash的處理中,使用專用的校驗(yàn)方法,ECC,它能夠糾正單比特錯(cuò)誤和檢測(cè)雙比特錯(cuò)誤,而且計(jì)算速度很快。以三星Flash為例子,一片Nand flash為一個(gè)設(shè)備(device),1 (Device) = xxxx (Blocks),1 (Block) = xxxx (Pages),1(Page) =528 (Bytes) = 數(shù)據(jù)塊大小(512Bytes) + OOB 塊大小(16Bytes,除OOB第六字節(jié)外,通常至少把OOB的前3個(gè)字節(jié)存放Nand Flash硬件ECC碼。
ECC一般每256個(gè)字節(jié)原始數(shù)據(jù)生成3字節(jié)ECC校驗(yàn)數(shù)據(jù),這24位的校驗(yàn)數(shù)據(jù)分為6位的列校驗(yàn)數(shù)據(jù)和16位的行校驗(yàn)數(shù)據(jù),剩余2位置為1,具體分布如下:
ECC行列校驗(yàn)生成規(guī)則如下,和漢明碼差不多的思想:
其中,行校驗(yàn)生成規(guī)則:
P8 = bit7(+)bit6(+)bit5(+)bit4(+)bit3(+)bit2(+)bit1(+)bit0 對(duì)所有偶數(shù)行字節(jié)的所有位進(jìn)行異或操作的結(jié)果。
P8`= bit7(+)bit6(+)bit5(+)bit4(+)bit3(+)bit2(+)bit1(+)bit0 對(duì)所有奇數(shù)行字節(jié)的所有位進(jìn)行異或操作的結(jié)果。
列校驗(yàn)生成規(guī)則:
P1=D7(+)D5(+)D3(+)D1 P1`=D6(+)D4(+)D2(+)D0
P2=D7(+)D6(+)D3(+)D2 P2`=D5(+)D4(+)D1(+)D0
P4=D7(+)D6(+)D5(+)D4 P4`=D3(+)D2(+)D1(+)D0
這里面的D6,D4為所有保存的字節(jié)上對(duì)于的Bit位值。比如P4是對(duì)所有字節(jié)的Bit 4 5 6 7 進(jìn)行異或操作的結(jié)果。P2是對(duì)所有字節(jié)的Bit2 3 6 7進(jìn)行異或操作的結(jié)果。
經(jīng)過(guò)上述計(jì)算結(jié)果的基礎(chǔ)上,匯總成ECC三個(gè)字節(jié)的保存布局:
當(dāng)往NAND Flash的page中寫(xiě)入數(shù)據(jù)的時(shí)候,每256字節(jié)我們生成一個(gè)ECC校驗(yàn)和,稱之為原ECC校驗(yàn)和,保存到PAGE的OOB(out-of-band)數(shù)據(jù)區(qū)中。
當(dāng)從NAND Flash中讀取數(shù)據(jù)的時(shí)候,每256字節(jié)我們生成一個(gè)ECC校驗(yàn)和,稱之為新ECC校驗(yàn)和。
校驗(yàn)的時(shí)候,根據(jù)上述ECC生成原理不難推斷:將從OOB區(qū)中讀出的原ECC校驗(yàn)和新ECC校驗(yàn)和按位異或,若結(jié)果為0,則表示不存在錯(cuò)(或是出現(xiàn)了ECC無(wú)法檢測(cè)的錯(cuò)誤);若3個(gè)字節(jié)異或結(jié)果中存在11個(gè)比特位為1,表示存在一個(gè)比特錯(cuò)誤,且可糾正;若3個(gè)字節(jié)異或結(jié)果中只存在1個(gè)比特位為1,表示OOB區(qū)出錯(cuò);其他情況均表示出現(xiàn)了無(wú)法糾正的錯(cuò)誤。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-784036.html
轉(zhuǎn):https://www.bbsmax.com/A/mo5kqjm3zw/文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-784036.html
到了這里,關(guān)于ECC校驗(yàn)原理以及在Nand Flash中的應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!