• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > NAND Flash的壞塊管理設(shè)計

    NAND Flash的壞塊管理設(shè)計

    作者: 時間:2010-11-15 來源:網(wǎng)絡(luò) 收藏

    2.2 壞塊映射表的描述
    在預(yù)留空間存在4種形式的塊:空閑的好塊、壞塊、被映射的塊、存放映射表的塊。
    存放映射表的塊較為特殊,其中映射表不僅描述基本空間中的壞塊映射相關(guān)信息,還描述預(yù)留空間占整個空間的比例等。
    中一張壞塊表存于一個塊,表的信息存于塊中最前面的相關(guān)頁中。表的頭部長度固定,表的整個長度可變,與壞塊數(shù)目相關(guān)。
    壞塊映射表結(jié)構(gòu)描述如下:

    本文引用地址:http://www.czjhyjcfj.com/article/151348.htm

    c.JPG
    其中hdr_crc和tbl_crc用于檢驗表的完整性;rese_start_blk即預(yù)留空間的起始塊號;version用于標(biāo)識該表的版本;num_bad_blk用于描述已發(fā)現(xiàn)的壞塊數(shù),即壞塊映射表項的數(shù)目;map_tbl為記錄壞塊映射表項內(nèi)容的首地址。任何一個映射表項包括壞塊塊號及其映射的好塊的塊號。
    由于使用過程中會產(chǎn)生新的壞塊,映射表中的表項需要增加,從而要更新中的映射表。為了防止系統(tǒng)意外掉電產(chǎn)生映射表不一致問題,采用日志技術(shù)。其中version版本號標(biāo)識映射表的新舊,在更新Flash映射表的同時,版本號遞增,同時Flash舊版本映射表并不立即擦除。只有出現(xiàn)預(yù)留空間不足的情況,擦除舊版本映射表的動作才執(zhí)行。此方案還有利于調(diào)試,查看映射表的更改歷史記錄。
    在出現(xiàn)壞塊Bn后,通常包括兩個動作:寫映射表和標(biāo)識壞塊。標(biāo)識壞塊是通過在塊的00B相應(yīng)字節(jié)寫非0xFF來實現(xiàn)。
    為了支持意外掉電情形,每個版本的映射表必須在Flash里保存兩份,如果發(fā)現(xiàn)最高的版本映射表沒有兩份,或者兩份不一致,則屬于非正常情況,必須重新建立映射表。
    考慮如下情況:寫完映射表Vn,接著標(biāo)識壞塊Bn,此時掉電,則下次系統(tǒng)啟動后,出現(xiàn)映射表的壞快Bn,實際上并沒有被標(biāo)識,導(dǎo)致不一致問題。寫2份Vn可以解決此問題:寫第一份Vn后,標(biāo)識壞塊Bn,接著再寫第二份Vn。這樣即使在標(biāo)識壞塊Bn時掉電,下次系統(tǒng)加電時由于沒有發(fā)現(xiàn)2份版本相同且最高的映射表,從而識別出此非正常情況。
    同時,維護(hù)2份同版本壞塊表可以處理存放映射表的塊突然壞死而導(dǎo)致系統(tǒng)無法啟動的異常,起到備份的作用。
    2.2.1 壞塊映射表的算法
    系統(tǒng)初始化時讀入壞塊表的內(nèi)容,在內(nèi)存中建立所有壞塊的映射信息。由于每次發(fā)現(xiàn)新的壞塊而更新壞塊表時,都會寫入兩個版本一樣的壞塊表,所以在讀入壞塊表時就要檢查兩個表是否有效和一致,可以分為以下情況:
    ①發(fā)現(xiàn)2張最高版本并且有效的壞塊表Vn+1——系統(tǒng)按表Vn+1建立映射;
    ②只發(fā)現(xiàn)1張最高版本并且有效的壞塊表Vn+1,并且有2張有效壞塊表Vn——發(fā)生在上次寫完一個Vn+1后突然掉電,使得第二個表Vn+1未寫入或?qū)懭氩煌暾@時需要恢復(fù),以建立完整映射,恢復(fù)算法如圖3所示。



    關(guān)鍵詞: 設(shè)計 管理 Flash NAND

    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 海城市| 肃北| 裕民县| 金秀| 米林县| 祁东县| 大石桥市| 荔波县| 洞头县| 南丹县| 荣昌县| 互助| 达日县| 称多县| 长汀县| 侯马市| 彭水| 梁山县| 兴仁县| 普兰县| 长泰县| 普洱| 永嘉县| 塔城市| 来宾市| 曲沃县| 福州市| 新兴县| 石林| 揭西县| 金坛市| 龙山县| 安阳市| 含山县| 盘山县| 贵定县| 千阳县| 西乌珠穆沁旗| 黔江区| 凤城市| 青田县|