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