| 网站首页 | 新闻 | SOPC | FPGA | DSP | ARM | 嵌入式操作系统 | 下载 | 所有产品 | 留言 | 论坛 | 购买指南 | 网络协议 | 驱动设计 | 
您现在的位置: 21嵌入式控制研究室 >> DSP >> 其它 >> 文章正文 用户登录 新用户注册
[组图]FAT檔案系統晶片技術介紹            【字体:
FAT檔案系統晶片技術介紹
作者:司馬余    文章来源:电子技术资源网    点击数:    更新时间:2005-12-18

FAT檔案系統晶片技術介紹
 

司馬余

 

當今記憶卡已經很普遍,它們體積小、容量大,適合應用於MP3播放機和數位相機。想要在記憶卡內管理和組織資料並不容易,需要一套穩定的檔案系統。目前公開的檔案系統標準雖然很多,但「檔案配置表(File allocation Table;FAT)」仍是最常被使用的。FAT由微軟發明的,最早存於DOS作業系統中及微軟的其他作業系統中,甚至連Windows XP也有FAT。為了和PC相容,其他公司也開發了他們的FAT,但也適用於不同的應用,譬如:數位相機。FAT檔案系統有三種版本:FAT12、FAT16、FAT32。
檔案系統的軟體移植成本
要將一套檔案系統移植到一個硬體產品中,可能會耗費很多資金。一套穩定的FAT原始程式碼的價格大約在4,000到10,000美元之間。此外,FAT還需要額外的驅動程式(driver)才行,譬如:硬碟的IDE驅動程式。瞭解儲存裝置、移植、編譯和連結(linking)步驟則是另一個複雜的工作。國外有人估計要將一套檔案系統移植到一個硬體產品中,約需6個月。
 
FAT檔案系統晶片
這種晶片就是將FAT檔案系統事先編譯,並燒錄在32位元的SoC處理器裡內。最早的FAT檔案系統晶片是執行速度僅10MIPS的微控制器,它的功能有許多侷限之處。現在最新的FAT檔案系統晶片的執行速度是過去的10至15倍。
FAT檔案系統晶片所需要的外部元件很少(如附圖一)。對外通訊時,只需要一顆具備UART或SPI介面的微控制器即可。這種晶片一般具有兩種通訊模式:文字模式和訊框(frame)模式。文字模式就是類似DOS的命令列(command line)模式;訊框模式是以資料封包為基礎,比較適合處理複雜的應用。

FAT檔案系統晶片具有下列的常見功能,可應用於數位相機、印表機、數位相簿、MP3播放機、資料記錄器(data logger)、自動控制機器等電子產品:
 · 可以同時開啟16個檔案。
 · 快速啟動,再次連接儲存裝置。
 · 檔案寫入速度快速,可高達70 kbytes/sec。
 · 檔案讀取速度快速,可高達250 kbytes/sec。
 · 串列埠速率可用程式控制。
 · 支援SD、MMC、CF、硬碟。
 · CF和微型硬碟(Micro Drive)在16位元「真實IDE模式」下執行。
 · 透過UART或SPI介面可以將韌體更新。
 · 透過儲存裝置裡面的檔案,也可以將韌體更新。

圖一:FAT檔案系統晶片的應用電路
 

 
開機載入程式
此程式是用來更新FAT檔案系統晶片的韌體。透過微控制器、UART或SPI,可以將韌體送給FAT檔案系統晶片;最簡單的方法是從PC的儲存裝置中下載韌體至此晶片中,亦即,將此儲存裝置與FAT檔案系統晶片電路板連接,並輸入下載命令給開機載入程式。
開機時,FAT檔案系統若送出兩個字元(character):B和L,表示開機載入程式(boot loader)已經可以隨時載入新韌體。當送出R字元時,表示要離開載入程式,並開始執行韌體。如果FAT檔案系統晶片偵測到不正確的韌體時,它會再送出BL字元,這時必須重新下載正確的新韌體給FAT檔案系統晶片。

開機載入程式需要下列幾種命令:
 · R:載入和執行FAT檔案系統晶片的韌體。如果載入程式傳回BL,表示必須重新下載正確的新韌體。
 · EA:清除(erase)記憶體。載入新韌體之前,必須先清除記憶體。
 · LQUx:從儲存裝置中下載韌體檔案。x表示儲存裝置(磁碟)的編號,例如:LQUA可能表示從MMC/SD卡中下載韌體。
 · W:將一個磁區(sector)寫入內部FLASH中。W之後跟著磁區編號,一個磁區有512 bytes的資料。這個作業必須由一個加總核對(checksum)位元組來終結。512個資料位元組相加的和就是此加總核對位元組。
 · M:進入出廠模式。供生產測試用。
 · V:顯示開機載入程式的版本。傳回值是ASCII碼。
 
文字模式下的CF卡
這需要使用終端機軟體來傳收命令和資料。此外,任何具有UART介面的微控制器,都可以發出讀寫檔案或目錄的命令。由於CF卡是在「真實IDE模式」下執行,所以可以連接兩個CF卡,一個是主控IDE,另一個是從屬IDE;或者另一個是硬碟。

此外,因為CF卡是在「真實IDE模式」下執行,所以CF卡並不是熱插拔的。但是當CF卡插入之後,必須立即進行電源重置。使用一個FET電晶體當成CF卡的電源開關可解決這個問題。利用CF卡上的CD接腳,來偵測卡片是否有插入。當CF卡插入之後,就進行電源重置。當FAT檔案系統正在運行,而且有連接上CF卡,此時電源不能中斷。在這裡必須注意的是,FAT檔案系統晶片無法察覺CF卡是否有被拔除,這需要使用偵測程式來達成,並且必須切換到Z碟。當拔除CF卡時,只要沒有輸入命令給檔案系統晶片,CF卡和檔案都應該毫髮無損。

FAT檔案系統可以和三種儲存裝置連接,這三種儲存裝置可以用A、B、C來代表:A表示MMC或SD,B表示IDE或CF(主控),C表示IDE或CF(從屬)。此外,Z表示「空碟(NULL drive)」。

在開機時,FAT檔案系統會先送出BL命令,之後是R,最後停留在Z:\>處。Z:\>是輸入命令的地方,它是使用「空碟」。不過,FAT檔案系統不見得就等於DOS,它的命令可以類似DOS一樣,以方便學習。為了加快處理速度,它的命令長度僅兩個字元,例如:CD(change directory)、MD(make directory)、RD(remove directory)……..等。

若要切換至其他儲存裝置,例如:要使用從屬硬碟或從屬CF卡,只要輸入C:,並按下確認鍵(enter)即可。
 
文字模式下的目錄
FAT檔案系統晶片除支援檔案以外,也支援目錄(folder)。當使用目錄時,命令提示列會顯示出目前所在的目錄名稱,例如:A:\FOLDER1\ FOLDER2>。利用MD命令可以產生一個新目錄。

樹狀目錄的最大長度是256 bytes,這可以容納超過20個目錄和子目錄。如果樹狀目錄的長度超過256個字元,FAT檔案系統將不會顯示出完整的目錄名稱,中間會以問號(?)取代,在?後面會跟著一個數字,表示還有多少個子目錄無法顯示出來。例如:A:\FOLDER1\ FOLDER2\…..\ FOLDER 7\ FOLDER?4>,最後有4個子目錄無法顯示出來。
 
文字模式下的檔案
檔案必須先被開啟之後,才可以被讀取、寫入或附加(append)。寫入和附加的差別在於:前者會新增一個新檔案;後者會先使用舊檔案,若檔案不存在,則新增一個。下列是一些操作範例和說明:

 ·A:/>MD LOG_DATA 產生新目錄
 ·A:/>CD LOG_DATA 改變目錄
 ·A:/ LOG_DAT/>OF W #1 BIT.LOG 產生新檔案
 · A:/ LOG_DAT/>OF W #2 BYTE.LOG 產生新檔案
 ·A:/ LOG_DAT/>WF #1 7 對編號1的檔案寫入7個bytes
 ·“1011001” 寫入資料至BIT.LOG中
 ·A:/ LOG_DAT/>WF #2 A 對編號2的檔案寫入10個bytes
 ·“123456789A” 寫入資料至BYTE.LOG中
 · A:/ LOG_DAT/>WF #1 7 對編號1的檔案再寫入7個bytes
 ·“0100110” 寫入資料至BIT.LOG中
 · A:/ LOG_DAT/> 等待處理下一個命令

必須注意的是,輸入的檔案名稱不能包含它的路徑名稱,必須是純粹的檔案名稱。檔案名稱的命名法則與DOS一樣,檔案名稱的長度不能大於8 bytes,附檔名的長度不能大於3 bytes。此外,有些FAT檔案系統晶片只允許輸入大寫的檔案名稱。
 
訊框模式下的命令結構
訊框模式是FAT檔案系統晶片特有的功能,也是最「華麗」的功能。它的命令是屬於資料結構,使用「小結尾(little endian)」或「大結尾(big endian)」。

開機時,FAT檔案系統晶片是處於預設的文字模式中,但當輸入FM命令之後,即可切換到訊框模式。

訊框是一個簡易的通訊協定,它是由1 byte的起始欄、0至31 bytes的資料欄、和1 byte的查核欄構成。起始欄區分為:前3位元代表「作業」,後5位元代表資料的長度。訊框模式具有8種作業,如附圖二所示。底下介紹這些作業的功能。

作業-0和作業-1訊框是從FAT檔案系統晶片送至主機(host)。

作業-0:NACK
表示之前的作業並沒有成功完成。在大多數的情況下,NACK訊框的資料欄內只存在錯誤碼,所以它的資料欄位長度只有1 byte。

作業-1:ACK
表示之前的作業已經成功完成。資料長度是0至31 bytes,沒有資料的ACK稱為「簡單的ACK」。

底下的作業都是從主機送至FAT檔案系統晶片。

作業-2:資訊請求
等主機發出此訊框後,FAT檔案系統將會傳回ACK和兩個bytes,第一個byte表示一個封包的長度大小,這個大小是FAT檔案系統晶片可以接受的。第二個byte表示FAT檔案系統軟體的識別編號。
 

圖二:訊框模式的8種功能

 


作業-4:命令集
這些命令後面必須緊跟著許多資料。資料欄內的第一個byte就代表命令。這是主機要求FAT檔案系統晶片必須執行的指令。這些命令與DOS命令類似(如附圖三)。例如:0x01命令的訊框格式如下:
 

FAT檔案系統命令

該命令使用的資料

0x01

目錄名稱

 

要回到樹狀結構中的前一個目錄,目錄名稱必須是「..」。亦即,CD ..的意思。若要回到根目錄,目錄名稱必須是「\」。亦即,CD \的意思。
傳回的訊框可能是ACK,表示作業成功;也可能是NACK和錯誤碼,表示作業失敗及其原因。

 

圖三:FAT檔案系統的命令集

 

0x0D命令可以取得儲存裝置的容量大小,以及目前可用的空間大小。單位是磁區(sector)。

作業-5:讀取檔案
在它的資料欄內,具有4 bytes的大小表示欲讀取的檔案大小,和1 byte的檔案編號,所以資料欄位的總長度是5 bytes。讀取的程序是:
1. 主機先發出此命令。
2. 如果FAT檔案系統成功收到此命令,FAT檔案系統晶片就會傳回ACK和欲讀取的檔案大小。之後,FAT檔案系統才會開始送出該檔案的內容。
3. 如果此命令傳送失敗,FAT檔案系統會傳回NACK和錯誤碼。
4. 該檔案傳送完畢之後,FAT檔案系統會傳回一個簡單的ACK訊框。否則,在讀出的過程中,FAT檔案系統會傳回錯誤碼,然後改傳送0xFF用來充填剩餘的空間。之後,發出NACK和4 bytes的大小用來表示它從該檔案讀出的資料大小,以及1 byte的錯誤碼。

讀出/寫入作業完成一次之後,並沒有必要將FAT檔案系統停止。因為可能還要繼續執行讀寫作業。每次讀寫的檔案大小建議使用64 bytes,如果讀取速度是重要的考量則可以使用更大的大小。

作業-6:寫入檔案
它的資料欄位格式、大小與讀取作業一樣。檔案必須先以寫入模式或附加模式開啟。寫入的程序是:
1. 如果FAT檔案系統晶片接受這個命令請求,它就會傳回ACK。否則,傳回NACK。
2. 當FAT檔案系統晶片收到這個命令之後,就透過串列埠開啟資料流,來接收該檔案的資料。FAT檔案系統晶片會將接收到的檔案資料一筆一筆地寫入磁區中,檔案指標和檔案大小會逐筆增加。
3. 當全部的資料被成功地寫入之後,FAT檔案系統晶片會傳回ACK和已經寫入的檔案大小。
4. 如果在寫入的過程中發生錯誤,FAT檔案系統會傳回NACK和錯誤碼,以及4 bytes的大小用來表示它從該檔案接受到的資料大小。
請注意,若要關閉檔案必須使用關閉(CLOSE)命令,以避免資料遺失。

作業-7:切換儲存裝置
使用這個命令可以切換至不同的儲存裝置。它的資料欄位大小是1 byte。ASCII碼0x41代表A碟(MMC或SD)、0x42代表B碟(主控IDE或CF)、0x43代表C碟(從屬IDE或CF)、0x5A代表Z碟。預設值是0x5A。

 
FAT檔案系統結合USB主控器
FAT檔案系統結合一顆USB主控器晶片(或全部整合成一顆SoC),可以讓此系統外接許多種USB週邊裝置,例如:大拇哥或整合MP3播放機的USB隨身碟、USB硬碟、USB鍵盤、USB滑鼠、USB搖桿或設計成RS232轉USB的印表機伺服器。不過,在功能上只有大拇哥或整合MP3播放機的USB隨身碟、USB硬碟會用到FAT檔案系統,其他裝置只是利用它來轉送單純的數據資料而已。當然還可以加入其他類別的USB裝置,然而可能會增加設計成本。

要將USB主控器晶片加入此系統中,會遇到的最大困難是USB的主控軟體堆疊(USB host stack)成本很昂貴,若要自行開發,即使利用Linux程式碼,也會在除錯與驗證工作上耗費很多時間。況且在市場行銷上也會和現有的同類型產品激烈競爭。
 
結語
國內一直有業者想開發FAT檔案系統晶片,但是至今都沒有成功,原因出自於軟體技術太複雜。若以產品特性來區分,小系統、特殊單晶片、小應用的利潤似乎要比主流的大系統、系統級單晶片(SoC)、複雜應用來得高。本文所介紹的FAT檔案系統晶片就是一個明顯的例證。
文章录入:fengfeiyi    责任编辑:fengfeiyi 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)