基于FLASH星載存儲器的高效管理研究
為了提高存儲速率,引入并行擴展和流水線操作的概念,將存儲陣列劃分為流水線組,每組多片芯片構成并行結構。并行擴展的概念較為直接,由于單片FLASH 芯片的數據總線 位寬較小,因而將多片芯片的IO 端口進行并行擴展,而所有控制信號直接連接在一起,這 樣每組芯片可以看作一個整體進行控制,實現了數據的并行操作。并行N 片的寬總線結構數據處理能力可以達到單片芯片的N 倍。另外由于FLASH 芯片為串行操作接口,數據的寫入需要經過數據加載、芯片自動編程、狀態(tài)讀取的過程才能執(zhí)行下一次的寫入操作,因而寫入性能較差??紤]到芯片自動編程過程的時間較長且不需要外部干預,可以借鑒流水線的設計思想,利用這段空閑時間對其他組芯片進行控制,提高數據吞吐率。流水線操作示意圖如 圖2 所示。假設數據加載時間為Tload,芯片自動編程時間為Tprog,狀態(tài)讀取時間為 Tcheck,采用M 級流水線完成一次流水操作的總時間不超過(Tload+Tcheck)*M+Tprog, 相比不采用流水線操作縮短了(M-1)*Tprog 時間,提高了數據吞吐率。具體的總線寬度以及 流水線級數設置可以根據具體應用需求確定。
最后,為了提高數據的可靠性,在 FLASH 控制模塊中增加數據檢錯糾錯處理模塊。
圖 2 流水線操作示意圖
3. YAFFS2 分析與改進
YAFFS2 具有優(yōu)良的文件管理特性,但是畢竟YAFFS2 是針對商用領域設計的文件系統(tǒng),對于空間應用并沒有特殊考慮,直接應用有其局限性。本節(jié)針對空間存儲器的特點,對 YAFFS2 不適合空間應用的方面提出具體的修改方案,使得修改后的文件系統(tǒng)能夠滿足空間 數據存儲的需求。
3.1 硬件結構適應性
YAFFS2 文件系統(tǒng)只是針對單片FLASH 設計的系統(tǒng),對于FLASH 存儲陣列的結構沒有 考慮,因而不適宜于直接在陣列結構上面使用,需要進行修改。
并行結構的處理比較簡單,將同組內的所有芯片當作整體統(tǒng)一進行處理即可。這樣的設計簡單,但也會帶來一些額外的問題需要注意。比如當某一片芯片出現壞塊的時候,組內其他芯片相應塊也需標記為壞塊,造成一定的存儲空間浪費。另外讀取該組狀態(tài)的時候需要同時兼顧并行多片的狀態(tài)。這些問題需要在文件系統(tǒng)設計中進行相應的修改。 流水線的設計較為復雜。由于YAFFS2 的存儲區(qū)管理是基于單片芯片的,因而在多級流 水線結構中,每級流水線需要單獨維護自己的存儲區(qū),比如存儲塊的分配、壞塊的標記等。數據寫入的時候首先需要選擇流水線級,在流水線級內部再采用現有的存儲區(qū)管理方式。
3.2 壞塊管理策略
FLASH 壞塊的類型可以分為初始壞塊和使用時產生壞塊兩類,不同芯片廠家采用不同 的方式標示初始壞塊,用戶可以根據具體的芯片手冊進行壞塊識別。三星NAND FLASH 通 過在每塊的第一頁或第二頁的第2048 字節(jié)寫入非0xFF 來標示初始壞塊,新產生的壞塊則 需要用戶自己進行記錄。
壞塊管理的首要任務就是對壞塊進行識別和標記,并且對于壞塊盡量不再進行擦寫操 作。YAFFS2 文件系統(tǒng)要求底層FLASH 驅動提供壞塊識別和標記的函數,文件系統(tǒng)對這部分 功能并沒有實現,也沒有要求具體的實現方式。考慮到存儲區(qū)的并行結構特點,本方案對新產生的壞塊也采用在該塊第一頁的第2048 字節(jié)寫入非0xFF 的方法進行標記。由于寫入或者擦除是對組內并行多片芯片同時進行操作,而這些芯片同時發(fā)生壞塊的概率可以認為接近于0,因而對于壞塊的標記總能夠成功寫入某個芯片。該方法將新產生壞塊和原始壞塊進行了統(tǒng)一,設計簡單并且不需要額外的存儲空間來存儲壞塊表,缺點是對于新產生的壞塊還有 一次寫入操作。
評論