架構如下圖:
FatFs module 架構 |
FatFs module 程式碼檔案架構 |
檔案:
1. ff.c、ff.h:FatFs module 主要的程式碼。
2. diskio.c:使用者須自行在這添加與底層連接的函數。
3. ffconf.h:設定及是否打開 FatFs 參數及函數。
- _FS_READONLY:唯讀模式。
- _USE_STRFUNC:開啟可使用字串函數。
函數:
1. f_mount(&fp, "", 0):掛載儲存裝置 。
- fp: 檔案結構指針。
2. f_mount(NULL, "", 0):載卸儲存裝置。
3. f_stat("file name", &filinfo):確認該檔案或資料夾是否存在,如不用file info 可輸入NULL。
- filinfo: FILINFO型態變數 - 參考。
4. f_opendir(&fp, path):開啟資料夾
- path:要開啟的資料夾名稱。
5. f_readdir(&dir, &fno):讀取資料夾內所有檔案或資料夾名稱。
- fno:名稱放置的陣列位址。
4. f_open(&fp, "file name", mode):開啟檔案,並將檔案訊息放在結構指針。
- fp: 檔案結構指針。
- mode :
1. FA_READ: 讀取檔案指令
2. FA_WRITE:寫入檔案指令
3. FA_OPEN_EXISTING:開啟檔案,不存在則開啟失敗。
4. FA_OPEN_ALWAYS: 開啟檔案,不存在則建立新檔案。
5. FA_CREATE_NEW: 建立檔案,已有相同名稱則失敗。
6. FA_CREATE_ALWAYS:建立檔案,有相同名稱則覆蓋過去。
5. f_close(&fp):關閉檔案,每次開啟檔案不使用時皆要關閉。
6. f_sync(&fp):刷新檔案,與close 一樣的作用可是沒實際關閉檔案,可防止檔案遺失。
-參考:http://elm-chan.org/fsw/ff/en/appnote.html - Critical Section。
7. f_read(&fp, &buff, data len, read len):讀取data len 數量byte 到Buffer。
-buff:資料放置的陣列位址。
-data len:要讀取的檔案Byte 數量。
-read len:實際讀取到的Byte 數量,data len 超過檔案大小會只讀取到檔案的最後Byte。
8. f_write(&fp, &buff, data len, write len):寫入data len 數量byte 到儲存裝置。
-buff:資料放置的陣列位址。
-data len:要寫入的檔案Byte 數量。
-write len:實際寫入的Byte 數量,如儲存裝置已滿會停止寫入。
9. f_puts(*str, &fp):寫入一字串到檔案。(#字串函數)
10. f_printf(&fp, "%d", 123):使用方法與 printf() 一樣。(#字串函數)
File function return:
1. FR_OK: 所呼叫的Function 執行任務完成。
2. FR_DISK_ERR
3. FR_INT_ERR
4. FR_NOT_READY
5. FR_NO_FILE:沒有該檔案
6. FR_NO_PATH
7. FR_INVALID_NAME
8. FR_DENIED
9. FR_EXIST
10. FR_INVALID_OBJECT
11. FR_WRITE_PROTECTED
12. FR_INVALID_DRIVE
13. FR_NOT_ENABLED
14. FR_NO_FILESYSTEM
15. FR_MKFS_ABORTED
16. FR_TIMEOUT
17. FR_LOCKED
18. FR_NOT_ENOUGH_CORE
19. FR_TOO_MANY_OPEN_FILES
20. FR_INVALID_PARAMETER
參考文獻及資料來源:
1. http://elm-chan.org/fsw/ff/00index_e.html