新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > NAND Flash的壞塊管理設計

        NAND Flash的壞塊管理設計

        作者: 時間:2010-11-15 來源:網絡 收藏

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

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

        c.JPG
        其中hdr_crc和tbl_crc用于檢驗表的完整性;rese_start_blk即預留空間的起始塊號;version用于標識該表的版本;num_bad_blk用于描述已發現的壞塊數,即壞塊映射表項的數目;map_tbl為記錄壞塊映射表項內容的首地址。任何一個映射表項包括壞塊塊號及其映射的好塊的塊號。
        由于使用過程中會產生新的壞塊,映射表中的表項需要增加,從而要更新中的映射表。為了防止系統意外掉電產生映射表不一致問題,采用日志技術。其中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所示。



        關鍵詞: 設計 管理 Flash NAND

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 汉寿县| 北票市| 浦城县| 扬州市| 灵台县| 资兴市| 萝北县| 罗山县| 雷山县| 秀山| 广灵县| 民权县| 田东县| 安顺市| 泾川县| 大姚县| 湛江市| 信宜市| 萍乡市| 岱山县| 临安市| 四子王旗| 河北省| 小金县| 浠水县| 文水县| 米易县| 富阳市| 麻栗坡县| 巴南区| 七台河市| 来宾市| 偏关县| 靖安县| 秦安县| 铁岭市| 德兴市| 博白县| 都江堰市| 宜黄县| 铅山县|