微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > stm32+sdio+fatfs文件系统 源码分析

stm32+sdio+fatfs文件系统 源码分析

时间:11-18 来源:互联网 点击:

#if _DF1S /* DBCS configuration */双字节编码相关的设定,暂时不理会它。

#if _MULTI_PARTITION /* Multiple partition configuration */

//该变量定义为1时,支持一个磁盘的多个分区。

typedef struct _PARTITION {

BYTE pd; /* Physical drive# */

BYTE pt; /* Partition # (0-3) */

} PARTITION;

Extern const PARTITION Drives[];//如果支持分区,则声明变量Drivers

#define LD2PD(drv) (Drives[drv].pd)/* 获得磁盘对应的物理磁盘

#define LD2PT(drv) (Drives[drv].pt)/*获得磁盘对应的分区

#else /* Single partition configuration */

#define LD2PD(drv) (drv) /* Physical drive# is equal to the logical drive# */

#define LD2PT(drv) 0 /* Always mounts the 1st partition */

#if _MAX_SS == 512//一般扇区长度取512字节。

#define SS(fs) 512U

#if _LFN_UNICODE && _USE_LFN

typedef WCHAR XCHAR; /* Unicode */ XCHAR是文件名的码型所用。

#else

typedef char XCHAR; /* SBCS, DBCS */

#endif

typedef struct _FATFS_ {

BYTE fs_type; /* FAT sub type */

BYTE drive; /*对应实际驱动号01--- */

BYTE csize; /* 每个簇的扇区数目 */

先查一下簇的含义:应该是文件数据分配的基本单位。

BYTE n_fats; /* 文件分配表的数目 */

FAT文件系统依次应该是:引导扇区、文件分配表两个、根目录区和数据区。

BYTE wflag; /* win[] dirty flag (1:must be written back) */

//文件是否改动的标志,为1时要回写。

WORD id; /* File system mount ID 文件系统加载ID*/

WORD n_rootdir; /* 根目录区目录项的数目 */

#if _FS_REENTRANT

_SYNC_t sobj; /* 允许重入,则定义同步对象 */

#endif

#if _MAX_SS != 512

WORD s_size; /* Sector size */

#endif

#if !_FS_READONLY //文件为可写

BYTE fsi_flag; /* fsinfo dirty flag (1:must be written back) */

//文件需要回写的标志

DWORD last_clust; /* Last allocated cluster */

DWORD free_clust; /* Number of free clusters */

DWORD fsi_sector; /* fsinfo sector */

#endif

#if _FS_RPATH

DWORD cdir; /* 使用相对路径,则要存储文件系统当前目录

#endif

DWORD sects_fat; /*文件分配表占用的扇区

DWORD max_clust; /* 最大簇数

DWORD fatbase; /*文件分配表开始扇区

DWORD dirbase; /* 如果是FAT32,根目录开始扇区需要首先得到。

DWORD database; /* 数据区开始扇区

DWORD winsect; /* Current sector appearing in the win[] */

//目前的扇区在win[]里面,这个win[]数组暂时还不知道含义。

BYTE win[_MAX_SS];/* Disk access window for Directory/FAT */

//这是一个win[512]数组,存储着一个扇区,好像作为扇区缓冲使用。

} FATFS;

typedef struct _DIR_ {

FATFS* fs;/* Pointer to the owner file system object */指向相应文件系统对象。

WORD id; /* 文件系统加载ID*/

WORD index; /* Current read/write index number */目前读写索引代码

DWORD sclust; /* Table start cluster (0:Static table) */文件数据区开始簇

DWORD clust; /* Current cluster */ 目前处理的簇

DWORD sect; /* Current sector */ 目前簇里对应的扇区

BYTE* dir; /* Pointer to the current SFN entry in the win[] */

BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */

#if _USE_LFN

WCHAR* lfn; /* Pointer to the LFN working buffer */ 指向长文件名缓冲。

WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */

#endif

} DIR;

typedef struct _FIL_ {

FATFS* fs; /* Pointer to the owner file system object */

WORD id; /* Owner file system mount ID */

BYTE flag; /* File status flags */文件状态标志

BYTE csect; /* Sector address in the cluster */扇区偏移

DWORD fptr; /* File R/W pointer */ 读写指针

DWORD fsize; /* File size */

DWORD org_clust; /* File start cluster */文件开始簇

DWORD curr_clust; /* Current cluster */当前簇

DWORD dsect; /* Current data sector */文件当前扇区

#if !_FS_READONLY

DWORD dir_sect; /* Sector containing the directory entry */该文件目录项对应所在的扇区

BYTE* dir_ptr; /* Ponter to the directory entry in the window */

#endif

#if !_FS_TINY

BYTE buf[_MAX_SS];/* File R/W buffer */文件读写缓冲

#endif

} FIL;

/* File status structure */

typedef struct _FIL

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top