Microchip® Advanced Software Framework

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
FatFS file system service

Service of FatFS file system.

This service provides a generic FAT file system module for the ASF systems.

Macros

#define _DF1S   0
 
#define _EXCVT
 
#define ABORT(fs, res)   { fp->flag |= FA__ERROR; LEAVE_FF(fs, res); }
 
#define BPB_BkBootSec   50 /* Offset of backup boot sectot (2) */
 
#define BPB_BytsPerSec   11 /* Sector size [byte] (2) */
 
#define BPB_ExtFlags   40 /* Extended flags (2) */
 
#define BPB_FATSz16   22 /* FAT size [sector] (2) */
 
#define BPB_FATSz32   36 /* FAT size [sector] (4) */
 
#define BPB_FSInfo   48 /* Offset of FSInfo sector (2) */
 
#define BPB_FSVer   42 /* File system version (2) */
 
#define BPB_HiddSec   28 /* Number of special hidden sectors (4) */
 
#define BPB_Media   21 /* Media descriptor (1) */
 
#define BPB_NumFATs   16 /* Number of FAT copies (1) */
 
#define BPB_NumHeads   26 /* Number of heads (2) */
 
#define BPB_RootClus   44 /* Root dir first cluster (4) */
 
#define BPB_RootEntCnt   17 /* Number of root dir entries for FAT12/16 (2) */
 
#define BPB_RsvdSecCnt   14 /* Size of reserved area [sector] (2) */
 
#define BPB_SecPerClus   13 /* Cluster size [sector] (1) */
 
#define BPB_SecPerTrk   24 /* Track size [sector] (2) */
 
#define BPB_TotSec16   19 /* Volume size [sector] (2) */
 
#define BPB_TotSec32   32 /* Volume size [sector] (4) */
 
#define BS_55AA   510 /* Boot sector signature (2) */
 
#define BS_BootSig   38 /* Extended boot signature (1) */
 
#define BS_BootSig32   66 /* Extended boot signature (1) */
 
#define BS_DrvNum   36 /* Physical drive number (2) */
 
#define BS_DrvNum32   64 /* Physical drive number (2) */
 
#define BS_FilSysType   54 /* File system type (1) */
 
#define BS_FilSysType32   82 /* File system type (1) */
 
#define BS_jmpBoot   0 /* Jump instruction (3) */
 
#define BS_OEMName   3 /* OEM name (8) */
 
#define BS_VolID   39 /* Volume serial number (4) */
 
#define BS_VolID32   67 /* Volume serial number (4) */
 
#define BS_VolLab   43 /* Volume label (8) */
 
#define BS_VolLab32   71 /* Volume label (8) */
 
#define DDE   0xE5 /* Deleted directory enrty mark in DIR_Name[0] */
 
#define DEF_NAMEBUF   BYTE sfn[12]; WCHAR lbuf[_MAX_LFN+1]
 
#define DIR_Attr   11 /* Attribute (1) */
 
#define DIR_CrtDate   16 /* Created date (2) */
 
#define DIR_CrtTime   14 /* Created time (2) */
 
#define DIR_FileSize   28 /* File size (4) */
 
#define DIR_FstClusHI   20 /* Higher 16-bit of first cluster (2) */
 
#define DIR_FstClusLO   26 /* Lower 16-bit of first cluster (2) */
 
#define DIR_Name   0 /* Short file name (11) */
 
#define DIR_NTres   12 /* NT flag (1) */
 
#define DIR_WrtDate   24 /* Modified date (2) */
 
#define DIR_WrtTime   22 /* Modified time (2) */
 
#define ENTER_FF(fs)
 
#define FREE_BUF()
 
#define FSI_Free_Count   488 /* FSI: Number of free clusters (4) */
 
#define FSI_LeadSig   0 /* FSI: Leading signature (4) */
 
#define FSI_Nxt_Free   492 /* FSI: Last allocated cluster (4) */
 
#define FSI_StrucSig   484 /* FSI: Structure signature (4) */
 
#define INIT_BUF(dobj)   { (dobj).fn = sfn; (dobj).lfn = lbuf; }
 
#define IsDBCS1(c)   0
 
#define IsDBCS2(c)   0
 
#define IsDigit(c)   (((c)>='0')&&((c)<='9'))
 
#define IsLower(c)   (((c)>='a')&&((c)<='z'))
 
#define IsUpper(c)   (((c)>='A')&&((c)<='Z'))
 
#define LD_CLUST(dir)   (((DWORD)LD_WORD(dir+DIR_FstClusHI)<<16) | LD_WORD(dir+DIR_FstClusLO))
 
#define LDIR_Attr   11 /* LFN attribute (1) */
 
#define LDIR_Chksum   13 /* Sum of corresponding SFN entry */
 
#define LDIR_FstClusLO   26 /* Filled by zero (0) */
 
#define LDIR_Ord   0 /* LFN entry order and LLE flag (1) */
 
#define LDIR_Type   12 /* LFN type (1) */
 
#define LEAVE_FF(fs, res)   return res
 
#define LLE   0x40 /* Last long entry flag in LDIR_Ord */
 
#define MBR_Table   446 /* MBR: Partition table offset (2) */
 
#define MIN_FAT16   4086 /* Minimum number of clusters for FAT16 */
 
#define MIN_FAT32   65526 /* Minimum number of clusters for FAT32 */
 
#define N_FATS   1 /* Number of FAT copies (1 or 2) */
 
#define N_ROOTDIR   512 /* Number of root dir entries for FAT12/16 */
 
#define NDDE   0x05 /* Replacement of a character collides with DDE */
 
#define NS   11 /* Index of name status byte in fn[] */
 
#define NS_BODY   0x08 /* Lower case flag (body) */
 
#define NS_DOT   0x20 /* Dot entry */
 
#define NS_EXT   0x10 /* Lower case flag (ext) */
 
#define NS_LAST   0x04 /* Last segment */
 
#define NS_LFN   0x02 /* Force to create LFN entry */
 
#define NS_LOSS   0x01 /* Out of 8.3 format */
 
#define SS(fs)   512U /* Fixed sector size */
 
#define ST_CLUST(dir, cl)   {ST_WORD(dir+DIR_FstClusLO, cl); ST_WORD(dir+DIR_FstClusHI, (DWORD)cl>>16);}
 
#define SZ_DIR   32 /* Size of a directory entry */
 
#define SZ_PTE   16 /* MBR: Size of a partition table entry */
 

Functions

static BYTE check_fs (FATFS *fs, DWORD sect)
 
static int chk_chr (const char *str, int chr)
 
static FRESULT chk_mounted (const TCHAR **path, FATFS **rfs, BYTE chk_wp)
 
static DWORD clust2sect (FATFS *fs, DWORD clst)
 
static int cmp_lfn (WCHAR *lfnbuf, BYTE *dir)
 
static DWORD create_chain (FATFS *fs, DWORD clst)
 
static FRESULT create_name (DIR *dj, const TCHAR **path)
 
static FRESULT dir_find (DIR *dj)
 
static FRESULT dir_next (DIR *dj, int stretch)
 
static FRESULT dir_read (DIR *dj)
 
static FRESULT dir_register (DIR *dj)
 
static FRESULT dir_remove (DIR *dj)
 
static FRESULT dir_sdi (DIR *dj, WORD idx)
 
FRESULT f_chmod (const TCHAR *path, BYTE value, BYTE mask)
 
FRESULT f_close (FIL *fp)
 
FRESULT f_getfree (const TCHAR *path, DWORD *nclst, FATFS **fatfs)
 
FRESULT f_lseek (FIL *fp, DWORD ofs)
 
FRESULT f_mkdir (const TCHAR *path)
 
FRESULT f_mkfs (BYTE drv, BYTE sfd, UINT au)
 
FRESULT f_mount (BYTE vol, FATFS *fs)
 
FRESULT f_open (FIL *fp, const TCHAR *path, BYTE mode)
 
FRESULT f_opendir (DIR *dj, const TCHAR *path)
 
FRESULT f_read (FIL *fp, void *buff, UINT btr, UINT *br)
 
FRESULT f_readdir (DIR *dj, FILINFO *fno)
 
FRESULT f_rename (const TCHAR *path_old, const TCHAR *path_new)
 
FRESULT f_stat (const TCHAR *path, FILINFO *fno)
 
FRESULT f_sync (FIL *fp)
 
FRESULT f_truncate (FIL *fp)
 
FRESULT f_unlink (const TCHAR *path)
 
FRESULT f_utime (const TCHAR *path, const FILINFO *fno)
 
FRESULT f_write (FIL *fp, const void *buff, UINT btw, UINT *bw)
 
static void fit_lfn (const WCHAR *lfnbuf, BYTE *dir, BYTE ord, BYTE sum)
 
static FRESULT follow_path (DIR *dj, const TCHAR *path)
 
static void gen_numname (BYTE *dst, const BYTE *src, const WCHAR *lfn, WORD seq)
 
static DWORD get_fat (FATFS *fs, DWORD clst)
 
static void get_fileinfo (DIR *dj, FILINFO *fno)
 
static int mem_cmp (const void *dst, const void *src, UINT cnt)
 
static void mem_cpy (void *dst, const void *src, UINT cnt)
 
static void mem_set (void *dst, int val, UINT cnt)
 
static FRESULT move_window (FATFS *fs, DWORD sector)
 
static int pick_lfn (WCHAR *lfnbuf, BYTE *dir)
 
static FRESULT put_fat (FATFS *fs, DWORD clst, DWORD val)
 
static FRESULT remove_chain (FATFS *fs, DWORD clst)
 
static BYTE sum_sfn (const BYTE *dir)
 
static FRESULT sync (FATFS *fs)
 
static FRESULT validate (FATFS *fs, WORD id)
 

Variables

static FATFSFatFs [_VOLUMES]
 
static WORD Fsid
 
static const BYTE LfnOfs [] = {1,3,5,7,9,14,16,18,20,22,24,28,30}
 

#define _DF1S   0

Referenced by create_name(), and get_fileinfo().

#define _EXCVT
Value:
{0x80,0x9A,0x90,0xB6,0x8E,0xB7,0x8F,0x80,0xD2,0xD3,0xD4,0xD8,0xD7,0xDE,0x8E,0x8F,0x90,0x92,0x92,0xE2,0x99,0xE3,0xEA,0xEB,0x59,0x99,0x9A,0x9D,0x9C,0x9D,0x9E,0x9F, \
0xB5,0xD6,0xE0,0xE9,0xA5,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0x21,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, \
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC7,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, \
0xE0,0xE1,0xE2,0xE3,0xE5,0xE5,0xE6,0xE7,0xE7,0xE9,0xEA,0xEB,0xED,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF}

Referenced by create_name().

#define ABORT (   fs,
  res 
)    { fp->flag |= FA__ERROR; LEAVE_FF(fs, res); }

Referenced by f_lseek(), f_read(), and f_write().

#define BPB_BkBootSec   50 /* Offset of backup boot sectot (2) */

Referenced by f_mkfs().

#define BPB_BytsPerSec   11 /* Sector size [byte] (2) */

Referenced by chk_mounted(), and f_mkfs().

#define BPB_ExtFlags   40 /* Extended flags (2) */
#define BPB_FATSz16   22 /* FAT size [sector] (2) */

Referenced by chk_mounted(), and f_mkfs().

#define BPB_FATSz32   36 /* FAT size [sector] (4) */

Referenced by chk_mounted(), and f_mkfs().

#define BPB_FSInfo   48 /* Offset of FSInfo sector (2) */

Referenced by chk_mounted(), and f_mkfs().

#define BPB_FSVer   42 /* File system version (2) */
#define BPB_HiddSec   28 /* Number of special hidden sectors (4) */

Referenced by f_mkfs().

#define BPB_Media   21 /* Media descriptor (1) */

Referenced by f_mkfs().

#define BPB_NumFATs   16 /* Number of FAT copies (1) */

Referenced by chk_mounted(), and f_mkfs().

#define BPB_NumHeads   26 /* Number of heads (2) */

Referenced by f_mkfs().

#define BPB_RootClus   44 /* Root dir first cluster (4) */

Referenced by chk_mounted(), and f_mkfs().

#define BPB_RootEntCnt   17 /* Number of root dir entries for FAT12/16 (2) */

Referenced by chk_mounted(), and f_mkfs().

#define BPB_RsvdSecCnt   14 /* Size of reserved area [sector] (2) */

Referenced by chk_mounted(), and f_mkfs().

#define BPB_SecPerClus   13 /* Cluster size [sector] (1) */

Referenced by chk_mounted(), and f_mkfs().

#define BPB_SecPerTrk   24 /* Track size [sector] (2) */

Referenced by f_mkfs().

#define BPB_TotSec16   19 /* Volume size [sector] (2) */

Referenced by chk_mounted(), and f_mkfs().

#define BPB_TotSec32   32 /* Volume size [sector] (4) */

Referenced by chk_mounted(), and f_mkfs().

#define BS_55AA   510 /* Boot sector signature (2) */

Referenced by check_fs(), chk_mounted(), f_mkfs(), and sync().

#define BS_BootSig   38 /* Extended boot signature (1) */

Referenced by f_mkfs().

#define BS_BootSig32   66 /* Extended boot signature (1) */

Referenced by f_mkfs().

#define BS_DrvNum   36 /* Physical drive number (2) */

Referenced by f_mkfs().

#define BS_DrvNum32   64 /* Physical drive number (2) */

Referenced by f_mkfs().

#define BS_FilSysType   54 /* File system type (1) */

Referenced by check_fs().

#define BS_FilSysType32   82 /* File system type (1) */

Referenced by check_fs().

#define BS_jmpBoot   0 /* Jump instruction (3) */
#define BS_OEMName   3 /* OEM name (8) */
#define BS_VolID   39 /* Volume serial number (4) */

Referenced by f_mkfs().

#define BS_VolID32   67 /* Volume serial number (4) */

Referenced by f_mkfs().

#define BS_VolLab   43 /* Volume label (8) */

Referenced by f_mkfs().

#define BS_VolLab32   71 /* Volume label (8) */

Referenced by f_mkfs().

#define DDE   0xE5 /* Deleted directory enrty mark in DIR_Name[0] */
#define DEF_NAMEBUF   BYTE sfn[12]; WCHAR lbuf[_MAX_LFN+1]
#define DIR_Attr   11 /* Attribute (1) */
#define DIR_CrtDate   16 /* Created date (2) */
#define DIR_CrtTime   14 /* Created time (2) */

Referenced by f_open().

#define DIR_FileSize   28 /* File size (4) */

Referenced by f_open(), f_sync(), and get_fileinfo().

#define DIR_FstClusHI   20 /* Higher 16-bit of first cluster (2) */
#define DIR_FstClusLO   26 /* Lower 16-bit of first cluster (2) */
#define DIR_Name   0 /* Short file name (11) */

Referenced by dir_find(), dir_read(), and f_mkdir().

#define DIR_NTres   12 /* NT flag (1) */

Referenced by dir_register(), and get_fileinfo().

#define DIR_WrtDate   24 /* Modified date (2) */

Referenced by f_utime(), and get_fileinfo().

#define DIR_WrtTime   22 /* Modified time (2) */

Referenced by f_mkdir(), f_sync(), f_utime(), and get_fileinfo().

#define ENTER_FF (   fs)

Referenced by chk_mounted(), and validate().

#define FREE_BUF ( )
#define FSI_Free_Count   488 /* FSI: Number of free clusters (4) */

Referenced by chk_mounted(), f_mkfs(), and sync().

#define FSI_LeadSig   0 /* FSI: Leading signature (4) */

Referenced by chk_mounted(), f_mkfs(), and sync().

#define FSI_Nxt_Free   492 /* FSI: Last allocated cluster (4) */

Referenced by chk_mounted(), f_mkfs(), and sync().

#define FSI_StrucSig   484 /* FSI: Structure signature (4) */

Referenced by chk_mounted(), f_mkfs(), and sync().

#define INIT_BUF (   dobj)    { (dobj).fn = sfn; (dobj).lfn = lbuf; }
#define IsDBCS1 (   c)    0
#define IsDBCS2 (   c)    0

Referenced by create_name(), and get_fileinfo().

#define IsDigit (   c)    (((c)>='0')&&((c)<='9'))
#define IsLower (   c)    (((c)>='a')&&((c)<='z'))

Referenced by create_name().

#define IsUpper (   c)    (((c)>='A')&&((c)<='Z'))

Referenced by create_name(), and get_fileinfo().

#define LD_CLUST (   dir)    (((DWORD)LD_WORD(dir+DIR_FstClusHI)<<16) | LD_WORD(dir+DIR_FstClusLO))
#define LDIR_Attr   11 /* LFN attribute (1) */

Referenced by fit_lfn().

#define LDIR_Chksum   13 /* Sum of corresponding SFN entry */

Referenced by dir_find(), dir_read(), and fit_lfn().

#define LDIR_FstClusLO   26 /* Filled by zero (0) */

Referenced by fit_lfn().

#define LDIR_Ord   0 /* LFN entry order and LLE flag (1) */

Referenced by cmp_lfn(), fit_lfn(), and pick_lfn().

#define LDIR_Type   12 /* LFN type (1) */

Referenced by fit_lfn().

#define LEAVE_FF (   fs,
  res 
)    return res
#define LLE   0x40 /* Last long entry flag in LDIR_Ord */
#define MBR_Table   446 /* MBR: Partition table offset (2) */

Referenced by chk_mounted(), and f_mkfs().

#define MIN_FAT16   4086 /* Minimum number of clusters for FAT16 */

Referenced by chk_mounted(), and f_mkfs().

#define MIN_FAT32   65526 /* Minimum number of clusters for FAT32 */

Referenced by chk_mounted(), and f_mkfs().

#define N_FATS   1 /* Number of FAT copies (1 or 2) */

Referenced by f_mkfs().

#define N_ROOTDIR   512 /* Number of root dir entries for FAT12/16 */

Referenced by f_mkfs().

#define NDDE   0x05 /* Replacement of a character collides with DDE */

Referenced by create_name(), and get_fileinfo().

#define NS   11 /* Index of name status byte in fn[] */
#define NS_BODY   0x08 /* Lower case flag (body) */
#define NS_DOT   0x20 /* Dot entry */
#define NS_EXT   0x10 /* Lower case flag (ext) */
#define NS_LAST   0x04 /* Last segment */

Referenced by create_name(), and follow_path().

#define NS_LFN   0x02 /* Force to create LFN entry */

Referenced by create_name(), and dir_register().

#define NS_LOSS   0x01 /* Out of 8.3 format */

Referenced by create_name(), dir_find(), and dir_register().

#define SS (   fs)    512U /* Fixed sector size */
#define ST_CLUST (   dir,
  cl 
)    {ST_WORD(dir+DIR_FstClusLO, cl); ST_WORD(dir+DIR_FstClusHI, (DWORD)cl>>16);}

Referenced by f_mkdir(), f_open(), f_rename(), and f_sync().

#define SZ_DIR   32 /* Size of a directory entry */
#define SZ_PTE   16 /* MBR: Size of a partition table entry */

Referenced by chk_mounted(), and f_mkfs().

static BYTE check_fs ( FATFS fs,
DWORD  sect 
)
static
static int chk_chr ( const char *  str,
int  chr 
)
static

Referenced by create_name().

static DWORD clust2sect ( FATFS fs,
DWORD  clst 
)
static
static int cmp_lfn ( WCHAR lfnbuf,
BYTE dir 
)
static

References _MAX_LFN, ff_wtoupper(), LD_WORD, LDIR_Ord, and LLE.

Referenced by dir_find().

static DWORD create_chain ( FATFS fs,
DWORD  clst 
)
static
static FRESULT create_name ( DIR dj,
const TCHAR **  path 
)
static
static FRESULT dir_remove ( DIR dj)
static
FRESULT f_close ( FIL fp)

References f_sync(), FR_OK, FIL::fs, FIL::id, LEAVE_FF, and validate().

Referenced by run_fatfs_test().

FRESULT f_getfree ( const TCHAR path,
DWORD nclst,
FATFS **  fatfs 
)
FRESULT f_mount ( BYTE  vol,
FATFS fs 
)
static void fit_lfn ( const WCHAR lfnbuf,
BYTE dir,
BYTE  ord,
BYTE  sum 
)
static
static void gen_numname ( BYTE dst,
const BYTE src,
const WCHAR lfn,
WORD  seq 
)
static

References IsDBCS1, and mem_cpy().

Referenced by dir_register().

static int mem_cmp ( const void *  dst,
const void *  src,
UINT  cnt 
)
static

Referenced by dir_find().

static void mem_cpy ( void *  dst,
const void *  src,
UINT  cnt 
)
static
static void mem_set ( void *  dst,
int  val,
UINT  cnt 
)
static
static int pick_lfn ( WCHAR lfnbuf,
BYTE dir 
)
static

References _MAX_LFN, LD_WORD, LDIR_Ord, and LLE.

Referenced by dir_read().

static BYTE sum_sfn ( const BYTE dir)
static

Referenced by dir_find(), dir_read(), and dir_register().

FATFS* FatFs[_VOLUMES]
static
WORD Fsid
static

Referenced by chk_mounted().

const BYTE LfnOfs[] = {1,3,5,7,9,14,16,18,20,22,24,28,30}
static