## FATFS

The `FATFS` structure (filesystem 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 of the structure is done by volume mount process whenever necessary. Application program must not modify any member in this structure, or the FAT volume will be collapsed.

    typedef struct {
        BYTE    fs_type;      /* FAT type (0, FS_FAT12, FS_FAT16, FS_FAT32 or FS_EXFAT) */
        BYTE    pdrv;         /* Hosting physical drive of this volume */
        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;           /* Volume mount ID */
        WORD    n_rootdir;    /* Number of root directory entries (FAT12/16) */
        WORD    csize;        /* Sectors per cluster */
    #if FF_MAX_SS != FF_MIN_SS
        WORD    ssize;        /* Sector size (512,1024,2048 or 4096) */
    #endif
    #if FF_FS_EXFAT
        BYTE*   dirbuf;       /* Directory entry block scratchpad buffer */
    #endif
    #if FF_FS_REENTRANT
        FF_SYNC_t sobj;       /* Identifier of sync object */
    #endif
    #if !FF_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 FF_FS_RPATH
        DWORD   cdir;         /* Cluster number of current directory (0:root) */
    #if FF_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 */
        LBA_t   volbase;      /* Volume base LBA */
        LBA_t   fatbase;      /* FAT base LBA */
        LBA_t   dirbase;      /* Root directory base (LBA|Cluster) */
        LBA_t   database;     /* Data base LBA */
        LBA_t   winsect;      /* Sector LBA appearing in the win[] */
        BYTE    win[FF_MAX_SS]; /* Disk access window for directory, FAT (and file data at tiny cfg) */
    } FATFS;

Return