2014年6月9日

FatFs - FAT file system module - 筆記

FatFs Module 是日本的嵌入式系統工程師 ChaN 所撰寫的可用於商業的開放式程式碼。

架構如下圖:
圖檔來源:http://elm-chan.org/fsw/ff/00index_e.html
FatFs module 架構

圖檔來源:http://elm-chan.org/fsw/ff/en/appnote.html
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