The FATFS structure (file system object) holds dynamic work area of individual logical drives. It is given by application program and registerd/unregisterd to the FatFs module with f_mount function. Initialization is done on first API call after f_mount function or media change. Application program must not modify any member in this structure, or any data on the FAT volume can be collapsed.
typedef struct { BYTE fs_type; /* File system type (0, FS_FAT12, FS_FAT16, FS_FAT32 or FS_EXFAT) */ BYTE drv; /* Physical drive number */ BYTE n_fats; /* Number of FAT copies (1,2) */ BYTE wflag; /* win[] flag (b0:win[] is dirty) */ BYTE fsi_flag; /* FSINFO flags (b7:Disabled, b0:Dirty) */ WORD id; /* File system mount ID */ WORD n_rootdir; /* Number of root directory entries (FAT12/16) */ WORD csize; /* Sectors per cluster */ #if _MAX_SS != _MIN_SS WORD ssize; /* Sector size (512,1024,2048 or 4096) */ #endif #if _FS_EXFAT BYTE* dirbuf; /* Directory entry block scratchpad buffer */ #endif #if _FS_REENTRANT _SYNC_t sobj; /* Identifier of sync object */ #endif #if !_FS_READONLY DWORD last_clust; /* FSINFO: Last allocated cluster (0xFFFFFFFF if invalid) */ DWORD free_clust; /* FSINFO: Number of free clusters (0xFFFFFFFF if invalid) */ #endif #if _FS_RPATH DWORD cdir; /* Cluster number of current directory (0:root) */ #if _FS_EXFAT DWORD cdc_scl; /* Containing directory start cluster (invalid when cdir is 0) */ DWORD cdc_size; /* b31-b8:Size of containing directory, b7-b0: Chain status */ DWORD cdc_ofs; /* Offset in the containing directory (invalid when cdir is 0) */ #endif #endif DWORD n_fatent; /* Number of FAT entries (Number of clusters + 2) */ DWORD fsize; /* Sectors per FAT */ DWORD volbase; /* Volume base LBA */ DWORD fatbase; /* FAT base LBA */ DWORD dirbase; /* Root directory base (LBA|Cluster) */ DWORD database; /* Data base LBA */ DWORD winsect; /* Sector LBA appearing in the win[] */ BYTE win[_MAX_SS]; /* Disk access window for directory, FAT (and file data at tiny cfg) */ } FATFS;