NAND Flash的壞塊管理設(shè)計
③只發(fā)現(xiàn)一張最高版本并且有效地壞塊表Vn+1,并且有1張有效壞塊表Vn——發(fā)生在寫第二張Vn+1突然掉電,并且之前寫第二張Vn也發(fā)生掉電;
④僅發(fā)現(xiàn)一張壞塊表V0——發(fā)生在系統(tǒng)寫第二張V0時掉電,此時系統(tǒng)需重新掃描建立映射表V1;
⑤沒有發(fā)現(xiàn)任何壞塊表——系統(tǒng)最初狀態(tài);
⑥兩個完整的壞塊表Vn+1,但num_bad_blk不一樣——這種情況發(fā)生在更新第二個壞塊表Vn+1時,寫的時候出錯,產(chǎn)生一個新的壞塊,從而第二次更新的壞塊表Vn+1的壞塊數(shù)增加了。
對于情況①,只需在系統(tǒng)最初建立前建立好映射關(guān)系即可。
對于情況②,它經(jīng)常出現(xiàn)在系統(tǒng)在寫或者擦除Flash數(shù)據(jù)塊時突然斷電,導(dǎo)致數(shù)據(jù)或者ECC變化,從而Flash讀導(dǎo)致ECC不正確。實際上Fl-ash塊并沒有壞。根據(jù)此種情況,將首先為此塊分配一個映射塊,并把數(shù)據(jù)拷入映射塊。接著對此塊進(jìn)行torture操作,如果發(fā)現(xiàn)它為好塊,則將之前映射操作撤銷,將數(shù)據(jù)重新拷入此好塊。如果此塊確實已壞,則將此塊標(biāo)記為壞塊,并更新映射表。
對于情況③,分配一個新的映射塊,把有效數(shù)據(jù)寫入新塊,并建立映射信息。
對于情況④,分配一個新的映射塊,并將此塊查出,然后建立映射信息。
對于情況⑤,掃描整個Flash,建立映射表Vn、V0。
對于情況⑥,則采用壞塊多的映射表Vn+1,并用它更新Vn+2、Vn+2。
2.2.2 壞塊管理及上層接口實現(xiàn)
該模塊實現(xiàn)基于上節(jié)所述壞塊管理算法對Flash的所有有效塊的使用。它主要是處理運行中產(chǎn)生壞塊的情況,并讓上層程序屏蔽此信息。
NAND Flash的壞塊包含如下三種類型:
◆Flash上存在的出廠壞塊;
◆讀過程發(fā)生比特反轉(zhuǎn)而被視為的壞塊;
◆操作過程(讀,寫,擦除)中產(chǎn)生的新的壞塊。
對于此模塊主要完成后兩種動態(tài)壞塊類型的處理過程。對于出廠壞塊,只需在初始化時檢測出來并將其映射到一個好塊,以后的讀寫過程中對映射塊操作即可。
對于運行中產(chǎn)生的壞塊,從操作類型(讀、寫、擦除)來進(jìn)行分別處理。
①讀過程中的比特反轉(zhuǎn)導(dǎo)致ECC錯誤,由于比特反轉(zhuǎn)是NAND工藝決定的,且是不可避免的隨機(jī)行為,所以不能簡單地根據(jù)ECC錯誤就將其當(dāng)作壞塊處理。具體處理流程如圖4所示,通過torture操作判斷此“壞塊”已真正成為壞塊。
如果NAND Flash在執(zhí)行擦除或?qū)懖僮鬟^程時發(fā)生斷電,則所操作的塊內(nèi)的數(shù)據(jù)具有不確定性。下次讀該塊的內(nèi)容時,可能發(fā)生無法糾正的ECC錯誤。為了能處理這種情況,圖4中的torture處理,其實現(xiàn)原理就是選擇一些數(shù)據(jù)寫入該塊,再讀出,如果不一致則該塊已變成壞塊。
評論