999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

MC9S12UF32的嵌入式文件系統數據存儲模塊

2010-06-22 08:17:56韓曉雪曾鳴邵貝貝
單片機與嵌入式系統應用 2010年2期
關鍵詞:嵌入式單片機

韓曉雪,曾鳴,邵貝貝

(清華大學 工程物理系,北京100084)

引 言

隨著信息技術的發展,嵌入式系統簡單地對存儲介質按地址、字節進行讀寫的方式已經不能滿足實際應用的需求,利用文件系統對存儲介質進行管理成為嵌入式系統的一個發展方向。雖然目前存在很多版本的文件系統,但Windows的廣泛應用使得FAT文件系統仍然是最通用的文件系統之一。本文中基于MC9S12UF32單片機,結合開源文件系統FatFS,設計實現了使用FAT文件系統的大容量數據存儲模塊。

1 系統結構

數據存儲系統框架如圖1所示。該數據存儲模塊以Freescale公司的 MC9S12UF32為核心,串行通信接口SCI接收到的數據可以直接通過單片機以FAT文件的形式存儲在micro SD卡中。用戶程序可以通過編程控制單片機,直接對micro SD卡中的任意文件進行讀寫,實現存儲數據。由于實現了FAT文件系統,用戶也可以通過單片機內置的USB接口將本數據模塊識別為U盤,用 PC機進行讀寫操作。此外,模塊中的SD卡也可以取出,使用標準的讀卡器可在任何PC機上讀出。

2 硬件結構及底層函數的編寫

本文所介紹的數據存儲插件由 MC9S12UF32、DS12887實時鐘模塊、micro SD卡、串行通信接口以及USB接口5部分組成。實時時鐘,可以為數據存儲模塊的文件系統提供正確的時間戳信息,在精簡的系統設計中,這個部分則可以省略。

圖1 系統框架

2.1 MC9S12UF32單片機

Freescale公司生產的這款16位單片機具有3.5 KB RAM和32 KB Flash EEPROM。它最大的特點在于擁有USB2.0接口、ATA5接口以及 SD/MMC、SmartMedia、MemoryStick等多種存儲卡接口。本文所介紹的數據存儲插件采用MC9S12UF32單片機內部集成的SD主控制器模塊(SDHC)實現micro SD卡的底層讀寫。

(1)SDHC模塊

SD1.0規范協議中定義了對SD卡的兩種訪問模式:SD模式和SPI模式。使用SDHC(Secured Digital card Host Controller)模塊對SD卡讀寫采用了SD模式。該模塊將SD總線轉換為MC9S12UF32內部的IPBus總線或者IQUE總線,使用者只需要對SDHC模塊相關的寄存器進行配置,就可以實現向SD卡發送各種命令和讀寫數據的功能。SD卡與SDHC的連接如圖2所示。MC9S12UF32內部集成的 SDHC模塊支持SD卡1.0版本的物理層協議,所以本系統使用標準 micro SD卡(而非SDHC卡),其存儲容量最大為2G。這樣的存儲容量已經完全可以滿足大多數嵌入式應用的需求。

(2)MC9S12UF32與SD卡之間的數據傳輸

在完成對時鐘頻率和傳輸數據線寬度的配置之后,通過發送相應的讀寫命令就可以實現單片機與SD卡之間的數據傳輸了。在單片機向SD卡寫入數據的過程中,編程者將需要寫入的數據寫入SDHC模塊的SDATA寄存器(16位)之后,該數據將被轉移至發送數據FIFO中。與此同時,只要發送數據FIFO非空,其中的數據就會不斷地通過數據線被寫入SD卡的相應位置。在單片機從SD卡中讀取數據的過程中,SD卡中的數據將不斷發送至接收數據FIFO中。只要接收FIFO非空,單片機就可以不斷地通過讀SDATA寄存器得到接收數據FIFO中的數據。

圖2 SD卡與SDHC的連接

2.2 DS12887實時鐘模塊

DS12887模塊使用數據/地址復用的并行異步總線,可以為單片機提供100年以內的實時鐘信息(年/月/日/時/分/秒)。它內部具有石英晶振和鋰電源,首次使用時,需要對該模塊內部的寄存器進行相應配置,激活晶振使其進入工作狀態。由于DS12887內部帶有鋰電源,所以一旦晶振被激活,即使外部掉電,該模塊依然可以保存并提供正確的實時鐘信息。

設定DS12887的時間和從DS12887中讀取時間信息的底層程序比較簡單,只需參照芯片手冊對寄存器進行合理配置。但是,需要特別注意的是,在寫時鐘和讀取時鐘之前需要鎖存時鐘信息相關的buffer,防止在讀寫過程中由于出現時鐘信息自動更新情況而導致的錯誤。系統中,在每次讀寫實時鐘之前,查詢DS12887內部控制寄存器A最高位UIP是否為0,以避免上述錯誤的產生。因為芯片手冊中給出,一旦UIP=0,那么在244 μ s內實時鐘模塊都不會自動更新當前的時鐘信息,而這段時間足以讓單片機完成讀寫實時鐘的過程。

3 FatFs文件系統的移植與配置

3.1 FatFs軟件包簡介

采用文件系統,是為了在單片機能夠對SD卡進行數據讀寫的同時,保證其讀寫的數據能夠被大多數通用設備識別。換言之,數據在存儲器內的組織型式,需要遵循一些已有的工業標準和規范。例如使用FAT文件系統,數據存儲單元的SD卡取下來后,可以使用任何標準的讀卡器在Windows、Linux等PC機上讀出。

當前著名的嵌入式文件系統有若干種選擇,比如EFSL(Embedded File system Library)、uC/FS 、/TinyFatFS等。這之中EFSL和FatFs都是開放源碼的,具有十分詳盡的文檔和函數手冊,除錯更新也十分及時,在本文的設計中我們采用的是FatFS。

FatFs采用使用ANSI C編寫,具有很好的硬件平臺獨立性,使用者只需要對源程序進行簡單的修改和配置,就可以將其移植到各種系列的單片機上。此外,它的內存開銷很小,ROM的占有量在十幾KB的量級,使用者可以根據不同的應用方便的對代碼進行裁減。FatFs支持FAT12、FAT16和FAT32,可以建立獨立的緩沖區對多個文件進行讀寫。FatFs是一個不斷更新完善的軟件,大量的相關信息可以從原作者的主頁上得到(http://elmchan.org/fsw/ff/00index_e.html),同時原作者也做了很多性能測試的工作。

3.2 FatFs的移植

可從FatFS的主頁上下載得到FatFs R0.07版本。FatFs的主程序包含 5個文件,即diskio.c、diskio.h、ff.c、ff.h和integer.h。其中,diskio.c和diskio.h是與底層硬件I/O相關的函數;ff.c和ff.h是應用函數,主要涉及FatFs的配置和裁減;而integer.h中定義了FatFs軟件所使用的各種數據類型。

移植FatFs的過程中基本不需要對diskio.h和ff.c進行修改。除了核實integer.h中的數據類型定義是否與MC9S12U32數據類型相符之外,移植的重點工作在于diskio.c中6個主要函數的實現和ff.h中對于文件系統的裁減配置。dikio.c包含的6個接口函數:disk_initialize,disk_status,disk_ioctl,disk_read,disk_write和disk_fattime。它們分別實現存儲介質的初始化、讀取/寫入若干個扇區的數據和獲取實時鐘信息的功能。

具體移植過程如下:

(1)存儲媒介初始化函數

DSTATUS disk_initialize(BYTE drv)

由于采用的存儲媒介是SD卡,所以該函數的實際功能是對SD卡進行初始化。drv是存儲介質號碼,由于Tinv-FatFs只支持一個存儲介質,所以此處drv始終取0值。執行無誤,則返回值=0;執行中出現錯誤,則返回非0值。

(2)狀態檢測函數

DSTATUS disk_status(BYTE drv)

該函數用于檢測是否支持當前的存儲介質。此處的drv仍然恒為0。對Tiny-FatFs而言,只要drv為0,就認為支持當前介質,函數直接返回0值即可。

(3)讀扇區函數

DRESULT disk_read(BYTE drv,BYTE*buff,DWORD sector,BYTE.count)

該函數是在“單片機從SD卡讀取一個扇區”的函數基礎上編寫而成的,其功能是從SD卡讀取一個或多個扇區的數據。*buff用于存儲已經讀取的數據,sector是待讀取扇區的起始扇區數,count是需要讀取的扇區數。如果執行無誤則返回0值,否則返回非0值。

(4)寫扇區函數

DRESULT disk_write(BYTE drv,const BYTE*buff,DWORD sector,BYTE count)

與disk_read相似,該函數是在“單片機向SD卡寫入一個扇區”的函數基礎上編寫而成的,其功能是向SD卡導入一個或多個扇區的數據。*buff用于保存將要寫入的數據,sector是待寫入扇區的起始扇區數,count是需要寫入的扇區數。如果執行無誤則返回0值,否則返回非0值。

(5)存儲介質控制函數

DRESULT disk_ioctl(BYTE drv,BYTE ctrl,VoiI*buff)

ctrl是控制代碼,*buff用于保存或接收需要控制的數據數據。使用者可以在此函數里添加自己需要的功能代碼,例如獲得存儲介質的容量、扇區數等。如果是簡單的應用,也可以不執行任何功能,直接返回0值。本文采用的就是這一方法。

(6)實時鐘函數

DWORD disk_fattime(Void)

該函數將讀取的實時鐘信息保存在一個32位無符號整數中,并將其作為函數的返回值。時鐘信息在這32位中的具體分布如表1所列。

表1 返回值DWORD中包含的時鐘信息

3.3 FatFs的裁減與配置Tiny-FatFs

FatFs提供了豐富的庫函數,可以實現創建、讀取文件夾,創建、讀寫文件,移動文件指針,向文件中寫入或讀取字符串,甚至是類似與C語言fprintf()的格式化輸入等各種功能。使用者可以根據自己的需求設置相應的宏,對FatFs進行裁減,僅保留需要的功能函數,從而精簡文件系統的內存開銷。FatFs提供的函數與宏的對應關系如圖3所示。

圖3 FatFs提供的庫函數

FatFs的裁減,不僅僅是函數層面的。更重要的是,在內部機制上形成一個精簡版本,稱為Tiny-FatFs。它與標準版FatFs相比,主要的區別在于Tiny-FatFs僅支持一個物理存儲介質,而且不再針對每個開啟的文件建立512字節的緩存,整個文件系統和物理介質使用同一個緩存。顯然,Tiny-FatFs需要的內存開銷比標準版FatFs更低,只要1 KB左右的RAM??梢哉f,Tiny-FatFs是專門為小型嵌入式系統而設計的文件系統模塊。本文介紹的數據存儲系統使用的正是Tiny-FatFs版本。

在表2中,對ff.h中主要配置宏的含義進行了說明,同時給出了本文所介紹的數據存儲模塊采用的取值。

表2 ff.h中的主要參數配置說明

4 FatFs文件系統的使用

FatFs文件系統中涉及2個基本的數據結構:文件系統(磁盤)的數據結構FATFS和文件的數據結構FIL。這兩個結構是FatFs軟件主要的RAM開銷,FATFS數據結構中有針對磁盤的512字節讀寫緩存,FIL則有針對每個文件的緩存。而采用Tiny FatFS配置則不會開設文件讀寫緩存,節約RAM。

依次使用f_mount、f_open、f_read/f_write、f_close 可以完成基本的讀寫。FatFs允許對同一文件同時復數讀取,但完全不支持對同一文件同時復數的寫入操作,因為這會引起文件系統錯誤。具體每一個函數,特別是字符串讀寫、格式化讀寫等,可以參見原始幫助和例程。

此外,由于嵌入式系統具有突然掉電的可能性,一些關鍵代碼段可能導致文件系統錯誤,所以要注意調用f_sync()及時寫入。當然,如果是一組連續的f_write()寫入,而每次寫完都f_sync(),則會極大地影響速度,可以全部寫完后f_sync()。

V0.07以后版本的FatFS,增加了以下新的功能:

①_FS_TINY。Tiny模式變成了一個宏選項,而不是獨立的代碼包。

②_FS_RPATH。決定是否有當前路徑的概念,這將影響兩個相關函數的參數。

③_USE_LFN。啟用長文件名支持,可為1或2,為2時可重入。由于長文件名存在堆棧上,而且啟用LFN會依據代碼頁增加一個很大的轉換表,占掉幾十~幾百KB,所以不推薦。

④_LFN_UNICODE。長文件名使用Unicode,實驗階段,尚未正式寫入文檔。

結 語

MC9S12UF32單片機內部集成的 SDHC模塊,可將SD總線轉換為單片機內部的IP總線,開發者只需要對SD協議的基本內容有所了解,通過讀寫相應的寄存器就可以方便地實現對SD卡的底層讀寫,大大簡化了硬件的開發過程。同時,獨立于硬件平臺的FatFs軟件包可以方便地移植到各種嵌入式系統中,研發者只需要對該軟件包的diskio.c和 ff.h進行修改,即可完成移植,從而使用FatFs提供的豐富且易于使用的各種接口函數。

應用上述主要技術實現的具有嵌入式文件系統的數據模塊如圖4所示。

圖4 數據存儲模塊實物圖

該模塊體積小巧、存儲數據的靈活性和通用性很高,可以通過模塊自帶的串行通信接口接收數據,并以文件的形式存儲起來。用戶既可以直接通過USB接口將本模塊識別為U盤進行數據讀寫和分析,也可以將micro SD卡拔出,在任意一個具有micro SD讀卡器功能的設備上讀寫數據。上述功能特性使得這款數據存儲模塊具有很良好的應用前景。

[1]Motorola Inc.MC9S12UF32 System on a Chip Guide V01.04,2004.

[2]Dallas Semiconductor.DS12887 Real-Time Clock.

猜你喜歡
嵌入式單片機
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
小議PLC與單片機之間的串行通信及應用
電子制作(2018年12期)2018-08-01 00:48:04
搭建基于Qt的嵌入式開發平臺
基于單片機的平衡控制系統設計
電子制作(2017年19期)2017-02-02 07:08:27
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
Microchip推出兩個全新PIC單片機系列
主站蜘蛛池模板: 国产福利免费在线观看| 毛片免费视频| 国产极品粉嫩小泬免费看| 新SSS无码手机在线观看| 毛片a级毛片免费观看免下载| 无码中文字幕精品推荐| 亚洲丝袜中文字幕| 亚洲欧洲日韩久久狠狠爱| 综合网久久| 国产免费怡红院视频| 国产簧片免费在线播放| 无码专区第一页| 亚洲成人黄色在线| 久久久久国产精品熟女影院| 天天综合网色中文字幕| 一区二区三区成人| 日韩欧美中文字幕在线韩免费 | 亚洲天堂久久| 免费观看国产小粉嫩喷水 | 亚洲精品桃花岛av在线| 精品三级在线| 欧美一区二区三区国产精品| 亚洲成人精品| 欧美人与动牲交a欧美精品| 国产av无码日韩av无码网站| 国产一区二区影院| 国产欧美一区二区三区视频在线观看| 亚洲国产91人成在线| 国产国模一区二区三区四区| 2021无码专区人妻系列日韩| 五月婷婷中文字幕| 免费人成黄页在线观看国产| 国产女人喷水视频| 91区国产福利在线观看午夜| 亚欧成人无码AV在线播放| 九九视频免费看| 欧美日韩激情在线| 久久精品欧美一区二区| 69精品在线观看| 国产96在线 | 视频二区国产精品职场同事| 亚洲a级毛片| 国产黑丝一区| 亚洲成人77777| 亚洲一区二区成人| 中文纯内无码H| yjizz视频最新网站在线| 不卡网亚洲无码| 1024国产在线| 久久伊人操| 九色在线观看视频| 国产欧美日韩va另类在线播放| 欧美成人看片一区二区三区 | 亚洲视频免费在线看| 亚洲无线视频| 亚洲三级网站| 国产精品久久国产精麻豆99网站| 色呦呦手机在线精品| 亚洲婷婷六月| 日本一本在线视频| 国产高颜值露脸在线观看| 国产第八页| jijzzizz老师出水喷水喷出| 日韩一区精品视频一区二区| 免费国产不卡午夜福在线观看| 亚洲综合国产一区二区三区| 免费激情网站| 亚洲国产清纯| 99视频免费观看| 国产在线麻豆波多野结衣| 宅男噜噜噜66国产在线观看| 国产xxxxx免费视频| 久久国产av麻豆| 亚洲男人的天堂网| 日韩在线网址| 91偷拍一区| 国产午夜小视频| a亚洲天堂| а∨天堂一区中文字幕| 久久伊伊香蕉综合精品| 日韩无码视频网站| 日韩成人在线一区二区|