NAND Flash的壞塊管理設(shè)計
摘要:主要介紹了基于嵌入式Linux的NAND Flash壞塊管理設(shè)計和實現(xiàn)方案,詳細闡述了壞塊映射表的建立、維護及其相關(guān)算法,同時分析了此壞塊算法在Linux內(nèi)核及Bootloader中的具體應(yīng)用。測試結(jié)果表明該算法能夠處理NANDFlash的相關(guān)壞塊問題,具有較高的穩(wěn)定性。
關(guān)鍵詞:NAND Flash;嵌入式IAnux;映射表;壞塊管理
在擁有諸多優(yōu)點的同時,NAND Flash由于生產(chǎn)工藝的問題,其在出廠時可能存在一定的壞塊。這些固有壞塊不能用于存儲數(shù)據(jù),已被產(chǎn)家標識好。另外,使用過程中由于讀寫次數(shù)增多,好塊也會變得不穩(wěn)定或失效,成為壞塊,這就是出廠后產(chǎn)生的壞塊。
NAND Flash在生產(chǎn)及使用過程中都有可能產(chǎn)生壞塊,這將使得系統(tǒng)變得不穩(wěn)定。應(yīng)用中一般采用跳塊策略來管理壞塊,但它不能解決系統(tǒng)運行中產(chǎn)生的壞塊情況。針對此情形,本文提出基于嵌入式Linux系統(tǒng)平臺下的一種基于壞塊映射的NAND Flash壞塊管理的方案,并詳細介紹其相關(guān)映射算法和整套系統(tǒng)的相關(guān)壞塊管理流程。
1 壞塊管理層次結(jié)構(gòu)
Linux下的MTD(Memory Technology Device)是用于管理ROM、Flash等內(nèi)存設(shè)備的一層子系統(tǒng),它使編寫管理內(nèi)存設(shè)備驅(qū)動變得更加簡單。
MTD子系統(tǒng)將Flash設(shè)備或其分區(qū)抽象為MTD設(shè)備,使底層驅(qū)動只需實現(xiàn)MTD設(shè)備,而向上層文件系統(tǒng)提供標準的接口,如MTD字符設(shè)備、MTD塊設(shè)備。
如圖1所示,本方案設(shè)計中,將壞塊管理層(BBMlayer)緊靠在驅(qū)動層之上MTD層之下,從而使得MTD層對壞塊不可見,并使壞塊的管理是基于整個芯片而不是某個分區(qū),便于上層文件系統(tǒng)實現(xiàn)損耗平衡。
BBM層基于驅(qū)動層提供的讀、寫、擦除相關(guān)操作實現(xiàn)接口read()、write()、erase()、read_oob()、write_oob()、isbad()、mark_bad()。對于其上層MTD子系統(tǒng)而言,關(guān)于壞塊的相關(guān)接口將不存在,物理介質(zhì)類似于NORFlash。其中read_oob()、write_oob()接口為文件系統(tǒng)提供相關(guān)用途,如JFFS2的cleanmarker相關(guān)載體。
2 壞塊管理模塊的設(shè)計實現(xiàn)
2.1 壞塊管理原理
本文的設(shè)計的壞塊管理是基于壞塊映射原理的一種實現(xiàn)。在本壞塊映射的設(shè)計中,NAND Flash被劃分為基本空間和預(yù)留空間。基本空間為用戶看到的NANDFlash的總的存儲空間?;究臻g中的壞塊被映射到預(yù)留空間中的相應(yīng)好塊?;居成潢P(guān)系如圖2所示。映射管理信息記錄在壞塊映射表中,它存儲在預(yù)留空間。
評論