# FatFs - FATFS

## FATFS

The `FATFS` structure 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. Following members are in standard configuration. There is no member that can be changed from the application program.

    typedef struct _FATFS_ {
        BYTE    fs_type;    /* FAT sub type */
        BYTE    drive;      /* Physical drive number */
        BYTE    csize;      /* Number of sectors per cluster */
        BYTE    n_fats;     /* Number of FAT copies */
        BYTE    wflag;      /* win[] dirty flag (1:must be written back) */
        BYTE    fsi_flag;   /* fsinfo dirty flag (1:must be written back) */
        WORD    id;         /* File system mount ID */
        WORD    n_rootdir;  /* Number of root directory entries (0 on FAT32) */
    #if _FS_REENTRANT
        _SYNC_t sobj;       /* Identifier of sync object */
    #endif
    #if _MAX_SS != 512
        WORD    s_size;     /* Sector size */
    #endif
    #if !_FS_READONLY
        DWORD   last_clust; /* Last allocated cluster */
        DWORD   free_clust; /* Number of free clusters */
        DWORD   fsi_sector; /* fsinfo sector */
    #endif
    #if _FS_RPATH
        DWORD   cdir;       /* Current directory (0:root)*/
    #endif
        DWORD   sects_fat;  /* Sectors per fat */
        DWORD   max_clust;  /* Maximum cluster# + 1. Number of clusters is max_clust - 2 */
        DWORD   fatbase;    /* FAT start sector */
        DWORD   dirbase;    /* Root directory start sector (Cluster# on FAT32) */
        DWORD   database;   /* Data start sector */
        DWORD   winsect;    /* Current sector appearing in the win[] */
        BYTE    win[_MAX_SS];/* Disk access window for Directory/FAT */
    } FATFS;

Return