linux nand 坏块_Nand Flash 中的坏块(Bad Block)
Nand Flash 中,一個塊中含有 1 個或多個位是壞的,就稱為其為壞塊 Bad Block。
壞塊的穩(wěn)定性是無法保證的,也就是說,不能保證你寫入的數(shù)據(jù)是對的,或者寫入對了,讀
出來也不一定對的。與此對應(yīng)的正常的塊,肯定是寫入讀出都是正常的。
壞塊有兩種:
(1) 出廠時就有存在的壞塊:
一種是出廠的時候,也就是,你買到的新的,還沒用過的 Nand Flash,就可以包含了壞塊。
此類出廠時就有的壞塊,被稱作 factory (masked) bad block 或 initial bad/invalid
block,在出
廠之前,就會做對應(yīng)的標(biāo)記,標(biāo)為壞塊。
(2) 使用過程中產(chǎn)生的壞塊:
第二類叫做在使用過程中產(chǎn)生的,由于使用過程時間長了,在擦塊除的時候,出錯了,說明
此塊壞了,也要在程序運行過程中,發(fā)現(xiàn),并且標(biāo)記成壞塊的。具體標(biāo)記的位置,和上面一
樣。這類塊叫做 worn-out bad block。即用壞了的塊。
壞塊的標(biāo)記
具體標(biāo)記的地方是,對于現(xiàn)在常見的頁大小為 2K 的 Nand
Flash,是塊中第一個頁的 oob 起
始位置(關(guān)于什么是頁和 oob,下面會有詳細(xì)解釋)的第 1 個字節(jié)(舊的小頁面,pagesize
是 512B 甚至 256B 的 Nand Flash,壞塊標(biāo)記是第 6 個字節(jié)) 如果不是
0xFF,?就說明是壞塊。
相對應(yīng)的是,所有正常的塊,好的塊,里面所有數(shù)據(jù)都是 0xFF 的。
不過,對于現(xiàn)在新出的有些 Nand Flash,很多標(biāo)記方式,有些變化,有的變成該壞塊的第一
個頁或者第二個頁,也有的是,倒數(shù)最后一個或倒數(shù)第二個頁,用于標(biāo)記壞塊的。
具體的信息,請參考對應(yīng)的 Nand Flash 的數(shù)據(jù)手冊,其中會有說明。
對于壞塊的標(biāo)記,本質(zhì)上,也只是對應(yīng)的 flash 上的某些字節(jié)的數(shù)據(jù)是非 0xFF 而已,所以,
只要是數(shù)據(jù),就是可以讀取和寫入的。也就意味著,可以寫入其他值,也就把這個壞塊標(biāo)記
信息破壞了。對于出廠時的壞塊,一般是不建議將標(biāo)記好的信息擦除掉的。
uboot 中有個命令是“nand scrub”就可以將塊中所有的內(nèi)容都擦除了,包括壞塊標(biāo)記,不論
是出廠時的,還是后來使用過程中出現(xiàn)而新標(biāo)記的。一般來說,不建議用這個。
不過,在實際的驅(qū)動編程開發(fā)過程中,為了方便起見,我倒是經(jīng)常用,其實也沒啥大礙,呵
呵。不過呢,其實最好的做法是,用“nand erase”只擦除好的塊,對于已經(jīng)標(biāo)記壞塊的塊,
不要輕易擦除掉,否則就很難區(qū)分哪些是出廠時就壞的,哪些是后來使用過程中用壞的了。
壞塊的管理
對于壞塊的管理,在 Linux 系統(tǒng)中,叫做壞塊管理(BBM,Bad Block
Management) ?,對應(yīng)
的會有一個表去記錄好塊,壞塊的信息,以及壞塊是出廠就有的,還是后來使用產(chǎn)生的,這
個表叫做壞塊表(BBT,Bad Block Table) 。在 Linux 內(nèi)核 MTD 架構(gòu)下的 Nand Flash
驅(qū)動,
和 Uboot 中 Nand Flash 驅(qū)動中,在加載完驅(qū)動之后,如果你沒有加入?yún)?shù)主動要求跳過壞
塊掃描的話,那么都會去主動掃描壞塊,建立必要的 BBT 的,以備后面壞塊管理所使用。
壞塊的比例
而關(guān)于好塊和壞塊,Nand Flash 在出廠的時候,會做出保證:
1.關(guān)于好的,可以使用的塊的數(shù)目達(dá)到一定的數(shù)目,比如三星的
K9G8G08U0M,整個 flash
一共有 4096 個塊,出廠的時候,保證好的塊至少大于 3996 個,也就是意思是,你新買到這
個型號的 Nand Flash,最壞的可能, 有 3096-3996=100 個壞塊。不過,事實上,現(xiàn)在出
廠時的壞塊,比較少,絕大多數(shù),都是使用時間長了,在使用過程中出現(xiàn)的。
2.保證第一個塊是好的,并且一般相對來說比較耐用。做此保證的主要原因是,很多 Nand
Flash 壞塊管理方法中,就是將第一個塊,用來存儲上面提到的 BBT,否則,都是出錯幾率
一樣的塊,那么也就不太好管理了,連放 BBT 的地方,都不好找了,^_^。
一般來說,不同型號的 Nand Flash 的數(shù)據(jù)手冊中,也會提到,自己的這個 Nand Flash,最多
允許多少個壞塊。就比如上面提到的,三星的 K9G8G08U0M,最多有 100 個壞塊。
轉(zhuǎn)自:http://hi.baidu.com/weizhiyuan420/item/506c4cac1b6fefa928ce9df2
總結(jié)
以上是生活随笔為你收集整理的linux nand 坏块_Nand Flash 中的坏块(Bad Block)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】深入分析@Transactiona
- 下一篇: Linux 进程 | 进程间的通信方式