# FatFs - FATFS

## FATFS

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 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 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;

Return