<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 基于M25P32 SPI Flash的TFFS設計與實(shí)現

基于M25P32 SPI Flash的TFFS設計與實(shí)現

作者: 時(shí)間:2010-06-17 來(lái)源:網(wǎng)絡(luò ) 收藏


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

3.1 FTL的啟動(dòng)過(guò)程分析

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

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

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

(2)檢驗信息合法性

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

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

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

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

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

(5)判斷并關(guān)閉交換page

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

(6)檢查page的完整性

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

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

3.2 的塊映射

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



3.3 垃圾收集過(guò)程

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

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

3.4 FFL創(chuàng )建的DOS

的格式化函數需要調用tffsDevFormat來(lái)格式化,而不需要調用dosFsVolFormat來(lái)格式化;另外,在tffsDevFormat格式化參數中,需要傳人的參數含有FAT個(gè)數參數,其原因是DOS是FTL層創(chuàng )建的,而不是在FTL基礎上創(chuàng )建的,下面是TFFS的整個(gè)格式化過(guò)程:

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

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

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


關(guān)鍵詞: M25P32 Flash TFFS SPI

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>