chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文詮釋NandFlash ECC校驗(yàn)原理與實(shí)現(xiàn)

strongerHuang ? 來(lái)源:nhczp ? 作者:nhczp ? 2021-07-27 16:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家應(yīng)該都在用U盤,而U盤中的存儲(chǔ)芯片就是NandFlash,你買的64G的U盤,實(shí)際并沒(méi)有64G,其中一個(gè)原因就是存在壞塊。

因?yàn)楣に嚭推渌矫娴脑?,不能保證NandFlash不存在壞塊,因此就需要“挑選出壞塊”。

本文就為大家講述一下用于NandFlash的ECC校驗(yàn)原理與實(shí)現(xiàn)。

ECC簡(jiǎn)介

由于NAND Flash的工藝不能保證NAND的Memory Array在其生命周期中保持性能的可靠,因此,在NAND的生產(chǎn)中及使用過(guò)程中會(huì)產(chǎn)生壞塊。為了檢測(cè)數(shù)據(jù)的可靠性,在應(yīng)用NAND Flash的系統(tǒng)中一般都會(huì)采用一定的壞區(qū)管理策略,而管理壞區(qū)的前提是能比較可靠的進(jìn)行壞區(qū)檢測(cè)。

如果操作時(shí)序和電路穩(wěn)定性不存在問(wèn)題的話,NAND Flash出錯(cuò)的時(shí)候一般不會(huì)造成整個(gè)Block或是Page不能讀取或是全部出錯(cuò),而是整個(gè)Page(例如512Bytes)中只有一個(gè)或幾個(gè)bit出錯(cuò)。

對(duì)數(shù)據(jù)的校驗(yàn)常用的有奇偶校驗(yàn)、CRC校驗(yàn)等,而在NAND Flash處理中,一般使用一種比較專用的校驗(yàn)——ECC。ECC能糾正單比特錯(cuò)誤和檢測(cè)雙比特錯(cuò)誤,而且計(jì)算速度很快,但對(duì)1比特以上的錯(cuò)誤無(wú)法糾正,對(duì)2比特以上的錯(cuò)誤不保證能檢測(cè)。

ECC原理

ECC一般每256字節(jié)原始數(shù)據(jù)生成3字節(jié)ECC校驗(yàn)數(shù)據(jù),這三字節(jié)共24比特分成兩部分:6比特的列校驗(yàn)和16比特的行校驗(yàn),多余的兩個(gè)比特置1,如下圖所示:

a3ff8f4a-eb95-11eb-a97a-12bb97331649.png

ECC的列校驗(yàn)和生成規(guī)則如下圖所示:

a41627c8-eb95-11eb-a97a-12bb97331649.png

用數(shù)學(xué)表達(dá)式表示為:

P4=D7(+)D6(+)D5(+)D4P4`=D3(+)D2(+)D1(+)D0P2=D7(+)D6(+)D3(+)D2P2`=D5(+)D4(+)D1(+)D0P1=D7(+)D5(+)D3(+)D1P1`=D6(+)D4(+)D2(+)D0

備注:這里(+)表示“位異或”操作

ECC的行校驗(yàn)和生成規(guī)則如下圖所示:

a423029a-eb95-11eb-a97a-12bb97331649.png

用數(shù)學(xué)表達(dá)式表示為:

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

備注:這里(+)表示“位異或”操作

當(dāng)往NAND Flash的page中寫入數(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ò)誤。

ECC算法的實(shí)現(xiàn)

這里附上算法代碼:

static const u_char nand_ecc_precalc_table[] ={0x00, 0x55, 0x56, 0x03, 0x59, 0x0c, 0x0f, 0x5a, 0x5a, 0x0f, 0x0c, 0x59, 0x03, 0x56, 0x55, 0x00,0x65, 0x30, 0x33, 0x66, 0x3c, 0x69, 0x6a, 0x3f, 0x3f, 0x6a, 0x69, 0x3c, 0x66, 0x33, 0x30, 0x65,0x66, 0x33, 0x30, 0x65, 0x3f, 0x6a, 0x69, 0x3c, 0x3c, 0x69, 0x6a, 0x3f, 0x65, 0x30, 0x33, 0x66,0x03, 0x56, 0x55, 0x00, 0x5a, 0x0f, 0x0c, 0x59, 0x59, 0x0c, 0x0f, 0x5a, 0x00, 0x55, 0x56, 0x03,0x69, 0x3c, 0x3f, 0x6a, 0x30, 0x65, 0x66, 0x33, 0x33, 0x66, 0x65, 0x30, 0x6a, 0x3f, 0x3c, 0x69,0x0c, 0x59, 0x5a, 0x0f, 0x55, 0x00, 0x03, 0x56, 0x56, 0x03, 0x00, 0x55, 0x0f, 0x5a, 0x59, 0x0c,0x0f, 0x5a, 0x59, 0x0c, 0x56, 0x03, 0x00, 0x55, 0x55, 0x00, 0x03, 0x56, 0x0c, 0x59, 0x5a, 0x0f,0x6a, 0x3f, 0x3c, 0x69, 0x33, 0x66, 0x65, 0x30, 0x30, 0x65, 0x66, 0x33, 0x69, 0x3c, 0x3f, 0x6a,0x6a, 0x3f, 0x3c, 0x69, 0x33, 0x66, 0x65, 0x30, 0x30, 0x65, 0x66, 0x33, 0x69, 0x3c, 0x3f, 0x6a,0x0f, 0x5a, 0x59, 0x0c, 0x56, 0x03, 0x00, 0x55, 0x55, 0x00, 0x03, 0x56, 0x0c, 0x59, 0x5a, 0x0f,0x0c, 0x59, 0x5a, 0x0f, 0x55, 0x00, 0x03, 0x56, 0x56, 0x03, 0x00, 0x55, 0x0f, 0x5a, 0x59, 0x0c,0x69, 0x3c, 0x3f, 0x6a, 0x30, 0x65, 0x66, 0x33, 0x33, 0x66, 0x65, 0x30, 0x6a, 0x3f, 0x3c, 0x69,0x03, 0x56, 0x55, 0x00, 0x5a, 0x0f, 0x0c, 0x59, 0x59, 0x0c, 0x0f, 0x5a, 0x00, 0x55, 0x56, 0x03,0x66, 0x33, 0x30, 0x65, 0x3f, 0x6a, 0x69, 0x3c, 0x3c, 0x69, 0x6a, 0x3f, 0x65, 0x30, 0x33, 0x66,0x65, 0x30, 0x33, 0x66, 0x3c, 0x69, 0x6a, 0x3f, 0x3f, 0x6a, 0x69, 0x3c, 0x66, 0x33, 0x30, 0x65,0x00, 0x55, 0x56, 0x03, 0x59, 0x0c, 0x0f, 0x5a, 0x5a, 0x0f, 0x0c, 0x59, 0x03, 0x56, 0x55, 0x00};

//Creates non-inverted ECC code from line paritystatic void nand_trans_result(u_char reg2, u_char reg3,u_char *ecc_code){u_char a, b, i, tmp1, tmp2;

/* Initialize variables */a = b = 0x80;tmp1 = tmp2 = 0;

/* Calculate first ECC byte */for (i = 0; i 《 4; i++){if (reg3 & a) /* LP15,13,11,9 --》 ecc_code[0] */tmp1 |= b;b 》》= 1;if (reg2 & a) /* LP14,12,10,8 --》 ecc_code[0] */tmp1 |= b;b 》》= 1;a 》》= 1;}

/* Calculate second ECC byte */b = 0x80;for (i = 0; i 《 4; i++){if (reg3 & a) /* LP7,5,3,1 --》 ecc_code[1] */tmp2 |= b;b 》》= 1;if (reg2 & a) /* LP6,4,2,0 --》 ecc_code[1] */tmp2 |= b;b 》》= 1;a 》》= 1;}

/* Store two of the ECC bytes */ecc_code[0] = tmp1;ecc_code[1] = tmp2;}

//Calculate 3 byte ECC code for 256 byte blockvoid nand_calculate_ecc (const u_char *dat, u_char *ecc_code){u_char idx, reg1, reg2, reg3;int j;

/* Initialize variables */reg1 = reg2 = reg3 = 0;ecc_code[0] = ecc_code[1] = ecc_code[2] = 0;

/* Build up column parity */for(j = 0; j 《 256; j++){/* Get CP0 - CP5 from table */idx = nand_ecc_precalc_table[dat[j]];reg1 ^= (idx & 0x3f);

/* All bit XOR = 1 ? */if (idx & 0x40) {reg3 ^= (u_char) j;reg2 ^= ~((u_char) j);}}

/* Create non-inverted ECC code from line parity */nand_trans_result(reg2, reg3, ecc_code);

/* Calculate final ECC code */ecc_code[0] = ~ecc_code[0];ecc_code[1] = ~ecc_code[1];ecc_code[2] = ((~reg1) 《《 2) | 0x03;}

//Detect and correct a 1 bit error for 256 byte blockint nand_correct_data (u_char *dat, u_char *read_ecc, u_char *calc_ecc){u_char a, b, c, d1, d2, d3, add, bit, i;

/* Do error detection */d1 = calc_ecc[0] ^ read_ecc[0];d2 = calc_ecc[1] ^ read_ecc[1];d3 = calc_ecc[2] ^ read_ecc[2];

if ((d1 | d2 | d3) == 0){/* No errors */return 0;}else{a = (d1 ^ (d1 》》 1)) & 0x55;b = (d2 ^ (d2 》》 1)) & 0x55;c = (d3 ^ (d3 》》 1)) & 0x54;

/* Found and will correct single bit error in the data */if ((a == 0x55) && (b == 0x55) && (c == 0x54)){c = 0x80;add = 0;a = 0x80;for (i=0; i《4; i++){if (d1 & c)add |= a;c 》》= 2;a 》》= 1;}c = 0x80;for (i=0; i《4; i++){if (d2 & c)add |= a;c 》》= 2;a 》》= 1;}bit = 0;b = 0x04;c = 0x80;for (i=0; i《3; i++){if (d3 & c)bit |= b;c 》》= 2;b 》》= 1;}b = 0x01;a = dat[add];a ^= (b 《《 bit);dat[add] = a;return 1;}else{i = 0;while (d1){if (d1 & 0x01)++i;d1 》》= 1;}while (d2){if (d2 & 0x01)++i;d2 》》= 1;}while (d3){if (d3 & 0x01)++i;d3 》》= 1;}if (i == 1){/* ECC Code Error Correction */read_ecc[0] = calc_ecc[0];read_ecc[1] = calc_ecc[1];read_ecc[2] = calc_ecc[2];return 2;}else{/* Uncorrectable Error */return -1;}}}

/* Should never happen */return -1;}

參考文檔:

http://blogimg.chinaunix.net/blog/upfile2/080702112233.pdf

免責(zé)聲明:本文素材來(lái)源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問(wèn)題,請(qǐng)與我聯(lián)系刪除。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ECC
    ECC
    +關(guān)注

    關(guān)注

    0

    文章

    99

    瀏覽量

    21445

原文標(biāo)題:NandFlash ECC校驗(yàn)原理與實(shí)現(xiàn)

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ?Microchip ECC204安全認(rèn)證IC技術(shù)解析與應(yīng)用指南

    Microchip Technology ECC204安全認(rèn)證IC是Microchip Technology Inc. CryptoAuthentication?產(chǎn)品系列的員。該器件適用于
    的頭像 發(fā)表于 10-11 13:52 ?141次閱讀
    ?Microchip <b class='flag-5'>ECC</b>204安全認(rèn)證IC技術(shù)解析與應(yīng)用指南

    進(jìn)行數(shù)據(jù)校驗(yàn)時(shí)如何保證場(chǎng)景覆蓋的全面性?

    的方法論和實(shí)施步驟,結(jié)合典型場(chǎng)景示例說(shuō)明: 、先明確場(chǎng)景覆蓋的核心維度:避免 “碎片化思考” 數(shù)據(jù)校驗(yàn)場(chǎng)景的全面性,需圍繞 “數(shù)據(jù)從產(chǎn)生到應(yīng)用的全生命周期” 展開(kāi),覆蓋以下 5 個(gè)核心維度,每個(gè)維度對(duì)應(yīng)不同的校驗(yàn)目標(biāo): 核心維
    的頭像 發(fā)表于 09-25 17:42 ?390次閱讀

    怎樣選擇適合的數(shù)據(jù)校驗(yàn)系統(tǒng)時(shí)間同步硬件?

    在電能質(zhì)量在線監(jiān)測(cè)裝置的數(shù)據(jù)校驗(yàn)系統(tǒng)中, 時(shí)間同步硬件的選擇需緊密匹配 “數(shù)據(jù)校驗(yàn)準(zhǔn)確性” 核心需求 (如多監(jiān)測(cè)點(diǎn)數(shù)據(jù)時(shí)間戳致性、校驗(yàn)結(jié)果時(shí)間溯源性),同時(shí)兼顧工業(yè)現(xiàn)場(chǎng)(如變電站、電
    的頭像 發(fā)表于 09-19 11:46 ?232次閱讀
    怎樣選擇適合的數(shù)據(jù)<b class='flag-5'>校驗(yàn)</b>系統(tǒng)時(shí)間同步硬件?

    如何確保電能質(zhì)量在線監(jiān)測(cè)裝置的數(shù)據(jù)校驗(yàn)的準(zhǔn)確性?

    校驗(yàn)后驗(yàn)證及長(zhǎng)期維護(hù),具體措施如下: 、核心前提:確保校驗(yàn)標(biāo)準(zhǔn)的 “溯源性” 與 “高精度” 校驗(yàn)的本質(zhì)是 “用更高精度的標(biāo)準(zhǔn)比對(duì)監(jiān)測(cè)裝置的誤差”,因此 標(biāo)準(zhǔn)源 /
    的頭像 發(fā)表于 09-18 11:05 ?278次閱讀
    如何確保電能質(zhì)量在線監(jiān)測(cè)裝置的數(shù)據(jù)<b class='flag-5'>校驗(yàn)</b>的準(zhǔn)確性?

    高精度電測(cè)校驗(yàn)裝置實(shí)戰(zhàn)復(fù)盤():從調(diào)研到落地的全流程解析

    案例:江蘇省電力公司蘇州供電分公司計(jì)量中心多功能校驗(yàn)升級(jí)項(xiàng)目 項(xiàng)目背景與挑戰(zhàn) 江蘇省電力公司蘇州供電分公司計(jì)量中心承擔(dān)著蘇州地區(qū)12個(gè)縣市區(qū)約45萬(wàn)戶用電客戶的電測(cè)儀表校驗(yàn)任務(wù)。2023年初,該
    的頭像 發(fā)表于 08-22 16:43 ?363次閱讀
    高精度電測(cè)<b class='flag-5'>校驗(yàn)</b>裝置實(shí)戰(zhàn)復(fù)盤(<b class='flag-5'>一</b>):從調(diào)研到落地的全流程解析

    搞定英偉達(dá) H100 ECC 報(bào)錯(cuò):從原理到維修,步到位解煩憂

    最近,捷智算GPU維修室收到了不少H100服務(wù)器需要維修,故障問(wèn)題集中為ECC報(bào)錯(cuò)。為了幫大家更好地認(rèn)識(shí)和了解情況,下面就詳細(xì)分享ECC報(bào)錯(cuò)系統(tǒng)化排查方法和維修流程。、
    的頭像 發(fā)表于 08-14 18:05 ?936次閱讀
    搞定英偉達(dá) H100 <b class='flag-5'>ECC</b> 報(bào)錯(cuò):從原理到維修,<b class='flag-5'>一</b>步到位解煩憂

    SEM IP在MPSoC器件上的使用指南

    SEM(Soft Error Mitigation)技術(shù)通過(guò)目標(biāo)式ECC奇偶校驗(yàn)位注入實(shí)現(xiàn)可觀測(cè)的軟錯(cuò)誤模擬。該機(jī)制在配置存儲(chǔ)器幀(CRAM Frame)內(nèi)精確選擇校驗(yàn)位進(jìn)行可控翻轉(zhuǎn),
    的頭像 發(fā)表于 08-13 16:59 ?1021次閱讀
    SEM IP在MPSoC器件上的使用指南

    STM32CubeProgrammer總是校驗(yàn)錯(cuò)誤的原因?

    芯片以及串口線也是同樣的問(wèn)題。更改波特率至9600也時(shí)校驗(yàn)錯(cuò)誤,Programmer換成2.8版本的也是樣的校驗(yàn)錯(cuò)誤問(wèn)題 同樣的MCU在其他電腦上就沒(méi)問(wèn)題,就只有在我的電腦上會(huì)出現(xiàn)這樣的錯(cuò)誤
    發(fā)表于 06-11 07:29

    S32K311如何在Flash上測(cè)試ECC

    我有些與目標(biāo) S32K311 上的 Flash ECC 相關(guān)的問(wèn)題 - ERM 是否負(fù)責(zé) Code Flash 和 Data Flash ECC 中斷通知? - 我們?nèi)绾卧?Flash 上測(cè)試
    發(fā)表于 04-14 08:47

    基于Verilog語(yǔ)言實(shí)現(xiàn)CRC校驗(yàn)

    CRC即循環(huán)冗余校驗(yàn)碼:是數(shù)據(jù)通信領(lǐng)域中最常用的種查錯(cuò)校驗(yàn)碼,其特征是信息字段和校驗(yàn)字段的長(zhǎng)度可以任意選定。循環(huán)冗余檢查(CRC)是種數(shù)
    的頭像 發(fā)表于 03-24 10:36 ?1903次閱讀
    基于Verilog語(yǔ)言<b class='flag-5'>實(shí)現(xiàn)</b>CRC<b class='flag-5'>校驗(yàn)</b>

    求助,關(guān)于STM32H7系列芯片下的ECC功能的疑問(wèn)求解

    無(wú)法關(guān)閉ECC就無(wú)法測(cè)對(duì)于單bit錯(cuò)誤。特別是位錯(cuò)誤下,原始數(shù)據(jù),讀出數(shù)據(jù),以及ECC碼無(wú)法同時(shí)看到。 1.想問(wèn)下STM32官網(wǎng)工程師,是否存在關(guān)閉ECC,嚴(yán)格實(shí)現(xiàn)單bit和雙bit錯(cuò)
    發(fā)表于 03-11 07:43

    請(qǐng)問(wèn)ECC功能開(kāi)啟后如何驗(yàn)證這個(gè)功能是否正常開(kāi)啟呢?

    各位大佬,現(xiàn)在我這邊個(gè)項(xiàng)目,代碼層面開(kāi)啟ECC監(jiān)控和中斷后,如何驗(yàn)證當(dāng)真實(shí)應(yīng)用環(huán)境下,Ram區(qū)或者Flash區(qū)某個(gè)位被打翻后,會(huì)正常觸發(fā)中斷,實(shí)現(xiàn)讀和回寫的功能呢?
    發(fā)表于 03-11 06:19

    ECC204 mikroBUS?評(píng)估板用戶指南

    電子發(fā)燒友網(wǎng)站提供《ECC204 mikroBUS?評(píng)估板用戶指南.pdf》資料免費(fèi)下載
    發(fā)表于 01-22 16:55 ?0次下載
    <b class='flag-5'>ECC</b>204 mikroBUS?評(píng)估板用戶指南

    ECC608-TMNGTLS CryptoAuthentication?數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《ECC608-TMNGTLS CryptoAuthentication?數(shù)據(jù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 01-22 15:46 ?0次下載
    <b class='flag-5'>ECC</b>608-TMNGTLS CryptoAuthentication?數(shù)據(jù)手冊(cè)

    ECC206概要數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《ECC206概要數(shù)據(jù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 01-21 14:05 ?0次下載
    <b class='flag-5'>ECC</b>206概要數(shù)據(jù)手冊(cè)