摘要:隨著嵌入式技術(shù)的發(fā)展,越來越多的系統(tǒng)需要具備大容量數(shù)據(jù)存儲、傳輸和分析的功能,對于數(shù)據(jù)靈活性和通用性的要求也隨之提高。本文基于MC9S12UF32設(shè)計了一款使用FAT文件系統(tǒng)對數(shù)據(jù)進行管理的數(shù)據(jù)存儲模塊。詳細介紹了該模塊的軟、硬件構(gòu)架,并給出了開放源代碼的文件系統(tǒng)FatFs軟件包的移植與使用方法。
關(guān)鍵詞:MC9S12UF32;FatFS;FAT文件系統(tǒng)
引言
隨著信息技術(shù)的發(fā)展,嵌入式系統(tǒng)簡單地對存儲介質(zhì)按地址、字節(jié)進行讀寫的方式已經(jīng)不能滿足實際應(yīng)用的需求,利用文件系統(tǒng)對存儲介質(zhì)進行管理成為嵌入式系統(tǒng)的一個發(fā)展方向。雖然目前存在很多版本的文件系統(tǒng),但windows的廣泛應(yīng)用使得FAT文件系統(tǒng)仍然是最通用的文件系統(tǒng)之一。本文中基于MC9S12UF32單片機,結(jié)合開源文件系統(tǒng)FatFS,設(shè)計實現(xiàn)了使用FAT文件系統(tǒng)的大容量數(shù)據(jù)存儲模塊。
1 系統(tǒng)結(jié)構(gòu)
數(shù)據(jù)存儲系統(tǒng)框架如圖1所示。該數(shù)據(jù)存儲模塊以Freescale公司的MC9S12UF32為核心,串行通信接口SCI接收到的數(shù)據(jù)可以直接通過單片機以FAT文件的形式存儲在micro SD卡中。用戶程序可以通過編程控制單片機,直接對micro SD卡中的任意文件進行讀寫,實現(xiàn)存儲數(shù)據(jù)。由于實現(xiàn)了FAT文件系統(tǒng),用戶也可以通過單片機內(nèi)置的USB接口將本數(shù)據(jù)模塊識別為U盤,用PC機進行讀寫操作。此外,模塊中的SD卡也可以取出,使用標準的讀卡器可在任何PC機上讀出。
2 硬件結(jié)構(gòu)及底層函數(shù)的編寫
本文所介紹的數(shù)據(jù)存儲插件由MC9S12UF32、DSl2887實時鐘模塊、micro SD卡、串行通信接口以及USB接口5部分組成。實時時鐘,可以為數(shù)據(jù)存儲模塊的文件系統(tǒng)提供正確的時間戳信息,在精簡的系統(tǒng)設(shè)計中,這個部分則可以省略。
2.1 MC9S12UF32單片機
Freescale公司生產(chǎn)的這款16位單片機具有3.5 KBRAM和32 KB Flash EEPROM。它最大的特點在于擁有USB2.O接口、ATA5接口以及SD/MMC、SmartMedia、MemoryStick等多種存儲卡接口。本文所介紹的數(shù)據(jù)存儲插件采用MC9S12UF32單片機內(nèi)部集成的SD主控制器模塊(SDHC)實現(xiàn)micro SD卡的底層讀寫。
(1)SDHC模塊
SDl.O規(guī)范協(xié)議中定義了對SD卡的兩種訪問模式:SD模式和SPI模式。使用SDHC(Secured Digital cardHost Controller)模塊對SD卡讀寫采用了SD模式。該模塊將SD總線轉(zhuǎn)換為MC9S12UF32內(nèi)部的IPBus總線或者IQUE總線,使用者只需要對SDHC模塊相關(guān)的寄存器進行配置,就可以實現(xiàn)向SD卡發(fā)送各種命令和讀寫數(shù)據(jù)的功能。SD卡與SDHC的連接如圖2所示。
MC9S12UF32內(nèi)部集成的SDHC模塊支持SD卡1.O版本的物理層協(xié)議,所以本系統(tǒng)使用標準microSD卡(而非SDHC卡),其存儲容量最大為2 GB。這樣的存儲容量已經(jīng)完全可以滿足大多數(shù)嵌入式應(yīng)用的需求。
(2)MC9S12UF32與SD卡之間的數(shù)據(jù)傳輸
在完成對時鐘頻率和傳輸數(shù)據(jù)線寬度的配置之后,通過發(fā)送相應(yīng)的讀寫命令就可以實現(xiàn)單片機與SD卡之間的數(shù)據(jù)傳輸了。在單片機向SD卡寫入數(shù)據(jù)的過程中,編程者將需要寫入的數(shù)據(jù)寫入SDHC模塊的SDATA寄存器(16位)之后,該數(shù)據(jù)將被轉(zhuǎn)移至發(fā)送數(shù)據(jù)FIFO中。與此同時,只要發(fā)送數(shù)據(jù)FIFO非空,其中的數(shù)據(jù)就會不斷地通過數(shù)據(jù)線被寫入SD卡的相應(yīng)位置。在單片機從SD卡中讀取數(shù)據(jù)的過程中,SD卡中的數(shù)據(jù)將不斷發(fā)送至接收數(shù)據(jù)FIFO中。只要接收FIFO非空,單片機就可以不斷地通過讀SDATA寄存器得到接收數(shù)據(jù)FIFO中的數(shù)據(jù)。
2.2 DSl2887實時鐘模塊
DSl2887模塊使用數(shù)據(jù)/地址復用的并行異步總線,可以為單片機提供100年以內(nèi)的實時鐘信息(年/月/日/時/分/秒)。它內(nèi)部具有石英晶振和鋰電源,首次使用時,需要對該模塊內(nèi)部的寄存器進行相應(yīng)配置,激活晶振使其進入工作狀態(tài)。由于DSl2887內(nèi)部帶有鋰電源,所以一旦晶振被激活,即使外部掉電,該模塊依然可以保存并提供正確的實時鐘信息。
作者:韓曉雪,曾 鳴,邵貝貝 清華大學 來源:國外電子元器件