NAND Flash的壞塊管理設計

2022-06-02 15:45:05 字數 4553 閱讀 4522

時間:2010-11-15 10:36:55 **:電子設計工程作者:周軍湖南機電職業技術學院

摘要:主要介紹了基於嵌入式linux的nand flash壞塊管理設計和實現方案,詳細闡述了壞塊對映表的建立、維護及其相關演算法,同時分析了此壞塊演算法在linux核心及bootloader中的具體應用。測試結果表明該演算法能夠處理nandflash的相關壞塊問題,具有較高的穩定性。

關鍵詞:nand flash;嵌入式ianux;對映表;壞塊管理

在擁有諸多優點的同時,nand flash由於生產工藝的問題,其在出廠時可能存在一定的壞塊。這些固有壞塊不能用於儲存資料,已被產家標識好。另外,使用過程中由於讀寫次數增多,好塊也會變得不穩定或失效,成為壞塊,這就是出廠後產生的壞塊。

nand flash在生產及使用過程中都有可能產生壞塊,這將使得系統變得不穩定。應用中一般採用跳塊策略來管理壞塊,但它不能解決系統執行中產生的壞塊情況。針對此情形,本文提出基於嵌入式linux系統平台下的一種基於壞塊對映的nand flash壞塊管理的方案,並詳細介紹其相關對映演算法和整套系統的相關壞塊管理流程。

1 壞塊管理層次結構

linux下的mtd(memory technology device)是用於管理rom、flash等記憶體裝置的一層子系統,它使編寫管理記憶體裝置驅動變得更加簡單。

mtd子系統將flash裝置或其分割槽抽象為mtd裝置,使底層驅動只需實現mtd裝置,而向上層檔案系統提供標準的介面,如mtd字元裝置、mtd塊裝置。

如圖1所示,本方案設計中,將壞塊管理層(bbmlayer)緊靠在驅動層之上mtd層之下,從而使得mtd層對壞塊不可見,並使壞塊的管理是基於整個晶元而不是某個分割槽,便於上層檔案系統實現損耗平衡。

bbm層基於驅動層提供的讀、寫、擦除相關操作實現介面read()、write()、erase()、read_oob()、write_oob()、isbad()、mark_bad()。對於其上層mtd子系統而言,關於壞塊的相關介面將不存在,物理介質類似於norflash。其中read_oob()、write_oob()介面為檔案系統提供相關用途,如jffs2的cleanmarker相關載體。

2 壞塊管理模組的設計實現

2.1 壞塊管理原理

本文的設計的壞塊管理是基於壞塊對映原理的一種實現。在本壞塊對映的設計中,nand flash被劃分為基本空間和預留空間。基本空間為使用者看到的nandflash的總的儲存空間。

基本空間中的壞塊被對映到預留空間中的相應好塊。基本對映關係如圖2所示。對映管理資訊記錄在壞塊對映表中,它儲存在預留空間。

2.2 壞塊對映表的描述

在預留空間存在4種形式的塊:空閒的好塊、壞塊、被對映的塊、存放對映表的塊。

存放對映表的塊較為特殊,其中對映表不僅描述基本空間中的壞塊對映相關資訊,還描述預留空間佔整個flash空間的比例等。

設計中一張壞塊表存於乙個flash塊,表的資訊存於塊中最前面的相關頁中。表的頭部長度固定,表的整個長度可變,與壞塊數目相關。

壞塊對映表結構描述如下:

其中hdr_crc和tbl_crc用於檢驗表的完整性;rese_start_blk即預留空間的起始塊號;version用於標識該錶的版本;num_bad_blk用於描述已發現的壞塊數,即壞塊對映表項的數目;map_tbl為記錄壞塊對映表項內容的首位址。任何乙個對映表項包括壞塊塊號及其對映的好塊的塊號。

由於使用過程中會產生新的壞塊,對映表中的表項需要增加,從而要更新flash中的對映表。為了防止系統意外掉電產生對映表不一致問題,採用日誌技術。其中version版本號標識對映表的新舊,在更新flash對映表的同時,版本號遞增,同時flash舊版本對映表並不立即擦除。

只有出現預留空間不足的情況,擦除舊版本對映表的動作才執行。此方案還有利於除錯,檢視對映表的更改歷史記錄。

在出現壞塊bn後,通常包括兩個動作:寫對映表和標識壞塊。標識壞塊是通過在塊的00b相應位元組寫非0xff來實現。

為了支援意外掉電情形,每個版本的對映表必須在flash裡儲存兩份,如果發現最高的版本對映表沒有兩份,或者兩份不一致,則屬於非正常情況,必須重新建立對映表。

考慮如下情況:寫完對映表vn,接著標識壞塊bn,此時掉電,則下次系統啟動後,出現對映表的壞快bn,實際上並沒有被標識,導致不一致問題。寫2份vn可以解決此問題:

寫第乙份vn後,標識壞塊bn,接著再寫第二份vn。這樣即使在標識壞塊bn時掉電,下次系統加電時由於沒有發現2份版本相同且最高的對映表,從而識別出此非正常情況。

同時,維護2份同版本壞塊表可以處理存放對映表的塊突然壞死而導致系統無法啟動的異常,起到備份的作用。

2.2.1 壞塊對映表的管理演算法

系統初始化時讀入壞塊表的內容,在記憶體中建立所有壞塊的對映資訊。由於每次發現新的壞塊而更新壞塊表時,都會寫入兩個版本一樣的壞塊表,所以在讀入壞塊表時就要檢查兩個表是否有效和一致,可以分為以下情況:

①發現2張最高版本並且有效的壞塊表vn+1——系統按表vn+1建立對映;

②只發現1張最高版本並且有效的壞塊表vn+1,並且有2張有效壞塊表vn——發生在上次寫完乙個vn+1後突然掉電,使得第二個表vn+1未寫入或寫入不完整,這時需要恢復,以建立完整對映,恢復演算法如圖3所示。

③只發現一張最高版本並且有效地壞塊表vn+1,並且有1張有效壞塊表vn——發生在寫第二張vn+1突然掉電,並且之前寫第二張vn也發生掉電;

④僅發現一張壞塊表v0——發生在系統寫第二張v0時掉電,此時系統需重新掃瞄建立對映表v1;

⑤沒有發現任何壞塊表——系統最初狀態;

⑥兩個完整的壞塊表vn+1,但num_bad_blk不一樣——這種情況發生在更新第二個壞塊表vn+1時,寫的時候出錯,產生乙個新的壞塊,從而第二次更新的壞塊表vn+1的壞塊數增加了。

對於情況①,只需在系統最初建立前建立好對映關係即可。

對於情況②,它經常出現在系統在寫或者擦除flash資料塊時突然斷電,導致資料或者ecc變化,從而flash讀導致ecc不正確。實際上fl-ash塊並沒有壞。根據此種情況,將首先為此塊分配乙個對映塊,並把資料拷入對映塊。

接著對此塊進行torture操作,如果發現它為好塊,則將之前對映操作撤銷,將資料重新拷入此好塊。如果此塊確實已壞,則將此塊標記為壞塊,並更新對映表。

對於情況③,分配乙個新的對映塊,把有效資料寫入新塊,並建立對映資訊。

對於情況④,分配乙個新的對映塊,並將此塊查出,然後建立對映資訊。

對於情況⑤,掃瞄整個flash,建立對映表vn、v0。

對於情況⑥,則採用壞塊多的對映表vn+1,並用它更新vn+2、vn+2。

2.2.2 壞塊管理及上層介面實現

該模組實現基於上節所述壞塊管理演算法對flash的所有有效塊的使用。它主要是處理執行中產生壞塊的情況,並讓上層程式遮蔽此資訊。

nand flash的壞塊包含如下三種型別:

◆flash上存在的出廠壞塊;

◆讀過程發生位元反轉而被視為的壞塊;

◆操作過程(讀,寫,擦除)中產生的新的壞塊。

對於此模組主要完成後兩種動態壞塊型別的處理過程。對於出廠壞塊,只需在初始化時檢測出來並將其對映到乙個好塊,以後的讀寫過程中對對映塊操作即可。

對於執行中產生的壞塊,從操作型別(讀、寫、擦除)來進行分別處理。

①讀過程中的位元反轉導致ecc錯誤,由於位元反轉是nand工藝決定的,且是不可避免的隨機行為,所以不能簡單地根據ecc錯誤就將其當作壞塊處理。具體處理流程如圖4所示,通過torture操作判斷此「壞塊」已真正成為壞塊。

如果nand flash在執行擦除或寫操作過程時發生斷電,則所操作的塊內的資料具有不確定性。下次讀該塊的內容時,可能發生無法糾正的ecc錯誤。為了能處理這種情況,圖4中的torture處理,其實現原理就是選擇一些資料寫入該塊,再讀出,如果不一致則該塊已變成壞塊。

②寫過程中發生錯誤,則該塊成為壞塊。處理方法為:為其分配乙個新的有效塊,將壞塊原有資料拷貝到有效塊,並同時寫入新的資料,最後更新對映表,標識壞塊。

寫操作的錯誤處理演算法如圖5所示。

③擦除過程發生錯誤,則該塊成為壞塊。處理方法為:為其分配乙個新的有效塊,並擦除此有效塊,更新對映表,標識壞塊。

2.3 bootioader的壞塊管理

在bootloader層採用linux核心相同的壞塊管理策略,並復用相關**。bootloader在記憶體建立起的壞塊對映表可以通過記憶體共享的方式,傳遞給linux核心,從而減少核心重新掃瞄壞塊對映表的時間,加快系統啟動速度。

3 測試

cases測試方法:對一切可能情況實行模擬測試,最後進行壓力測試。

3.1 壞塊場景模擬測試

①出廠壞塊;

②執行中產生壞塊:讀操作產生壞塊,寫操作產生壞塊,擦操作產生壞塊,位元反轉產生偽壞塊。

3.2 壞塊表一致性場景模擬

①2張相同vn+1;

②1張vn+1和2張相同vn;

③1張vn+1和1張vn;

④1張vn;

⑤沒有任何壞塊表;

⑥2張不相同的vn+1。

3.3 壓力測試

系統不間斷執行10天後,工作狀態仍然正常。

3.4 檔案系統測試

系統能夠支援對壞塊敏感的檔案系統squashfs、cramfs,其測試案例均通過。這表明該壞塊管理方法能有效管理nand flash。

4 總結

本文提出了一種基於嵌入式linux整套系統的nand flash壞塊管理實現方案,並詳細介紹其壞塊對映演算法。此方案目前已經應用到數碼電視開發平台。在系統平台上的相關壞塊動態產生、突然掉電等大量測試表明此方案穩定可靠。

Nandflash和norflash的區別

nandflash和norflash的區別 兩種並行flash flash儲存器又稱快閃儲存器,是一種可以 多次擦除的非易失性儲存器,即掉電後資料不會丟失,具體積小 功耗低 抗振性強等優點,為嵌入式系統中典型的兩種儲存裝置。1 nor型flash 如sst39vf160,可以直接讀取晶元記憶體儲器的...

畢設管理規範

本科畢業設計 管理 辦法電子科技大學教務處 2012年12月 目錄第一章畢業設計時間 1 第二章管理機構 1 第三章經費使用與管理 2 第四章課題要求 2 第五章指導教師與資格 2 第六章指導教師職責 3 第七章學生資格與任務 4 第八章初 中期檢查 5 第九章 撰寫 5 第十章 評閱 6 第十一章...

合同管理課設

課程設計指導教師評定成績表 指導教師評定成績 指導教師簽名年月日 重慶大學本科學生課程設計任務書 建設工程合同管理 課程綜合性作業要求 1 運用合同審查表 見下表 對給定的具體建設工程合同進行審查性分析 參見教材p70 p72內容 2 審查性分析的角度可以自己選擇 業主角度或者承包商角度 但必須在作...