新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > FatFS的水動(dòng)力實(shí)驗(yàn)數(shù)據(jù)存儲(chǔ)系統(tǒng)設(shè)計(jì)

FatFS的水動(dòng)力實(shí)驗(yàn)數(shù)據(jù)存儲(chǔ)系統(tǒng)設(shè)計(jì)

作者: 時(shí)間:2013-04-23 來源:網(wǎng)絡(luò) 收藏

3 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)采用的軟件流程圖如圖4所示。

本文引用地址:http://butianyuan.cn/article/148053.htm

d.JPG


3.1 MicroSD接口函數(shù)
接口函數(shù)依據(jù)通信協(xié)議V2.0編寫,需要SDIO口函數(shù)以及底層接口函數(shù)的支持。ST公司提供的庫函數(shù)中包括了SDIO單元的操作,能很快實(shí)現(xiàn)SD卡模式的讀寫操作。其中,最重要的是2個(gè)函數(shù):一個(gè)是SD_WriteBlock函數(shù),向SD卡寫入數(shù)據(jù);另外一個(gè)是SD_Read Bl ock函數(shù),用于讀取SD卡上面的數(shù)據(jù)。讀/寫扇區(qū)結(jié)構(gòu)圖如圖5和圖6所示。

e.JPG


3.2 USB接口函數(shù)
系統(tǒng)在工程中加入ST公司提供的USB函數(shù),在主函數(shù)中調(diào)用即可完成USB的初始化過程。在中斷映射單元中,將可能產(chǎn)生中斷的USB事件映射到3個(gè)不同的NVIC請(qǐng)求線上:
◆USB低優(yōu)先級(jí)中斷(通道20):可由所有USB事件觸發(fā)(正確傳輸,USB復(fù)位等),固件在處理中斷前應(yīng)當(dāng)首先確定中斷源。
◆USB高優(yōu)先級(jí)中斷(通道19):僅能由同步和雙緩沖批量傳輸?shù)恼_傳輸事件觸發(fā),目的是保證最大的傳輸速率。
◆USB喚醒中斷(通道42):由USB掛起模式的喚醒事件觸發(fā)。
USB接口和SDIO接口都使用了STM32的嵌套向量中斷控制器(NVIC),需要對(duì)使用搶占式中斷優(yōu)先級(jí)和響應(yīng)式中斷優(yōu)先級(jí)進(jìn)行配置。設(shè)置SDIO接口的中斷優(yōu)先級(jí)最高,即搶占式優(yōu)先級(jí)為0,響應(yīng)式優(yōu)先級(jí)為0。而USB的搶占式中斷優(yōu)先級(jí)為1,響應(yīng)式優(yōu)先級(jí)依次降低。USB接入Host流程圖如圖7所示。

f.JPG


3.3 RTC模塊函數(shù)
在本系統(tǒng)中,對(duì)的計(jì)數(shù)器寄存器(RTC_CNTH/RTC_CNTL)和備份數(shù)據(jù)寄存器(BKP_DRx)進(jìn)行配置,前者的值表示了基于0時(shí)0分0秒數(shù)值的累加進(jìn)位,通過時(shí)間處理函數(shù),獲得當(dāng)前日歷和時(shí)刻信息;后者在于系統(tǒng)上電后,判斷是否需要重新進(jìn)行時(shí)鐘初始配置,如先寫入0xA5A,通過看寄存器是否還是0xA5A,判斷是否掉過電。如果掉過電,則需要對(duì)系統(tǒng)時(shí)間進(jìn)行校正。

4 文件系統(tǒng)的移植
4.1 文件系統(tǒng)結(jié)構(gòu)
本系統(tǒng)采用基于 V0.09的文件系統(tǒng)。文件系統(tǒng)的作用是保證其讀寫的數(shù)據(jù)能夠被大多數(shù)通用設(shè)備識(shí)別。例如使用FAT文件系統(tǒng),通過USB設(shè)備可以對(duì)存儲(chǔ)的文件進(jìn)行操作,或者取下MicroSD卡后使用標(biāo)準(zhǔn)的讀卡器在PC機(jī)上讀出。當(dāng)前應(yīng)用廣泛的嵌入式文件系統(tǒng)有μC/ FS、開源的EFSL(Embedded File System Library)與FatFS等。本設(shè)計(jì)中的FatFS使用ANSI C編寫,具有很好的硬件平臺(tái)獨(dú)立性,同時(shí)層次結(jié)構(gòu)非常清晰,如圖8所示。最頂層是應(yīng)用層,這一層為用戶提供一系列API甬?dāng)?shù),如f_open、f_close、f_read、f_write等,用戶可以像C文件一樣讀/寫FAT文件。中間層FatFS Module完整地實(shí)現(xiàn)了FAT協(xié)議,用戶無需對(duì)此進(jìn)行任何修改。最底層是在移植過程中需要處理的接口,包括存儲(chǔ)媒介讀/寫接口Lowlevel disk I/O和文件創(chuàng)建/修改時(shí)間時(shí)所需的實(shí)時(shí)時(shí)鐘。用戶根據(jù)具體的硬件編寫程序,填充相關(guān)函數(shù),即可使FatFS文件系統(tǒng)應(yīng)用在具體的嵌入式平臺(tái)設(shè)備上。

g.JPG


4.2 FatFS移植
FatFS的最新版本是V0.09。FatFs的主程序包含5個(gè)文件,即fdiskio.h、fconf.h、ff.c、ff.h和integer.h。移植中,還需要添加diskio.c文件與diskio.h構(gòu)成底層的硬件I/O。ff.c和ff.h是主要的應(yīng)用函數(shù),上層的API函數(shù)都在其中;ffconI.h主要涉及FatFS的配置和裁減;而integer.h中定義了FatFS軟件所使用的各種數(shù)據(jù)類型。移植FatFS的過程中不需要對(duì)diskio.h和ff.c進(jìn)行修改。移植工作首先核實(shí)integer.h中的數(shù)據(jù)類型,定義與數(shù)據(jù)類型是否相符。其次,實(shí)現(xiàn)diskio.c中6個(gè)主要函數(shù),最后在ffconf.h中對(duì)文件系統(tǒng)的裁減配置。diskio.c包含的6個(gè)接口函數(shù)為:disk_initialize、disk_status、disk ioctl、disk read、disk write和disk_fat time。具體移植過程如下:
DSTATUS disk_initialize(BYTE drv)為存儲(chǔ)介質(zhì)初始化函數(shù)。drv是存儲(chǔ)介質(zhì)號(hào)碼,本設(shè)計(jì)中是SD卡的初始化函數(shù),只需支持一個(gè)存儲(chǔ)介質(zhì),因此drv設(shè)為0。執(zhí)行無誤,返回0值。
DSTATUS disk_status(BYTE drv)為存儲(chǔ)介質(zhì)狀態(tài)檢測(cè)函數(shù)。檢測(cè)是否支持當(dāng)前的存儲(chǔ)介質(zhì)。事實(shí)上,只要drv為0,系統(tǒng)就默認(rèn)為支持,執(zhí)行無誤返回0。
DRESULT disk_read(BYTE drv,BYTE*buff,DWORD sector,BYTE count)為讀扇區(qū)函數(shù)。drv設(shè)為0,*burf指向存儲(chǔ)的數(shù)據(jù),sector是讀的起始扇區(qū),count是需要讀的扇區(qū)數(shù)目。將SD卡讀數(shù)據(jù)接口函數(shù)根據(jù)參數(shù)填寫、調(diào)用,函數(shù)執(zhí)行無誤返回0,錯(cuò)誤則返回非0。

晶振相關(guān)文章:晶振原理


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉