MC9S12UF32的嵌入式文件系統數據存儲模塊
(2)MC9S12UF32與SD卡之間的數據傳輸
在完成對時(shí)鐘頻率和傳輸數據線(xiàn)寬度的配置之后,通過(guò)發(fā)送相應的讀寫(xiě)命令就可以實(shí)現單片機與SD卡之間的數據傳輸了。在單片機向SD卡寫(xiě)入數據的過(guò)程中,編程者將需要寫(xiě)入的數據寫(xiě)入SDHC模塊的SDATA寄存器(16位)之后,該數據將被轉移至發(fā)送數據FIFO中。與此同時(shí),只要發(fā)送數據FIFO非空,其中的數據就會(huì )不斷地通過(guò)數據線(xiàn)被寫(xiě)入SD卡的相應位置。在單片機從SD卡中讀取數據的過(guò)程中,SD卡中的數據將不斷發(fā)送至接收數據FIFO中。只要接收FIFO非空,單片機就可以不斷地通過(guò)讀SDATA寄存器得到接收數據FIFO中的數據。
2.2 DSl2887實(shí)時(shí)鐘模塊
DSl2887模塊使用數據/地址復用的并行異步總線(xiàn),可以為單片機提供100年以?xún)鹊膶?shí)時(shí)鐘信息(年/月/日/時(shí)/分/秒)。它內部具有石英晶振和鋰電源,首次使用時(shí),需要對該模塊內部的寄存器進(jìn)行相應配置,激活晶振使其進(jìn)入工作狀態(tài)。由于DSl2887內部帶有鋰電源,所以一旦晶振被激活,即使外部掉電,該模塊依然可以保存并提供正確的實(shí)時(shí)鐘信息。
設定DSl2887的時(shí)間和從DSl2887中讀取時(shí)間信息的底層程序比較簡(jiǎn)單,只需參照芯片手冊對寄存器進(jìn)行合理配置。但是,需要特別注意的是,在寫(xiě)時(shí)鐘和讀取時(shí)鐘之前需要鎖存時(shí)鐘信息相關(guān)的buffer,防止在讀寫(xiě)過(guò)程中由于出現時(shí)鐘信息自動(dòng)更新情況而導致的錯誤。系統中,在每次讀寫(xiě)實(shí)時(shí)鐘之前,查詢(xún)DSl2887內部控制寄存器A最高位UIP是否為O,以避免上述錯誤的產(chǎn)生。因為芯片手冊中給出,一旦UIP=O,那么在244μs內實(shí)時(shí)鐘模塊都不會(huì )自動(dòng)更新當前的時(shí)鐘信息,而這段時(shí)間足以讓單片機完成讀寫(xiě)實(shí)時(shí)鐘的過(guò)程。
3 FatFS文件系統的移植與配置
3.1 FatFS軟件包簡(jiǎn)介
采用文件系統,是為了在單片機能夠對SD卡進(jìn)行數據讀寫(xiě)的同時(shí),保證其讀寫(xiě)的數據能夠被大多數通用設備識別。換言之,數據在存儲器內的組織型式,需要遵循一些已有的工業(yè)標準和規范。例如使用FAT文件系統,數據存儲單元的SD卡取下來(lái)后,可以使用任何標準的讀卡器在windows、Linux等PC機上讀出。
當前著(zhù)名的嵌入式文件系統有若干種選擇,比如EFSL(Embedded Filesystem Library)、uC/FS、/TinyFatFS等。這之中EFSL和FatFs都是開(kāi)放源碼的,具有十分詳盡的文檔和函數手冊,除錯更新也十分及時(shí),在本文的設計中我們采用的是FatFS。
FatFS采用使用ANSI C編寫(xiě),具有很好的硬件平臺獨立性,使用者只需要對源程序進(jìn)行簡(jiǎn)單的修改和配置,就可以將其移植到各種系列的單片機上。此外,它的內存開(kāi)銷(xiāo)很小,ROM的占有量在十幾KB的量級,使用者可以根據不同的應用方便的對代碼進(jìn)行裁減。FatFS支持FATl2、FATl6和FAT32,可以建立獨立的緩沖區對多個(gè)文件進(jìn)行讀寫(xiě)。FatFs是一個(gè)不斷更新完善的軟件,大量的相關(guān)信息可以從原作者的主頁(yè)上得到(http://elm-chan.org/fsw/ff/00index_e.html),同時(shí)原作者也做了很多性能測試的工作。
3.2 FatFS的移植
可從FatFS的主頁(yè)上下載得到FatFS R0.07版本。FatFS的主程序包含5個(gè)文件,即diskio.c、diskio.h、ff.c、ff.h和integer.h。其中,diskio.c和diskio.h是與底層硬件I/O相關(guān)的函數;ff.c和ff.h是應用函數,主要涉及FatFS的配置和裁減;而integer.h中定義了FatFS軟件所使用的各種數據類(lèi)型。
移植FatFS的過(guò)程中基本不需要對diskio.h和ff.c進(jìn)行修改。除了核實(shí)integer.h中的數據類(lèi)型定義是否與MC9S12U32數據類(lèi)型相符之外,移植的重點(diǎn)工作在于diskio.c中6個(gè)主要函數的實(shí)現和ff.h中對于文件系統的裁減配置。dikio.c包含的6個(gè)接口函數:disk_initial-ize,disk status,disk ioctl,disk read,disk write和disk_fattime。它們分別實(shí)現存儲介質(zhì)的初始化、讀?。瘜?xiě)入若干個(gè)扇區的數據和獲取實(shí)時(shí)鐘信息的功能。
評論