FatFS的水動力實(shí)驗(yàn)數(shù)據(jù)存儲系統(tǒng)設(shè)計(jì)
DRESULT disk_write(BYTE drv,BYTE *buff,DWORDsector,BYTE count)為寫扇區(qū)函數(shù)。與disk_read相似,其功能是向SD卡導(dǎo)入扇區(qū)的數(shù)據(jù)。*buff用于保存將要寫入的數(shù)據(jù),sector是待寫入扇區(qū)的起始扇區(qū)數(shù),count是需要寫入的扇區(qū)數(shù)。在SD卡寫數(shù)據(jù)接口函數(shù)基礎(chǔ)上編寫,如果執(zhí)行無誤,則返回0值;否則,返回非0值。
DRESULT disk_ioctl(BYTE drv,BYTE ctrl,void*buff)為存儲介質(zhì)控制函數(shù)。ctrl是控制代碼,*buff用于保存或接收需要控制的數(shù)據(jù)。用戶在此函數(shù)添加自己需要的功能代碼,例如獲得存儲介質(zhì)的容量、扇區(qū)數(shù)等。如果不執(zhí)行任何功能,則直接返回0值。
DWORD disk_fattime為實(shí)時(shí)時(shí)鐘函數(shù)。該函數(shù)將讀取的實(shí)時(shí)鐘信息保存在一個(gè)32位無符號整數(shù)中,并將其作為函數(shù)的返回值。時(shí)鐘信息的具體分布如圖9所示。本文引用地址:http://butianyuan.cn/article/148053.htm
4.3 FatFS裁減與配置
FatFS提供了豐富的庫函數(shù),FatFS可以實(shí)現(xiàn)創(chuàng)建、讀取文件夾,創(chuàng)建、讀寫文件,移動文件指針,使用者可以根據(jù)自己的需求設(shè)置相應(yīng)的宏,對FatFS進(jìn)行裁減,僅保留需要的功能函數(shù),從而精簡文件系統(tǒng)的內(nèi)存開銷。FatFS還需要加入對應(yīng)的語言包,cc936支持的是簡體中文。FatFS提供的函數(shù)與宏的對應(yīng)關(guān)系如圖10所示。
使用FatFS向文件中寫入或讀取字符串,需要使用類似C語言fprintf()的格式化輸入功能時(shí),將_USE_STRFUNC設(shè)置為2,_USE_READONLY設(shè)置為1即可。
5 FatFS文件系統(tǒng)的使用和系統(tǒng)應(yīng)用
FatFS文件系統(tǒng)中涉及2個(gè)基本的數(shù)據(jù)結(jié)構(gòu):文件系統(tǒng)(磁盤)的數(shù)據(jù)結(jié)構(gòu)FatFS和文件的數(shù)據(jù)結(jié)構(gòu)FIL。這兩個(gè)結(jié)構(gòu)是FatFS軟件主要的RAM開銷,F(xiàn)atFS數(shù)據(jù)結(jié)構(gòu)中有針對磁盤的512字節(jié)讀寫緩存,F(xiàn)IL則有針對每個(gè)文件的緩存。而采用Tiny—FatFS配置則不會開設(shè)文件讀寫緩存,節(jié)約RAM。本設(shè)計(jì)中,開啟Tiny—FatFS配置比關(guān)閉共節(jié)約了未初始化的數(shù)據(jù)段(ZI—data)4 096個(gè)字節(jié)。
依次使用f_mount、f_open、f_read/f_write、f_close可以完成基本的讀寫。FatFS允許對同一文件同時(shí)讀寫,或者打開幾個(gè)文件進(jìn)行讀寫。f_write和f_printf可以分別實(shí)現(xiàn)對文件大塊數(shù)據(jù)和字符串類型的數(shù)據(jù)寫入功能。后者可以對寫入的數(shù)據(jù)進(jìn)行一些格式轉(zhuǎn)換,包括數(shù)據(jù)類型、數(shù)據(jù)長度和有無符號等。
在水動力的實(shí)驗(yàn)中,采用本系統(tǒng)記錄數(shù)據(jù)。系統(tǒng)主頻工作在72 MHz,采用2 GB的MicroSD卡,每次記錄的文件長度為2 308 KB,即時(shí)長為65 s。文件名稱為數(shù)據(jù)記錄的當(dāng)前時(shí)刻。在一組實(shí)驗(yàn)結(jié)束后,通過USB口與上位機(jī)連接,即可對存儲的數(shù)據(jù)文件進(jìn)行操作。在上位機(jī)端,文
件讀寫的速度達(dá)到了200 KB/s。從測試結(jié)果上可以看出,數(shù)據(jù)儲存接口正確,速度令人滿意,完全適合嵌入式系統(tǒng)的需求,可以作為通用型數(shù)據(jù)記錄系統(tǒng)。
結(jié)語
本系統(tǒng)采用的STM32F103ZET6內(nèi)部集成SDIO接口,并且ST公司提供了完善的庫函數(shù),通過相應(yīng)的函數(shù)就可以方便地實(shí)現(xiàn)對SD卡的讀寫,簡化了硬件的開發(fā)過程。具備USB接口使得該系統(tǒng)大大增強(qiáng)了通用性和兼容性。同時(shí),獨(dú)立于硬件平臺的FatFS文件系統(tǒng)可以方便地移植到嵌入式系統(tǒng)中,用戶只需要對負(fù)責(zé)底層硬件接口的diskio.c進(jìn)行修改,即可完成移植,并使用FatFS提供的豐富且易于使用的各種接口函數(shù)。該系統(tǒng)具有體積小、存儲數(shù)據(jù)靈活和通用性強(qiáng)的優(yōu)點(diǎn)。用戶既可以直接通過USB接口將該系統(tǒng)識別為U盤進(jìn)行數(shù)據(jù)讀寫和分析,也可以取出MicroSD卡在讀卡器上讀寫數(shù)據(jù)。將該系統(tǒng)拓展應(yīng)用在嵌入式系統(tǒng)應(yīng)用中,具有良好的前景。
評論