1. 程式人生 > >【轉】FatFS檔案系統介紹及使用例程

【轉】FatFS檔案系統介紹及使用例程

FatFS檔案系統包含了檔案

ff.h         :檔案系統實現標頭檔案,定義有檔案系統所需的資料結構

diskio.h  :底層驅動標頭檔案,就一些狀態巨集的定義和底層驅動函式的申明

integer.h:僅實現資料型別重定義,增加系統的可移植性

ffconf.h :檔案系統配置

ff.c  :檔案系統實現。

diskio.c 底層驅動

FatFs 提供下面的函式API:

f_mount - 註冊/登出一個工作區域(Work Area)

f_open - 開啟/建立一個檔案f_close - 關閉一個檔案

f_read - 讀檔案f_write - 寫檔案

f_lseek - 移動檔案讀/寫指標

f_truncate - 截斷檔案

f_sync - 沖洗緩衝資料 Flush Cached Data

f_opendir - 開啟一個目錄

f_readdir - 讀取目錄條目

f_getfree - 獲取空閒簇 Get Free Clusters

f_stat - 獲取檔案狀態

f_mkdir - 建立一個目錄

f_unlink - 刪除一個檔案或目錄

f_chmod - 改變屬性(Attribute)

f_utime - 改變時間戳(Timestamp)

f_rename - 重新命名/移動一個檔案或資料夾

f_mkfs - 在驅動器上建立一個檔案系統

f_forward - 直接轉移檔案資料到一個數據流 Forward file data to the stream directly

f_gets - 讀一個字串

f_putc - 寫一個字元

f_puts - 寫一個字串

f_printf - 寫一個格式化的字元磁碟I/O介面

f_tell - 獲取當前讀/寫指標

f_eof - 測試一個檔案是否到達檔案末尾

f_size - 獲取一個檔案大小

f_error - 測試一個檔案是否出錯

因為FatFs模組完全與磁碟I/O層分開,因此需要下面的函式來實現底層物理磁碟的讀寫與獲取當前時間。底層磁碟I/O模組並不是FatFs的一部分,並且必須由使用者提供。

disk_initialize - Initialize disk drive 初始化磁碟驅動器

disk_status - Get disk status 獲取磁碟狀態

disk_read - Read sector(s) 讀扇區

disk_write - Write sector(s) 寫扇區

disk_ioctl - Control device dependent features 裝置相關的控制特性

get_fattime - Get current time 獲取當前時間

FatFS系統特性

開啟檔案數量:無限制,與可用記憶體有關。 卷(volume)數量:最多10個。 

檔案大小:與FAT規範有關(最大4G-1位元組)。 

卷大小:與FAT規範有關(在512位元組/扇區上,最大2T位元組) 

簇(Cluster)大小:與FAT規範有關(在512位元組/扇區上,最大64K位元組) 扇區(Sector)大小:與FAT規範有關(最大4K位元組)

建立檔案並讀寫的使用例程

1)f_mount(0, &fatFS);             

2)f_mkfs(0,1,512);                 //建立檔案系統

FRESULT f_mkfs (
 BYTE  Drive,            
 BYTE  PartitioningRule, 
 WORD  AllocSize         );

分割槽規則:當給定0時,首先在驅動器上的第一個扇區建立一個分割槽表,然後檔案系統被建立在分割槽上。這被稱為FDISK格式化,用於硬碟和儲存卡。當給定1時,檔案系統從第一個扇區開始建立,而沒有分割槽表。這被稱為超級軟盤(SFD)格式化,用於軟盤和可移動磁碟。

3)f_getfree("0:", &fre_clust, &fs2)   //獲得磁碟儲存空間大小 

4)f_open(&file1, "/srcfile.txt",  FA_OPEN_ALWAYS | FA_READ | FA_WRITE);  //開啟檔案

FIL     file1;   

5)f_puts(cDataBuf, &file1);    //將cDataBuf[]資料寫入 檔案srcfile.txt

6)f_sync (&file1);   //重新整理檔案

7)f_lseek(&file1, 0);   //從檔案 偏移位元組0出開始讀檔案

8)f_read(&file1, buffer, 10,&r);     //讀出10個位元組到 buffer[]中

9)f_close(&file1);   //操作完成  關閉檔案

建立目錄例程

1) f_chdir("0:");   //切換到根目錄

2)f_mkdir("folder");   //建立目錄 folder

3)f_open(&file1, "folder/oldname2.txt", FA_CREATE_ALWAYS | FA_WRITE);  //開啟folder目錄下的檔案

4)f_close(&file1);    //關閉檔案