nand flash壞塊管理OOB,BBT,ECC
0.NAND的操作管理方式
NAND FLASH的管理方式:以三星FLAHS為例,一片Nand flash為一個設(shè)備(device),1 (Device) = xxxx (Blocks),1 (Block) = xxxx (Pages),1(Page) =528 (Bytes) = 數(shù)據(jù)塊大小(512Bytes) + OOB 塊大小(16Bytes,除OOB第六字節(jié)外,通常至少把OOB的前3個字節(jié)存放Nand Flash硬件ECC碼)。
1.為什么會出現(xiàn)壞塊
由于NAND Flash的工藝不能保證NAND的Memory Array在其生命周期中保持性能的可靠,因此,在NAND的生產(chǎn)中及使用過程中會產(chǎn)生壞塊。壞塊的特性是:當(dāng)編程/擦除這個塊時,會造成Page Program和Block Erase操作時的錯誤,相應(yīng)地反映到Status Register的相應(yīng)位。
2.壞塊的分類
總體上,壞塊可以分為兩大類:(1)固有壞塊:這是生產(chǎn)過程中產(chǎn)生的壞塊,一般芯片原廠都會在出廠時都會將每個壞塊第一個page的spare area的第6個byte標(biāo)記為不等于0xff的值。(2)使用壞塊:這是在NAND Flash使用過程中,如果Block Erase或者Page Program錯誤,就可以簡單地將這個塊作為壞塊來處理,這個時候需要把壞塊標(biāo)記起來。為了和固有壞塊信息保持一致,將新發(fā)現(xiàn)的壞塊的第一個page的 spare area的第6個Byte標(biāo)記為非0xff的值。
3.壞塊管理
根據(jù)上面的這些敘述,可以了解NAND Flash出廠時在spare area中已經(jīng)反映出了壞塊信息,因此,如果在擦除一個塊之前,一定要先check一下第一頁的spare area的第6個byte是否是0xff,如果是就證明這是一個好塊,可以擦除;如果是非0xff,那么就不能擦除,以免將壞塊標(biāo)記擦掉。當(dāng)然,這樣處理可能會犯一個錯誤―――“錯殺偽壞塊”,因為在芯片操作過程中可能由于電壓不穩(wěn)定等偶然因素會造成NAND操作的錯誤。但是,為了數(shù)據(jù)的可靠性及軟件設(shè)計的簡單化,還是需要遵照這個標(biāo)準(zhǔn)。
可以用BBT:bad block table,即壞塊表來進(jìn)行管理。各家對nand的壞塊管理方法都有差異。比如專門用nand做存儲的,會把bbt放到block0,因為第0塊一定是好的塊。但是如果nand本身被用來boot,那么第0塊就要存放程序,不能放bbt了。有的把bbt放到最后一塊,當(dāng)然,這一塊堅決不能為壞塊。bbt的大小跟nand大小有關(guān),nand越大,需要的bbt也就越大。
4.壞塊糾正
ECC:NAND Flash出錯的時候一般不會造成整個Block或是Page不能讀取或是全部出錯,而是整個Page(例如512Bytes)中只有一個或幾個bit出錯。一般使用一種比較專用的校驗——ECC。ECC能糾正單比特錯誤和檢測雙比特錯誤,而且計算速度很快,但對1比特以上的錯誤無法糾正,對2比特以上的錯誤不保證能檢測。
ECC一般每256字節(jié)原始數(shù)據(jù)生成3字節(jié)ECC校驗數(shù)據(jù),這三字節(jié)共24比特分成兩部分:6比特的列校驗和16比特的行校驗,多余的兩個比特置1。(512生成兩組ECC?)
當(dāng)往NAND Flash的page中寫入數(shù)據(jù)的時候,每256字節(jié)我們生成一個ECC校驗和,稱之為原ECC校驗和,保存到PAGE的OOB(out-of-band)數(shù)據(jù)區(qū)中。其位置就是eccpos[]。校驗的時候,根據(jù)上述ECC生成原理不難推斷:將從OOB區(qū)中讀出的原ECC校驗和新ECC校驗和按位異或,若結(jié)果為0,則表示不存在錯(或是出現(xiàn)了ECC無法檢測的錯誤);若3個字節(jié)異或結(jié)果中存在11個比特位為1,表示存在一個比特錯誤,且可糾正;若3個字節(jié)異或結(jié)果中只存在1個比特位為1,表示OOB區(qū)出錯;其他情況均表示出現(xiàn)了無法糾正的錯誤。
5.補(bǔ)充
(1)需要對前面由于Page Program錯誤發(fā)現(xiàn)的壞塊進(jìn)行一下特別說明。如果在對一個塊的某個page進(jìn)行編程的時候發(fā)生了錯誤就要把這個塊標(biāo)記為壞塊,首先就要把塊里其他好的面的內(nèi)容備份到另外一個空的好塊里面,然后,把這個塊標(biāo)記為壞塊。當(dāng)然,這可能會犯“錯殺”之誤,一個補(bǔ)救的辦法,就是在進(jìn)行完塊備份之后,再將這個壞塊擦除一遍,如果Block Erase發(fā)生錯誤,那就證明這個塊是個真正的壞塊,那就毫不猶豫地將它打個“戳”吧!
(2)可能有人會問,為什么要使用每個塊第一頁的spare area的第六個byte作為壞塊標(biāo)記。這是NAND Flash生產(chǎn)商的默認(rèn)約定,你可以看到Samsung,Toshiba,STMicroelectronics都是使用這個Byte作為壞塊標(biāo)記的。
(3)為什么好塊用0xff來標(biāo)記?因為Nand Flash的擦除即是將相應(yīng)塊的位全部變?yōu)?,寫操作時只能把芯片每一位(bit)只能從1變?yōu)?,而不能從0變?yōu)?。0XFF這個值就是標(biāo)識擦除成功,是好塊。
標(biāo)題名稱:nandflash壞塊管理OOB,BBT,ECC-創(chuàng)新互聯(lián)
URL地址:http://sd-ha.com/article0/jsdio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、手機(jī)網(wǎng)站建設(shè)、App設(shè)計、網(wǎng)站設(shè)計公司、云服務(wù)器、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容