第5章 FATFS文件系統(tǒng)_第1頁(yè)
第5章 FATFS文件系統(tǒng)_第2頁(yè)
第5章 FATFS文件系統(tǒng)_第3頁(yè)
第5章 FATFS文件系統(tǒng)_第4頁(yè)
第5章 FATFS文件系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

《嵌入式系統(tǒng)原理與開(kāi)發(fā)設(shè)計(jì)》FATFS文件系統(tǒng)主講人:賴樹(shù)明東莞理工學(xué)院01FATFS文件系統(tǒng)02FATFS文件系統(tǒng)的移植03FATFS文件系統(tǒng)API函數(shù)0405FATFS文件系統(tǒng)示例FATFS文件系統(tǒng)作業(yè)01FATFS文件系統(tǒng)介紹文件系統(tǒng)概述FATFS文件系統(tǒng)特點(diǎn)FATFS文件系統(tǒng)結(jié)構(gòu)FATFS文件系統(tǒng)移植FATFS文件系統(tǒng)介紹文件系統(tǒng)概述01文件管理系統(tǒng)是負(fù)責(zé)管理和存儲(chǔ)文件數(shù)據(jù)的管理軟件,主要是實(shí)現(xiàn)了在磁盤上組織文件、存儲(chǔ)文件數(shù)據(jù)的方法。定義FAT/FATFSNTFSCDFSexFAT常見(jiàn)文件系統(tǒng)分類FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)特點(diǎn)01FATFS文件系統(tǒng)全部是由標(biāo)準(zhǔn)C語(yǔ)言編寫(xiě),與平臺(tái)無(wú)關(guān),移植簡(jiǎn)單,代碼量少,效率高,Windows系統(tǒng)也兼容FAT文件系統(tǒng),如兼容FAT12、FAT16、FAT32等。FATFS還支持多卷(最多10卷)、多個(gè)ANSI/OEM代碼頁(yè)(包括DBC)、長(zhǎng)文件名、ANSI/OEM或Unicode、RTOS、多種扇區(qū)大小、API和I/O緩沖區(qū)等。特點(diǎn)只要編譯器符合C89或更高版本的編譯器,就沒(méi)有平臺(tái)的依賴性,軟件整型類型的大小要符合要求,其中char類型的大小必須為8位,int類型的大小必須為16位或32位。當(dāng)C標(biāo)準(zhǔn)采用C89時(shí),short類型的大小必須為16位,而long類型的大小必須為32位,移植性FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)結(jié)構(gòu)01底層接口:底層接口包括存儲(chǔ)媒介讀寫(xiě)接口和供給文件創(chuàng)建修改時(shí)間的RTC,需要根據(jù)平臺(tái)和存儲(chǔ)介質(zhì)編寫(xiě)移植代碼;中間層:FATFS模塊,實(shí)現(xiàn)了文件讀寫(xiě)協(xié)議,F(xiàn)ATFS模塊提供的是ff.c和ff.h這兩個(gè)文件,開(kāi)發(fā)者一般不用修改,只需包含ff.h頭文件即可;應(yīng)用層:開(kāi)發(fā)者無(wú)須理會(huì)FATFS的內(nèi)部復(fù)雜的源碼實(shí)現(xiàn),只需調(diào)用FATFS模塊提供的一系列應(yīng)用接口函數(shù),如f_open、f_read、f_write、f_close等API函數(shù),就可以快速實(shí)現(xiàn)讀、寫(xiě)、刪除、復(fù)制等各種文件操作。結(jié)構(gòu)描述FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植01fatfs官方網(wǎng)址:

/fsw/ff/00index_e.htmlFatFsR0.14下載地址:

/fsw/ff/arc/ff14.zipFatFsR0.15下載地址:

/fsw/ff/arc/ff15.zip下載源碼由于FATFS文件系統(tǒng)在保持持續(xù)升級(jí),因此,后面的時(shí)間登陸網(wǎng)站看到的名稱版本可能不一樣,比如截止現(xiàn)在的版本是FatFsR0.15,在編寫(xiě)書(shū)箱時(shí)候是FatFsR0.14但是移植的方步步驟是基本保持不變的。

FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植01下載源碼后,以下介紹FATFS文件系統(tǒng)的文件結(jié)構(gòu)及作用概述(1)從網(wǎng)站下載的文件包經(jīng)過(guò)解壓縮后,會(huì)有以下兩個(gè)文件夾:Documents:存放說(shuō)明、LOGO等文件夾Source:源碼文件夾(2)在source文件夾里,包含以下文件:00history:

歷史版本說(shuō)明00readme:

使用說(shuō)明diskio.c:

底層接口文件的源文件diskio.h:

底層接口文件的頭文件ff.c:

應(yīng)用層的源文件ff.h:

應(yīng)用層的頭文件ffconf:

FATFS配置文件ffsystem:

申請(qǐng)釋放內(nèi)存配置文件ffunicode:

語(yǔ)言支持文件integer:

數(shù)據(jù)類型定義頭文件FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植01以下表格描述移植文件系統(tǒng)到目標(biāo)平臺(tái),源碼文件是否需要用戶修改,說(shuō)明如下

:概述表5.1FATFS文件系統(tǒng)功能說(shuō)明表源文件名功能說(shuō)明移植說(shuō)明diskio.cFATFS和diskI/O模塊接口層源文件與平臺(tái)相關(guān)的代碼,開(kāi)發(fā)者根據(jù)存儲(chǔ)介質(zhì)來(lái)編寫(xiě)相關(guān)函數(shù)diskio.hFATFS和diskI/O模塊公用的包含文件不需要開(kāi)發(fā)者修改ff.cFATFS文件系統(tǒng)源碼不需要開(kāi)發(fā)者修改ff.hFATFS文件系統(tǒng)的包含文件不需要開(kāi)發(fā)者修改ffconf.hFATFS文件系統(tǒng)配置文件需要開(kāi)發(fā)者根據(jù)需求來(lái)配置參數(shù)ffsystem.c申請(qǐng)釋放內(nèi)存配置文件不需要開(kāi)發(fā)者修改ffunicode.c語(yǔ)言支持文件不需要開(kāi)發(fā)者修改integer.h數(shù)據(jù)類型定義與編譯器有關(guān)FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植01本小節(jié)開(kāi)始介紹如何把FATFS源碼移植到STM32F40x開(kāi)發(fā)板上運(yùn)行。本節(jié)重點(diǎn)是講述移植FATFS的過(guò)程,并非是SD卡驅(qū)動(dòng)程序(本實(shí)驗(yàn)文件系統(tǒng)應(yīng)用在SD上進(jìn)行讀取操作),因此準(zhǔn)備以下相關(guān)的軟件資源,在上面進(jìn)行移植。概述FATFS文件系統(tǒng)移植需要準(zhǔn)備5個(gè)壓縮包文件源碼:①ff14a.zip:FATFS的文件系統(tǒng)源碼包;②sdio-driver.zip:STM32F407ZGT6的SD卡驅(qū)動(dòng);③stm32f407-sdio.zip:已經(jīng)帶SD卡驅(qū)動(dòng)的STM32F407工程④STM32F4xx_StdPeriph_Driver.zip:STM32F4xx的固件庫(kù)代碼;⑤stm32f407-sdio-fatfs-demo.zip:已經(jīng)移植好的FATFS演示工程。FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植011.根據(jù)書(shū)本把fatfs源碼,sdio驅(qū)動(dòng),基本工程解壓出來(lái),把sdio驅(qū)動(dòng)和fatfs源碼添加到項(xiàng)目工程當(dāng)中,詳細(xì)頻率請(qǐng)閱讀配套書(shū)箱。2.修改為堆空間startup_stm32f40_41xxx.s中找到Stack_Size和Heap_Size,修改為為Stack_SizeEQU(1024*4)Heap_SizeEQU(1024*32)3.修改配置文件ffconf.h:

#defineFF_USE_STRFUNC

1//支持字符串類操作,如f_putc、f_puts等#defineFF_USE_MKFS

1//使能格式化功能#defineFF_USE_LABEL 1

//使能卷標(biāo)簽函數(shù):f_getlabel和f_setlabel#defineFF_CODE_PAGE 936

//支持中文文件名#defineFF_USE_LFN

3//動(dòng)態(tài)分配長(zhǎng)文件名的存儲(chǔ)區(qū)域#defineFF_MAX_SS 512//設(shè)置扇區(qū)緩沖的最大值,常用值是512#defineFF_USE_FASTSEEK 1//使能快速定位文件讀寫(xiě)指針#defineFF_VOLUMES 3//支持最大的驅(qū)動(dòng)器數(shù)量,設(shè)置為3表示支持3個(gè)4.修改底層接口文件ff.c

,接口文件需要實(shí)現(xiàn)以下一些函數(shù):移植步驟ff.cFATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植01/*函數(shù)原型:DSTATUSdisk_initialize(BYTEDrive)函數(shù)功能:初始化磁盤驅(qū)動(dòng)器函數(shù)形參:Drive:指定要初始化的邏輯驅(qū)動(dòng)器號(hào),取值范圍0~9。函數(shù)返回值:函數(shù)成功時(shí),返回值的STA_NOINIT標(biāo)志被清零。備注:用戶不要調(diào)用這個(gè)函數(shù),否則FAT結(jié)構(gòu)可能會(huì)損壞,如要重新初始化,可調(diào)用f_mount實(shí)現(xiàn)。示例:disk_initialize(0);*/DSTATUSdisk_initialize(BYTEpdrv){DSTATUSstat;switch(pdrv){caseDEV_SD://選擇SD卡stat=SD_Init();//初始化SD卡break;}returnstat;}disk_initialize實(shí)現(xiàn)FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植01/*函數(shù)原型:DSTATUSdisk_initialize(BYTEDrive)函數(shù)功能:初始化磁盤驅(qū)動(dòng)器函數(shù)形參:Drive:指定要初始化的邏輯驅(qū)動(dòng)器號(hào),取值范圍0~9。函數(shù)返回值:函數(shù)成功時(shí),返回值的STA_NOINIT標(biāo)志被清零。備注:用戶不要調(diào)用這個(gè)函數(shù),否則FAT結(jié)構(gòu)可能會(huì)損壞,如要重新初始化,可調(diào)用f_mount實(shí)現(xiàn)。示例:disk_initialize(0);*/DSTATUSdisk_initialize(BYTEpdrv){DSTATUSstat;switch(pdrv){caseDEV_SD://選擇SD卡stat=SD_Init();//初始化SD卡break;}returnstat;}disk_initialize實(shí)現(xiàn)FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植01/*函數(shù)功能:返回當(dāng)前磁盤驅(qū)動(dòng)器的狀態(tài)函數(shù)形參:Drive:指定要初始化的邏輯驅(qū)動(dòng)器號(hào),取值范圍0~9。函數(shù)返回值:0表示初始化成功,其他取值值:STA_NOINIT、STA_PROTECTED、STA_NODISK表是失敗情況,這里不做狀態(tài)檢測(cè),直接返回0示例:disk_status(0);。*/在ff.c中找到disk_status函數(shù)如下所示:DSTATUSdisk_status(BYTEpdrv){ DSTATUSstat; intresult; switch(pdrv) { caseDEV_SD://是SD卡 return0;//該函數(shù)現(xiàn)在無(wú)須用到,直接返回0。 } returnSTA_NOINIT;}disk_status實(shí)現(xiàn)FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植01/*函數(shù)功能:從磁盤驅(qū)動(dòng)器上讀取扇區(qū)函數(shù)形參:Drive:指定要初始化的邏輯驅(qū)動(dòng)器號(hào),取值范圍0~9。Buffer:指向保存讀取到的數(shù)據(jù)數(shù)據(jù)緩沖區(qū)的指針SectorNumber:指定起始扇區(qū)邏輯塊的地址SectorCount:指定要讀取的扇區(qū)數(shù),取值1~128。函數(shù)返回值:RES_OK(0):函數(shù)成功RES_ERROR:讀操作期間產(chǎn)生了任何錯(cuò)誤且不能恢復(fù)RES_PARERR:非法參數(shù);RES_NOTRDY:驅(qū)動(dòng)器沒(méi)有被初始化*/在ff.c中找到disk_read函數(shù)如下所示:DRESULTdisk_read(BYTEpdrv, BYTE*buff,DWORDsector,UINTcount){ DRESULTres; intresult; switch(pdrv) { caseDEV_SD: result=SD_ReadDisk((u8*)buff,sector,count);//讀SD扇區(qū)函數(shù),用戶提供。 returnresult; } returnRES_PARERR;}disk_read實(shí)現(xiàn)FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植01/*函數(shù)功能:向磁盤寫(xiě)入一個(gè)或多個(gè)扇區(qū)函數(shù)形參:Drive:指定要初始化的邏輯驅(qū)動(dòng)器號(hào),取值范圍0~9。Buffer:要寫(xiě)入字節(jié)數(shù)組的指針;SectorNumber:指定起始扇區(qū)邏輯塊的地址SectorCount:指定要寫(xiě)入的扇區(qū)數(shù),取值1~128。函數(shù)返回值:RES_OK(0):函數(shù)成功RES_ERROR:讀操作期間產(chǎn)生了任何錯(cuò)誤且不能恢復(fù)RES_WRPRT:媒體被寫(xiě)保護(hù);

RES_PARERR:非法參數(shù)RES_NOTRDY:驅(qū)動(dòng)器沒(méi)有被初始化*/在ff.c中找到disk_write函數(shù)如下所示:DRESULTdisk_write(BYTEpdrv,constBYTE*buff,DWORDsector,UINTcount){DRESULTres;intresult;switch(pdrv){caseDEV_SD:result=SD_WriteDisk((u8*)buff,sector,count);//寫(xiě)入扇區(qū)returnresult;}returnRES_PARERR;}disk_write實(shí)現(xiàn)FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植01disk_write實(shí)現(xiàn)/*函數(shù)功能:控制器件指定特性和除讀寫(xiě)外的其他功能函數(shù)形參:Drive:盤符,取值范圍0~9。Command:指定命令代碼Buffer:指向參數(shù)緩沖區(qū)的指針,取決于命令代碼,不使用時(shí)應(yīng)寫(xiě)入NULL。函數(shù)返回值:RES_OK(0):函數(shù)成功RES_ERROR:讀操作期間產(chǎn)生了任何錯(cuò)誤且不能恢復(fù)RES_PARERR:非法參數(shù)RES_NOTRDY:驅(qū)動(dòng)器沒(méi)有被初始化備注:CTRL_SYNC:確保磁盤驅(qū)動(dòng)器已經(jīng)完成了寫(xiě)處理,當(dāng)磁盤I/O有一個(gè)寫(xiě)緩存,立即刷新原扇區(qū),只讀配置下不適用此命令。GET_SECTOR_SIZE:返回磁盤的扇區(qū)大小,只用于f_mkfs()。GET_SECTOR_COUNT:返回可利用的扇區(qū)數(shù),在_MAS_SS≥1024時(shí)可用。GET_BLOCK_SIZE:獲取擦除塊大小,只用于f_mkfs()。GET_ERASE_SECTOR:強(qiáng)制擦除一塊的扇區(qū),_USE_ERASE>0時(shí)可用。*/在ff.c中找到disk_ioctl函數(shù)如下所示:DRESULTdisk_ioctl(BYTEpdrv, BYTEcmd, void*buff ){DRESULTres;intresult;switch(pdrv){caseDEV_SD:switch(cmd){caseCTRL_SYNC:return0;caseGET_SECTOR_SIZE:

//獲取扇區(qū)大小

*(DWORD*)buff=512;res=RES_OK;break;

caseGET_BLOCK_SIZE://獲取塊大小

*(WORD*)buff=SDCardInfo.CardBlockSize;

res=RES_OK;break;caseGET_SECTOR_COUNT://獲取總扇區(qū)數(shù)量

*(DWORD*)buff=SDCardInfo.CardCapacity/512;res=RES_OK;break;default:res=RES_PARERR;break;}}returnres;}FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)移植01get_fattime實(shí)現(xiàn)/*函數(shù)原型:DWORDget_fattime()函數(shù)功能:獲取當(dāng)前時(shí)間函數(shù)形參:無(wú)函數(shù)返回值:當(dāng)前時(shí)間以雙字值封裝返回,位域含義如下所示:Bit31:25:年(0~127)(從1980年開(kāi)始)Bit24:21:月(1~12)Bit20:16:日(1~31)Bit15:11:小時(shí)(0~23)Bit10:5:分鐘(0~59)Bit4:0:秒(0~29)備注:get_fattime函數(shù)必須返回一個(gè)合法的時(shí)間即使系統(tǒng)不支持實(shí)時(shí)時(shí)鐘,如果返回0,沒(méi)有一個(gè)合法的時(shí)間,在讀配置下無(wú)須此函數(shù)。*/在ff.c中沒(méi)有該函數(shù)示例,需要自行編寫(xiě)該函數(shù)。#include"rtc.h"DWORDget_fattime(void){u32date;date=(((rtc_dates.year-1980)<<25)|(rtc_dates.month<<21)

|(rtc_dates.date<<16)

|(rtc_dates.hour<<11)

|(rtc_dates.min<<5)

|(RTC_dates.sec));returndate;}03FATFS文件系統(tǒng)API函數(shù)FATFS文件系統(tǒng)API函數(shù)03函數(shù)原型:FRESULTf_mount(BYTEDrive,FATFS*FileSystemObject)函數(shù)功能:為FATFS模塊注冊(cè)/注銷一個(gè)工作區(qū)函數(shù)參數(shù):Drive:注冊(cè)/注銷工作區(qū)的邏輯驅(qū)動(dòng)器號(hào),即盤符,應(yīng)當(dāng)取值0~9。FileSystemObject:指向注冊(cè)的工作區(qū)(文件系統(tǒng)對(duì)象)的指針,為NULL時(shí)為注銷工作區(qū)。函數(shù)返回值:FR_OK(0):函數(shù)成功 FR_INVALID_DRIVE:驅(qū)動(dòng)器號(hào)無(wú)效備注:此函數(shù)的作用在磁盤里注冊(cè)一個(gè)緩沖區(qū)域,用來(lái)存儲(chǔ)FAT32文件系統(tǒng)的一些相關(guān)信息,對(duì)磁盤進(jìn)行操作之前,這個(gè)函數(shù)是不可少的,無(wú)論驅(qū)動(dòng)器狀態(tài)如何,該函數(shù)總是成功的,函數(shù)只是初始化給定的工作區(qū)和注冊(cè)內(nèi)部表的地址。f_mountf_mount函數(shù)FATFS文件系統(tǒng)API函數(shù)03函數(shù)原型:FRESULTf_open(FIL*FileObject,constTCHAR*FileName,BYTEModeFlags) 函數(shù)功能:為讀寫(xiě)文件創(chuàng)建一個(gè)文件對(duì)象 函數(shù)形參:FileObject:指向創(chuàng)建的文件對(duì)象結(jié)構(gòu)體的指針 FileName:指向空結(jié)尾字符串文件名的指針 ModeFlags:指定讀寫(xiě)類型和打開(kāi)文件的方式,可以是下列值一種或幾種的組合: ①FA_READ:讀模式,從文件中讀取數(shù)據(jù)(讀寫(xiě)模式可同時(shí)生效)。 ②FA_WRITE:寫(xiě)模式,往文件里寫(xiě)入數(shù)據(jù)(讀寫(xiě)模式可同時(shí)生效)。 ③FA_OPEN_EXISTING:打開(kāi)文件(默認(rèn)方式),如果文件不存在則函數(shù)失敗。 ④FA_OPEN_ALWAYS:打開(kāi)文件,如果文件不存在,則創(chuàng)建一個(gè)新文件,此種方式可使用f_lseek函數(shù)對(duì)打開(kāi)的文件追加數(shù)據(jù)。 ⑤FA_CREATE_NEW:創(chuàng)建新文件,如文件存在則失敗,返回值FR_EXIST。 ⑥FA_CREATE_ALWAYS:創(chuàng)建一個(gè)新文件,如果文件存在則覆蓋舊文件。 備注:函數(shù)成功時(shí)會(huì)創(chuàng)建一個(gè)文件對(duì)象,以供隨后的讀寫(xiě)函數(shù)調(diào)用文件時(shí)使用;使用f_close函數(shù)來(lái)關(guān)閉一個(gè)打開(kāi)的文件對(duì)象,如果修改的文件沒(méi)被關(guān)閉,文件數(shù)據(jù)將會(huì)丟失;在使用任何文件函數(shù)之前,必須對(duì)相應(yīng)的邏輯驅(qū)動(dòng)器使用f_mount函數(shù)注冊(cè)一個(gè)工作區(qū)(文件系統(tǒng)對(duì)象),所有的文件函數(shù)在注冊(cè)工作區(qū)后才能正常工作。f_openf_open函數(shù)FATFS文件系統(tǒng)API函數(shù)03函數(shù)原型:FRESULTf_close(FIL*FileObject) 函數(shù)功能:關(guān)閉一個(gè)打開(kāi)的文件 函數(shù)形參:FileObject:指向要關(guān)閉的文件對(duì)象結(jié)構(gòu)體的指針 函數(shù)返回值:FR_OK(0):文件對(duì)象應(yīng)經(jīng)成功關(guān)閉 FR_DISK_ERR:函數(shù)失敗由于磁盤運(yùn)行的一個(gè)錯(cuò)誤 FR_INT_ERR:函數(shù)失敗由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或內(nèi)部錯(cuò)誤 FR_NOT_READY:磁盤驅(qū)動(dòng)器無(wú)法工作, FR_INVALID_OBJECT:文件對(duì)象非法 備注:f_close函數(shù)關(guān)閉一個(gè)打開(kāi)的文件對(duì)象,如果有任何數(shù)據(jù)寫(xiě)入文件,文件緩存信息將被寫(xiě)回到磁盤,函數(shù)成功后,之前的文件對(duì)象不再合法而被丟棄。f_closef_close函數(shù)FATFS文件系統(tǒng)API函數(shù)03函數(shù)原型:FRESULTf_write(FIL*FileObject,constVoid*Buffer,UINTByteToWrite,UINT*ByteWritten)函數(shù)功能:往文件中寫(xiě)數(shù)據(jù)函數(shù)形參:FileObject:指向打開(kāi)文件對(duì)象結(jié)構(gòu)體的指針Buffer:指向要寫(xiě)入的數(shù)據(jù)緩沖區(qū)的指針ByteToWrite:UINT范圍內(nèi)要寫(xiě)入的字節(jié)數(shù)ByteWritten:指向保存已經(jīng)寫(xiě)入的字節(jié)數(shù)UINT變量的指針函數(shù)返回值:FR_OK(0):函數(shù)成功FR_DENIED:函數(shù)被拒由于文件已經(jīng)開(kāi)啟了不可寫(xiě)模式備注:每次f_write函數(shù)執(zhí)行完后,*ByteWritten值等于本次寫(xiě)入的字節(jié)數(shù),如果*ByteWritten<ByteToWrite,則表示在寫(xiě)操作期間卷已滿。f_writef_write函數(shù)FATFS文件系統(tǒng)API函數(shù)03函數(shù)原型:FRESULTf_lseek(FIL*FileObject,DWORDoffset)函數(shù)功能:移動(dòng)一個(gè)打開(kāi)文件對(duì)象的文件讀寫(xiě)指針,也可以用來(lái)增加文件大小。函數(shù)形參:FileObject:指向打開(kāi)文件對(duì)象結(jié)構(gòu)體的指針Offset:偏移文件起始位置的字節(jié)數(shù)函數(shù)返回值:FR_OK(0):函數(shù)成功FR_DISK_ERR:函數(shù)失敗由于磁盤運(yùn)行的一個(gè)錯(cuò)誤FR_INT_ERR:函數(shù)失敗由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或內(nèi)部錯(cuò)誤FR_NOT_READY:磁盤驅(qū)動(dòng)器無(wú)法工作,由于驅(qū)動(dòng)器中沒(méi)有媒體或其他原因。FR_INVALID_OBJECT:文件對(duì)象非法FR_NOT_ENOUGH_CORE:文件的鏈接映射表大小不足備注:偏移值可以在文件起始和結(jié)尾的范圍內(nèi)指定,當(dāng)在寫(xiě)模式下偏移值超出文件大小后,文件大小會(huì)增加,擴(kuò)充區(qū)域的數(shù)據(jù)是未定義的,這適合快速創(chuàng)建大文件,尤其是快速的寫(xiě)操作;f_lseek函數(shù)成功后,應(yīng)該對(duì)文件讀寫(xiě)指針檢查以確保讀寫(xiě)指針被正確移動(dòng),f_lseekf_lseek函數(shù)FATFS文件系統(tǒng)API函數(shù)03函數(shù)原型:FRESULTf_sync(FIL*FileObject)函數(shù)功能:刷新寫(xiě)文件的緩存信息函數(shù)形參:FileObject:指向要刷新的文件對(duì)象結(jié)構(gòu)體的指針函數(shù)返回值:FR_OK(0):函數(shù)成功FR_DISK_ERR:函數(shù)失敗由于磁盤運(yùn)行的一個(gè)錯(cuò)誤FR_INT_ERR:函數(shù)失敗由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或內(nèi)部錯(cuò)誤FR_NOT_READY:磁盤驅(qū)動(dòng)器無(wú)法工作,由于驅(qū)動(dòng)器中沒(méi)有媒體或其他原因。FR_INVALID_OBJECT:文件對(duì)象非法備注:f_sync函數(shù)執(zhí)行和f_close函數(shù)相同的處理,不同在于執(zhí)行后文件仍保持打開(kāi),文件對(duì)象依然有效,可以繼續(xù)對(duì)文件進(jìn)行讀寫(xiě)/移動(dòng)操作;當(dāng)文件處于長(zhǎng)時(shí)間的寫(xiě)模式,如數(shù)據(jù)記錄時(shí),定期調(diào)用此函數(shù),或?qū)懭霐?shù)據(jù)后立即調(diào)用此函數(shù),可以減少因斷電等意外情況帶來(lái)的損失。f_syncf_sync函數(shù)FATFS文件系統(tǒng)API函數(shù)03函數(shù)原型:FRESULTf_opendir(DIR*DirObject,constTCHAR*DirName)函數(shù)功能:打開(kāi)一個(gè)目錄函數(shù)形參:DirObject:指向空目錄結(jié)構(gòu)體的指針,用來(lái)存儲(chǔ)要打開(kāi)的目錄信息。DirName:指向空結(jié)尾字符串目錄名的指針函數(shù)返回值:FR_OK(0):函數(shù)成功,目錄結(jié)構(gòu)體被創(chuàng)建,以供隨后的讀目錄調(diào)用。FR_NO_PATH:無(wú)法找到路徑FR_INVALID_NAME:路徑名非法FR_INVALID_DRIVE:驅(qū)動(dòng)器號(hào)非法FR_NOT_READY:磁盤驅(qū)動(dòng)器無(wú)法工作,由于驅(qū)動(dòng)器中沒(méi)有媒體或其他原因。FR_DISK_ERR:函數(shù)失敗由于磁盤運(yùn)行的一個(gè)錯(cuò)誤FR_INT_ERR:函數(shù)失敗由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或內(nèi)部錯(cuò)誤FR_NOT_ENABLED:邏輯驅(qū)動(dòng)器沒(méi)有工作區(qū)備注:f_opendir打開(kāi)一個(gè)存在的目錄并創(chuàng)建該目錄對(duì)象以供后面調(diào)用,目錄對(duì)象結(jié)構(gòu)體無(wú)須任何步驟可在任何時(shí)間被丟棄。f_opendirf_opendir函數(shù)FATFS文件系統(tǒng)API函數(shù)03函數(shù)原型:FRESULTf_readdir(DIR*DirObject,FILINFO*FileInfo)函數(shù)功能:讀取目錄函數(shù)形參:DirObject:指向打開(kāi)的目錄結(jié)構(gòu)體的指針FileInfo:指向文件信息結(jié)構(gòu)體的指針,用來(lái)存儲(chǔ)讀取到的文件信息。函數(shù)返回值:FR_OK(0):函數(shù)成功 FR_NOT_READY:磁盤驅(qū)動(dòng)器無(wú)法工作,由于驅(qū)動(dòng)器中沒(méi)有媒體或其他原因。 FR_DISK_ERR:函數(shù)失敗由于磁盤運(yùn)行的一個(gè)錯(cuò)誤 FR_INT_ERR:函數(shù)失敗由于一個(gè)錯(cuò)誤的FAT結(jié)構(gòu)或內(nèi)部錯(cuò)誤 FR_INVALID_OBJECT:文件對(duì)象非法說(shuō)明:備注:f_readdir按順序讀取目錄內(nèi)文件,重復(fù)調(diào)用此函數(shù)可讀取目錄內(nèi)所有文件;當(dāng)所有的目錄入口被讀完而沒(méi)有條目可讀時(shí),函數(shù)返回一個(gè)空字符串到f_name[],據(jù)此可判斷目錄內(nèi)所有文件是否讀完;如果一個(gè)空指針賦給FileInfo,將返回從第一個(gè)文件開(kāi)始讀?。划?dāng)LFN功能啟用時(shí),文件信息結(jié)構(gòu)體中的lfname和lfsize必須在使用f_readdir函數(shù)前初始化為有效值,lfname是一個(gè)指向字符串緩沖區(qū)返回長(zhǎng)文件名的指針,lfsize是字符串緩沖區(qū)的大小,f_readdirf_readdir函數(shù)04FATFS文件系統(tǒng)示例FATFS文件系統(tǒng)介紹FATFS文件系統(tǒng)示例04測(cè)試程序編寫(xiě)intmain(void){SD_Errorsd_error;UINTbw=0,br=0;FILfp;FATFSfs;FRESULTfresult;u8buff[]={"BUFFERSTM32F407ZGT6FATFSTEST!"};u16len=strlen((char*)buff);u8read_buff[100]={0};

RTC_init(rtc_dates);//RTC初始化sd_error=SD_Init();//SD卡初始化

//初始化SD卡到成功為止while(sd_error!=SD_OK){sd_error=fresult=f_write(&fp,buff,len,&bw);

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論