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