新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > 基于M25P32 SPI Flash的TFFS設計與實現

        基于M25P32 SPI Flash的TFFS設計與實現

        作者: 時間:2010-06-17 來源:網絡 收藏


        為了實現DOS層從邏輯上看扇區是連續的,可隨時對任意bit讀寫操作,FTL必須提供對芯片的管理,包括向上層(DOS層)提供可以任意讀寫的操作接口,向下對的擦除、寫入、讀取統一管理,同時還必須提供磨損均衡,以防止一個擦除塊提前損壞。

        3.1 FTL的啟動過程分析

        在我們調用函數tffsDevCreate創建文件系統時,會以參數FL_MOUNT_VOLUME調用函數flcall→mountvolume→flmount→mountFTL,函數mountFTL是FTL層的加載函數人口,處理過程首先是初始化FTL,然后就可按下列步驟進行:

        (1)查找第一個合法的unit頭信息

        合法性的判斷依據是unit header頭上的標志CISF..FTL100和部分頭部的flag信息,由于bsp已把FS的相關信息注冊到FTL的數據結構中,所以,FTL層可以找到第一塊unit,并可以向后查,直到找到合法的unit為止。

        (2)檢驗信息合法性

        將所有有用的信息都讀出到內部數據結構中后,即可檢驗信息合法性。由于unit header中的Unit ID和擦除次數都相同,所以整個文件系統的共用信息都可以從首先找到的頭中讀出來。

        (3)給Mount每一個unit建立page表

        這是mount最重要的過程,對每個unit調用mountunit()函數,并在mountunit()函數中首先判斷,如果是非法unit,則作為交換unit,然后對每個BAM選項進行處理,并對垃圾BAM、空閑BAM進行統計,如果是緩沖的BAM數據和交換page的VBM,則將此page的邏輯扇區信息記錄到內存的page表中,以便后續映射訪問查詢使用,而對于非緩沖的BAM數據,則不作處理,另外,對于交換page的VBM,則進行記錄。考慮到上述過程,可見其系統中的page VBM和緩沖的數據BAM分布在各個unit的各個角落,需要將所有的VBM和緩沖數據BAM收集起來建立整個交換page表,這是FTL標準層設計時就要決定的。

        (4)檢驗邏輯unit的完整性

        當所有的unit都mount完成后,每個邏輯unit都應存在,否則mount失敗。

        (5)判斷并關閉交換page

        如果系統中已存在交換page,則對系統中存在的交換page進行關閉操作,以便后面檢查page的完整性。

        (6)檢查page的完整性

        系統中的page表必須是完整的,這個表中包含有緩沖的數據BAM映射信息和更重要的page映射信息,因此,缺少任何一個,都將導致DOS的虛擬扇區無法映射到相應的邏輯扇區。

        從上述過程可見,整個mount過程是將文件系統信息讀入內存數據結構并檢驗的過程,這個Mount PTL過程完成后,mountvolume ()函數即將隱蔽的0扇區和DOS的啟動扇區信息讀入內存數據結構,這樣,DOS就可以訪問FTL底層扇區了。

        3.2 的塊映射

        圖3中,FTL層將DOS上連續的扇區映射到上某個R/W block塊中,同時在某個位置記錄一個映射表(稱為MAP表),該表中記錄了DOS的扇區映射到Flash中的哪個block,當DOS要進行讀操作時,FTL首先查詢這個MAP,以獲得映射信息,然后讀取相應的block信息并返回給DOS,從而實現讀映射。當DOS需要寫入操作時,可能存在將bit0修改為1的情況,于是FTL層將申請一個新的block塊,并將新信息寫入,然后修改map信息,記錄這個DOS扇區已經重新映射了,從而實現寫映射。所以,從邏輯上看,FTL層就實現了DOS扇區的映射和FLASH的寫入管理。



        3.3 垃圾收集過程

        FTL格式化后,可用扇區將被不斷申請使用,原有扇區被不斷的廢棄,系統中可用的free扇區越來越少,但這并不是由于上層DOS真的使用了這么多扇區,而是FTL為了方便管理、為了不需要每次擦除一塊而付出的管理代價。所以,當系統中的可用扇區少于用戶要申請寫入的扇區時,FTL層就必須解決這些垃圾問題,這個過程在FTL中稱為垃圾回收(garbage collect)。

        當FTL中的可用sector小于用戶要申請的扇區時,系統將啟動垃圾收集,但系統中有很多個unit,到底收集哪個unit呢?FTL會考慮磨損均衡,它將采用一個偽隨機的算法來決定收集策略:即用4/256的幾率選擇磨損情況少的塊來收集;252/256的幾率則根據垃圾最多為第一條件,當垃圾一樣時,判斷磨損次數小的優先選擇。

        3.4 FFL創建的DOS

        的格式化函數需要調用tffsDevFormat來格式化,而不需要調用dosFsVolFormat來格式化;另外,在tffsDevFormat格式化參數中,需要傳人的參數含有FAT個數參數,其原因是DOS是FTL層創建的,而不是在FTL基礎上創建的,下面是TFFS的整個格式化過程:

        tffsDevFormat→flcall(FL_FORMAT_VOLUME)→formatVolume→Format→formatFTL;

        其中,函數formatFTL是執行FTL層格式化的操作函數,操作時,首先根據格式化參數和BSP參數對內部數據結構初始化;然后再對每個unit進行格式化,在擦除后,即可寫入unitheader信息和控制BAM值;之后寫入unit No;最后申請每個page的空間;

        上述formatFTL函數執行完以后,FTL就已經準備好,可以接受上層的扇區讀寫函數了(當然還沒有內容可以讀寫)。


        關鍵詞: M25P32 Flash TFFS SPI

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 文成县| 永嘉县| 马龙县| 陇南市| 临海市| 巴彦淖尔市| 宁夏| 昭苏县| 茶陵县| 惠水县| 鄂尔多斯市| 北碚区| 呈贡县| 台南县| 永丰县| 馆陶县| 区。| 饶平县| 闽侯县| 石景山区| 故城县| 左贡县| 西平县| 读书| 崇阳县| 清苑县| 淮滨县| 皮山县| 会昌县| 宣威市| 承德县| 明溪县| 余庆县| 岢岚县| 文登市| 遵义县| 屏东县| 天津市| 海淀区| 鸡泽县| 墨江|