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;         /* Physical drive that holds this volume */
    BYTE    ldrv;         /* Logical drive number (used only when FF_FS_REENTRANT) */
    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_USE_LFN
    WCHAR*  lfnbuf;       /* Pointer to LFN working buffer */
#endif
#if !FF_FS_READONLY
    DWORD   last_clust;   /* FSINFO: Last allocated cluster (invalid if >=n_fatent) */
    DWORD   free_clust;   /* FSINFO: Number of free clusters (invalid if >=fs->n_fatent-2) */
#endif
#if FF_FS_RPATH
    DWORD   cdir;         /* Cluster number of current directory (0:root) */
#endif
    DWORD   n_fatent;     /* Number of FAT entries (Number of clusters + 2) */
    DWORD   fsize;        /* Sectors per FAT */
    LBA_t   winsect;      /* Sector LBA appearing in the win[] */
    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 */
#if FF_FS_EXFAT
    LBA_t   bitbase;      /* Allocation bitmap base sector */
    BYTE*   dirbuf;       /* Directory entry block scratchpad buffer */
#if FF_FS_RPATH
    FFXCWDS xcwds;        /* Current working directory structure */
    FFXCWDS xcwds2;       /* Working buffer to follow the path */
#endif
#endif
    BYTE    win[FF_MAX_SS]; /* Disk access window for directory, FAT (and file data at tiny cfg) */
} FATFS;

Return