http://elm-chan.org/fsw/ff/00index_e.html
http://elm-chan.org/fsw/ff/archives.html
ChaNさんによるFatFSに関して見ている(ソースのバージョンはR0.13)。
ff.cにおいてfs->n_fats
の値によって異なる処理をしている。
n_fatsが1か2の時の処理をしているようである。
find_volume()において以下のような実装がある (fmt==1の時)。
ff.c
fs->n_fats = fs->win[BPB_NumFATsEx]; /* Number of FATs */
if (fs->n_fats != 1) return FR_NO_FILESYSTEM; /* (Supports only 1 FAT) */
また、下記のような実装もある (fmt!=1の時)。
ff.c
fs->n_fats = fs->win[BPB_NumFATs]; /* Number of FATs */
if (fs->n_fats != 1 && fs->n_fats != 2) return FR_NO_FILESYSTEM; /* (Must be 1 or 2) */
fmtはcheck_fs()により取得され、check_fs()のコメントで以下のように記載がある。
- 0: FAT
- 1: exFAT
- ...
まとめると下記ということなのだろう。
- exFATの時: n_fats == 1
- FATの時: n_fats == 2
n_fatsが2に対する処理は、FAT関連の処理だと推測される(例としてsync_window())。
ff.c
if (fs->n_fats == 2) disk_write(fs->pdrv, fs->win, fs->winsect + fs->fsize, 1); /* Reflect it to 2nd FAT if needed */