基于μcosII的嵌入式文件系統(tǒng)的設計與實現
1 前言
近年來隨著數碼相機、掃描儀、攝像手機等數碼設備的興起,數字照片成為人們生活中不可缺少的一部分。數碼相框作為一種新興的顯示媒介,以它大容量的存儲相片的能力,良好的顯示效果和多樣的功能正越來越迅速的走進千家萬戶。
隨著國家廣電總局推行電視數字化的進程,數字電視全面鋪開。本項目的開發(fā)正是基于這兩種考慮,開發(fā)了一種將數碼相框和數字電視相融合的產品。
在這個產品的開發(fā)過程中,一個關鍵性的問題就是為MB86H20B數字電視平臺擴展外部存儲的功能。本文中提到的基于μcosII的嵌入式文件系統(tǒng)的解決方案較好的解決了這一問題。
2 嵌入式文件系統(tǒng)硬件連接圖
ISP1160與MB86H20B(簡稱20B)之間的硬件連接圖如圖1,ISP的異步傳輸端口與20B上的UPI(Universal Peripheral InteRFace)接口相連,這是一種可以配置模式和時序的接口。在此采用了IDE模式,按照ISP1160的時序要求對其進行了配置。ISP1160 在20B上僅僅映射2個IO地址,一個為數據端口,一個為命令端口,由A0的高低電平區(qū)分[3]。
圖1 Decoder與USB Host Controller連接原理圖
ISP1160上的INT引腳連接到20B外部中斷引腳IRQ1。當中斷發(fā)生時,20B進入中斷服務程序,讀取ISP1160狀態(tài)寄存器。這就構成了ISP1160到20B的數據反饋通路。
3 在U盤上構建FAT32文件系統(tǒng)
FAT32文件系統(tǒng)由三部分構成, 這三部分在邏輯盤上的結構如圖2[1]所示。
圖2 FAT32文件系統(tǒng)結構示意圖
DBR(DOS Boot Record)包含BIOS參數塊和DOS引導程序。在BIOS參數塊中包含了每簇扇區(qū)數,保留扇區(qū)數,隱含扇區(qū)數,每FAT扇區(qū)數,根目錄FDT在DATA區(qū)的起始位置等重要信息。
DATA區(qū)是從U盤根目錄FDT(FAT Directory Table)開始的,在根目錄下用戶可以再創(chuàng)建不同的子目錄或文件,根目錄以及各個子目錄都有自己的FDT ,FDT 定義了文件名、文件大小以及文件存放的起始簇號。通過各子目錄和文件的FDT構成的樹形文件索引結構完成對文件的定位。
物理設備的最小存儲單位是Sector(扇區(qū)),在DATA區(qū)中最小的存儲單位是Cluster(簇),在U盤的flash上一般由8個Section構成一個Cluster。
由于一個文件往往在DATA區(qū)上占用多個簇,FAT32文件系統(tǒng)采用簇鏈的方式索引一個文件所占用的簇鏈。FAT(File Allocate Table)記錄了DATA區(qū)哪些簇被使用,當前簇的后繼簇簇號[1]。
4 FAT文件系統(tǒng)的實現
本文件系統(tǒng)的實現,可以分為USB協(xié)議棧和FAT32文件系統(tǒng)為主的四大部分[4]。層次結構關系如圖3所示。
圖3 軟件結構模型
4.1 協(xié)議層的實現
大容量類設備都可能使用 RBC、SFF-8020i/MMC-2、QIC-157、UFI、SFF-8070i和 SCSI 等 6個命令集。嚴格來說,大容量類主機端的驅動都應全部支持以上指令集,但實際上常見的大容量設備都使用 SCSI 和 UFI 指令集。SCSI 和 UFI 指令集中常用的命令在大容量類協(xié)議中都可兼容。
U盤的整個文件系統(tǒng)在主機軟件的協(xié)議層抽象為UFI(USB Floppy Interface)設備,通過含有UFI指令的命令塊(Command Block)與U盤通信[5]。這層完成的功能有將文件系統(tǒng)中的操作翻譯為UFI指令,UFI指令打包成命令塊及其對應的逆向操作。
表1 傳輸層API函數實現
4.2 傳輸層的實現
傳輸處理層用于處理命令塊,包括主機傳輸命令塊到大容量類設備、主機與大容量設備之間的數據傳輸和主機接收命令塊處理狀態(tài)。大容量類設備傳輸協(xié)議分為Bulk-Only協(xié)議和 CBI-Only協(xié)議。該層為命令層提供了命令塊處理函數的統(tǒng)一接口,使命令層不需理會當前大容量類設備的傳輸協(xié)議。
傳輸層接收由協(xié)議層包裝好的命令塊,根據已注冊的Mass Storage Class設備的信息,采用單批量(Bulk Only)傳輸模式從批量輸出端點(Bulk Data Out Endpoint)傳輸出去。類似,也可以從批量輸入端點(Bulk Data In Endpoint)接收數據,向上傳遞到協(xié)議層解析。
4.3 USB主機協(xié)議棧的實現
在U盤連接到USB電纜上后首先為ISP1160注冊一個Root Hub Class,再為U盤注冊一個Mass Storage Class的設備。接著,為了檢測U盤的連接,啟動查詢當前狀態(tài)的Host_Serve的任務。當ISP1160 與U盤連接后,ISP1160通過中斷通知20B,20B進入中斷服務程序改變當前狀態(tài)。在Host_Serve任務中檢測到狀態(tài)的改變,開始USB協(xié)議的通信。至此,U盤(USB Mass Storage設備)注冊完成(大容量類相關代碼見程序清單3.1,3.2,表2)。由此以后,FAT32文件系統(tǒng)所要對U盤進行的操作都經過Bulk- Only傳輸完成。
程序清單3.1 大容量設備描述信息數據結構
程序清單2.2 邏輯單元描述信息數據結構
實現的大容量類的API函數如表2所示。
表2 大容量類API函數列表
4.4 此文件系統(tǒng)在μcosII中的移植
FAT32文件系統(tǒng)來源于開源代碼,移植的主要工作是替換消息通訊函數。這些工作完成后,將對File的各種操作包裝成一個OSFile任務,接收應用程序發(fā)出的文件操作要求。文件系統(tǒng)的整體結構圖如圖4所示。
圖4 文件系統(tǒng)層次結構[2]
5 性能測試
基于已經實現的方案,進行了詳細的測試。首先,對目錄的創(chuàng)建,目錄的刪除,進入目錄,退出目錄,文件的創(chuàng)建,文件的刪除,文件的讀取,文件的寫入等基本功能進行了測試,均能圓滿完成以上功能。
接下來對比較關鍵的文件讀取功能進行了詳盡的測試。測試所得到的結果完全達到了對數字相片讀取的要求。
表3 不同文件的讀取時間
6 結束語
基于20B的UPI接口實現USB的傳輸,之前沒有可以參考的范例,完全是出于對硬件時序和文件系統(tǒng)的理解設計了整個解決方案。此方案解決了20B芯片上外掛U盤的問題, 從而使20B芯片可以應用于數字相框(Digital Video Frame)領域。
為了讓文件系統(tǒng)能夠更好的適應嵌入式應用的需求,可以對文件系統(tǒng)做出一些優(yōu)化,盡量做到對flash的寫平衡,提高文件的讀取速度,減少文件系統(tǒng)對CPU和內存資源的占用.