fat文件系统详解,fat16文件系统详解
/* - /
2012年FatFs-fatfilesystemmoduleinclucanvalr 0.09 a(C)ChaN年
/- /
/FatFsmoduleisagenericFATfilesystemmoduleforsmallembeddedsystems .
/thisisaforesoftwaretableopenedforeducation,researchandcommercial
/development sunderlicensepolicyofflowingterms .
/版权所有(C)2012年,更改,保留所有权利。
/* thefatfsmoduleisafreesoftwareandhereisnowarranty .
/*无限制使用.您可以使用、修改和重新分配
/您负责的个人、非营利或商业产品.
/* redistrationsofsourcedemustreatintheopyrightnotice .
/- */
#ifndef_FATFS
#define_FATFS4004/*版本IDRevisionID*/
#ifdef__cplusplus
外部C {
#endif
#includeinteger.h/*基本整数类型Basicintegertypes*/
# include ff conf。h /* FATF配置选项FatFsconfigurationoptions*/
#if_FATFS!=_FFCONF
# errorWrongconfigurationfile(ff conf。h).
#endif
/*容量管理的定义定义sofvolumemanagement*/
#if_MULTI_PARTITION/*多分区配置multiplepartitionconfiguration */
数据类型说明结构{
字节PD;/*物理驱动号Physicaldrivenumber*/
字节pt;/*分区:0:自动检测,1-4:强制分区分区:0:自动检测,1-4:强制分区)*/
}分区;
extern PARTITIONVolToPart[];/*卷分区解析表卷分区分辨率表*/
# defineLD2PD(vol)(VolToPart[vol]).pd)/*获取物理驱动号Getphysicaldrivenumber*/
# defineLD2PT(vol)(VolToPart[vol]).pt)/*获取分区索引Getpartitionindex*/
#else/*单分区配置单一分区配置*/
#defineLD2PD(vol)(BYTE)(vol)/*每个逻辑驱动器都和一个物理驱动号对应eachlogicaldriveisboundtothemaphysicaldrivennumber */
#defineLD2PT(vol)0/*始终安装在第一分区或者sfdalwaysmounts第一分区或SFD */
#endif
/*FatFsAPI路径名称字符串类型TypeofpathnamestringsonFatFsAPI */
# if _ LFN _ UNICODE/* UNICODE string */
#如果!使用长肥网络
# error _ LFN _ unicode在非lfn CFG中必须是0 .
#endif
# TCHAR国际有限公司
typedef WCHAR TCHAR;
#define_T(x)L##x
#define_TEXT(x)L##x
#endif
#else/*ANSI/OEM字符串ANSI/OEMstring*/
# TCHAR国际有限公司
typedef char TCHAR;
#define_T(x)x
#define_TEXT(x)x
#endif
#endif
/*文件系统对象结构文件系统对象结构(金融行动任务组)*/
数据类型说明结构{
字节fs _ type/*脂肪子类型(0:没安装)FATsub类型(0:未安装)*/
字节drv/*物理驱动器号Physicaldrivenumber*/
字节csize/*每簇的扇区数Sectorspercluster(1,2,4.128)*/
字节n _ fats/*文件配置表(胖)的副本数numberoftaccopies(1,2)*/
字节wflag/*?win[]dirty标志(1:mustbewrittenback)*/
字节fsi _ flag/*?fsinfodirtyflag(1:mustbewrittenback)*/
单词id;/*文件系统安装IDFilesystemmountID*/
WORD n _ rootdir/*根目录的数量numberofrootdirectoryentries(FAT12/16)*/
#if_MAX_SS!=512
WORD ssize/*每扇区字节字节数(512,1024,2048或4096)*/
#endif
#if_FS_REENTRANT
_ SYNC _ tsobj/*同步对象标识符Identifierofsyncobject*/
#endif
#如果!_FS_READONLY
DWORD last _ cluster/*最后分配的簇lastlocatedcluster */
DWORD free _ cluster/*多余的簇数Numberoffreeclusters*/
DWORD FSI _ sector/* fsinfosector(fat 32)*/
#endif
#如果文件系统路径
DWORD cdir/*当前目录的起始簇(0根)Currentdirectorystartcluster(0:root)*/
#endif
DWORD n _ fatent/*文件配置表的数出席人数(=聚类数2)*/
DWORD fsize/*扇区的文档配置表SectorsperFAT*/
DWORD fatbase/*文档配置表开始的扇区FATstartsector*/
DWORD dirbase/*根目录开始的扇区rootdirectorystartsector(fat 32:Cluster #)*/
双字节值数据库;/*数据开始的扇区Datastartsector*/
德沃德温塞特;/*当前扇区出现在win[]Currentsectorappearinginthewin[]*/
BYTE win[_ MAX _ SS];/*目录的磁盘访问窗口,文件配置表(和小的稳频发电机(发生器)(恒定频率发生器的缩写)数据)DiskaccesswindowforDirectory,FAT(andDataontinycfg)*/
} FATFS
/*文件对象的结构Fileobjectstructure(FIL)*/
数据类型说明结构{
FATFS * fs/*对相关文件系统对象的指针pointertotherelatedfilesystemobject */
单词id;/*相关的文件系统的文件系统挂载对象IDFilesystemmountIDoftherelatedfilesystemobject */
字节标志;/*文件状态标志Filestatusflags*/
字节pad1
DWORD fptr/*文件的读/写指针文件读/写指针(0 edonfileopen)*/
DWORD fsize/*文件大小文件大小*/
DWORD sclust/*文件数据的起始簇filedatastartcluster(0:无数据群集,always0whenfsizeis0)*/
双字组;/*文件读写指针的当前簇Currentclusteroffpter*/
DWORD dsect/*文件读写的当前数据扇区currentdatasectorofpter */
#如果!_FS_READONLY
DWORD dir _ sect/*扇区包含的目录条目sectorcontainingthedirectoryentry */
字节* dir _ ptr/*在窗口中的目录项的指针指针目录尝试窗口*/
#endif
#if_USE_FASTSEEK
DWORD * cltbl/*链簇映射表指针指针群集链接映射表(nullonfileopen)*/
#endif
#if_FS_LOCK
UINT lockid/*文件锁定IDFilelockID(indexoffilesemaphoretableFiles[])*/
#endif
#如果!_FS_TINY
BYTE buf[_ MAX _ SS];/*文件数据读/写缓冲Filedataread/writebuffer*/
#endif
} FIL
/*目录结构对象目录对象结构(DIR)*/
数据类型说明结构{
FATFS * fs/*主文件系统对象的指针pointertotheoownerfilesystemobject */
单词id;/*主文件系统安装IDOwnerfilesystemmountID*/
单词索引;/*当前读写索引数Currentread/writeindexnumber*/
DWORD sclust/*表的起始簇Tablestartcluster(0:Rootdir)*/
双字组;/*当前簇当前集群*/
德沃德教派;/*当前扇区Currentsector*/
字节*目录;/*当前单频网络指针在win[]pointertothercurrentsfentryinthewin[]*/
字节* fn/*SFN的指针指针输入/输出fn {文件[8],扩展名[3],状态[1]}*/
#如果使用长肥网络
WCHAR * lfn/*LFN工作缓冲区指针PointertotheLFNworkingbuffer*/
WORD lfn _ idx/*最后匹配的长肥网络索引数lastmatchedlfindex number(0x ffff:nol fn)*/
#endif
}目录
/*文件状态结构文件状态结构(FILINFO)*/
数据类型说明结构{
DWORD fsize/*文件大小*/
WORD fdate/*上次修改日期*/
WORD ftime/*Lastmodifiedtime*/
字节fat rib/*属性*/
TCHAR fname[13];/*短文件名(8.3格式)*/
#如果使用长肥网络
TCHAR * lf名称;/*PointertotheLFNbuffer*/
UINT lf size/* SizeofLFNbufferinTCHAR */
#endif
} FILINFO
/*文件函数的返回代码filefunctionreturncode(FRESULT)*/
数据类型说明枚举{
FR_OK=0,/*(0)成功成功*/
FR_DISK_ERR,/*(1)在低电平的磁盘输入-输出层发生硬件错误aharderroreancenthelowleveldiski/ol ayer */
FR_INT_ERR,/*(2)使用错误断言失败*/
FR_NOT_READY,/*(3)物理驱动器不工作physicaldrivecannotwork*/
FR_NO_FILE,/*(4)找不到文件找不到文件*/
FR_NO_PATH,/*(5)找不到路径找不到路径*/
FR_INVALID_NAME,/*(6)路径名格式无效无效的路径名格式*/
FR_DENIED,/*(7)访问拒绝由于禁止访问或者目录满accessdeniedduetoprohibited accessoritoryfull */
FR_EXIST,/*(8)拒绝访问由于禁止访问禁止访问*/
FR_INVALID_OBJECT,/*(9)文件/目录对象是无效的文件/目录对象无效*/
FR_WRITE_PROTECTED,/*(10)物理驱动器写保护物理驱动是受保护的受保护*/
FR_INVALID_DRIVE,/*(11)逻辑驱动器号无效logicaldrivenumberisinvalid*/
FR_NOT_ENABLED,/*(12)卷没有工作空间thevolumehanworkarea */
FR_NO_FILESYSTEM,/*(13)没有可用的卷有novalidFATvolume*/
FR_MKFS_ABORTED,/*(14)f_mkfs()由于任何参数误差中止f _ mkfs()abortedduotoanyparameterror */
FR_TIMEOUT,/*(15)不能获得授权在规定的时间内访问卷无法获得granttoaccessthevolumewithindefined period */
FR_LOCKED,/*(16)操作被拒绝根据文件共享政策操作拒绝符合其他文件共享策略*/
FR _不够_核心,/*(17)LFN无法分配工作缓冲区LFNworkingbuffercouldnotbeallocated */
FR_TOO_MANY_OPEN_FILES,/*(18)打开文件数大于FS _ SHARE打开文件数FS _ SHARE */
FR _无效_参数/*(19)给定的参数无效givenparameterinvalid */
}结果
/* - */
/*发票模块应用程序接口fatfsmodulapplicationinterface */
新鲜装载(字节fatfs *);/*安装/卸载一个逻辑驱动器挂载/卸载相关资讯*/
fresh _ open(wire *、常量TCHAR *、byte);/*打开或创建一个文件Openorcreateafile*/
freudef _ read(fil *、void *、UINT、UINT *);/*从文件中读取数据readdatafromafile
freudef _ lsek(wire *、DWORD):/*改变一个文件对象文件指针movefilepointerofafileobject *。
刀具_关闭(导线*);/*关闭打开的文件对象关闭打开的文件对象*/
freudef _ opendir(dir *、const tchar *);/*打开一个已经存在的目录openanexistiningdirectory */
freudef _ readdir(dir *、filinfo *);/*读一个目录项Readadirectoryitem*/
freudef _ stat(const tchar *、filinfo *);/*获取文件状态getfilestatus */
freudef _ write(fil *、const void *、UINT、UINT *);/*写数据到一个文件Writedatatoafile*/
freudef _ getfree(const tchar *、DWORD *、fatfs * *);/*获取驱动器上的空闲簇数getnumberffreeclustersondrive */
刀具_截断(导线*);/*截断文件Truncatefile*/
新鲜同步(导线*);/*刷新正写入文件的缓存数据flushcacheddataofawritingfile
freudef _ unlink *(注册乍得*);/*删除现有文件或目录deleteanexistiningfiledirdirect */
freudef _ mkdir(const tchar *);/*创建新目录Createanewdirectory*/
freudef _ chmod(const tchar *、BYTE、BYTE);/*改变文件/目录属性Changeattributeofthefile/dir*/
freudef _ utime(const tchar *、const filinfo *);/*改变文件/目录的时间戳更改时间-tamfrehefile/dir */
fresh _ rename(const tchar *、const tchar *);/*重命名/移动文件或目录重命名/移动辅助目录*/
fresultf _ chdrive(字节):/*改变当前的驱动器Changecurrentdrive*/
freudef _ chdir(const tchar *);/*改变当前目录Changecurrentdirectory*/
freudef _ getcwd(tchar *、UINT):/*获取当前目录getcurrentdirectory */
freudef _ forward(fil *、UINT (*)(常量字节*、UINT)、UINT、UINT *);/*向流发送数据forwarddatatothestream
fresultf _ mkfs(字节、字节、UINT):/*创建一个驱动器上的文件系统createaflessystemonthedrive */
fresultf _ fdisk(字节、const DWORD [],请参见*);/*将一个物理驱动器为若干分区dividephysicaldriveonly分区*/
int f_putc(乍得,配线*);/*放一个字符在文件中putaccharertortorsfile */
int f_puts(常量TCHAR *、导线*);/*放一组字符串在文件中putastorsfile */
int f_printf(导线*、常量TCHAR *、-我.);/*将格式化后的字符串的文件putformtedstringtoffefile */
tchar * f _ get(tchar *、int、wire *);/*从文件中获得字符串Getastringfromthefile*/
# define ef _ eof(FP)(((FP)-fptr==(FP)-fsize)?1:0)
# define ef _ error(FP)(((FP)-fa _ _ error旗标)?1:0)
# define _ tell(FP)-fptr
# define _ size(FP)-fsize
#如果捍卫者
# define of(-1)
#endif
/* - */
/*额外的用户定义函数其他用户定义的函数*/
/*RTC函数RTCfunction*/
#如果!S7-1200可编程控制器
S7-1200可编程控制器:
#endif
/*联合支持函数独特的支持功能*/
# if _ use _ lfn/* unicode OEM码转换Unicode-OEMcodeconversion*/
wchar ff _ convert(wchar uint);/* OEM unicode双向转换OEM-单向转换*/
wchar ff _ w toupper(wchar);/*Unicode大写转换unicode大写转换*/
#如果使用LFN==3/*内存函数内存函数*/
S7-1200可编程控制器:/*分配内存块Allocatememoryblock*/
页:1:/*空闲内存块Freememoryblock*/
#endif
#endif
/*同步函数Syncfunctions*/
#if _ fs _再入
int ff_cre_syncobj(字节,_ sync _ t *);/*创建一个同步对象Createasyncobject*/
int ff_req_grant(_SYNC_t):/*锁同步对象lockyncobject */
请参阅ff_rel_grant(_SYNC_t):/*解锁同步对象解锁对象*/
int ff _ del _ sync obj(_ sync _ t);/*D删除同步对象elektioncobject */
#endif
/* - */
/*标志和偏移地址Flagsandoffsetaddress*/
/*文件访问控制和文件状态标志fileaccesscontrolandfilestatusflags(fil。flag)*/
#defineFA_READ0x01
#defineFA_OPEN_EXISTING0x00
#defineFA__ERROR0x80
#如果!_FS_READONLY
#defineFA_WRITE0x02
#defineFA_CREATE_NEW0x04
#defineFA_CREATE_ALWAYS0x08
#defineFA_OPEN_ALWAYS0x10
#defineFA__WRITTEN0x20
#defineFA__DIRTY0x40
#endif
/*脂肪副类型FATsubtype(FATFS.fs_type)*/
#defineFS_FAT121
#defineFS_FAT162
#defineFS_FAT323
/*目录项的文件属性字节fileattributebitsfordirectoryentry */
#defineAM_RDO0x01/*只读只读*/
#defineAM_HID0x02/*隐藏隐藏*/
#defineAM_SYS0x04/*系统系统*/
#defineAM_VOL0x08/*卷标卷标签*/
#defineAM_LFN0x0F/*LFN项LFNentry*/
#defineAM_DIR0x10/*目录目录*/
#defineAM_ARC0x20/*存档存档*/
#defineAM_MASK0x3F/*掩码位Maskofdefinedbits*/
/*快速查找功能Fastseekfeature*/
# define create _ link map0x ffffffff
/* - */
/*多字节字访问宏多字节单词访问宏*/
#if_WORD_ACCESS==1/*FAT结构使字访问EnablewordaccesstotheFATstructure */
# defineLD _ WORD(ptr)(WORD)(*(WORD *)(BYTE *)(ptr))
# defineLD _ DWORD(ptr)(DWORD)(*(DWORD *)(BYTE *)(ptr))
#defineST_WORD(ptr,val)*(WORD *)(BYTE *)(ptr)=(WORD)(val)
#defineST_DWORD(ptr,val)*(DWORD *)(BYTE *)(ptr)=(DWORD)(val)
# else/*脂肪结构用位访问使用逐字节访问结构*/
# defineLD _ WORD(ptr)(WORD)(((WORD)*((BYTE *)(ptr)1)8)(WORD)*(BYTE *)(ptr))
# defineLD _ DWORD(ptr)(DWORD)(((DWORD)*((BYTE *)(ptr)3)24)((DWORD)*((BYTE *)(ptr)2)16)((WORD)*((BYTE *)(ptr)1)8) *(BYTE *)(ptr))
#defineST_WORD(ptr,val)*(BYTE *)(ptr)=(BYTE)(val);*((BYTE *)(ptr)1)=(BYTE)((WORD)(val)8)
#defineST_DWORD(ptr,val)*(BYTE *)(ptr)=(BYTE)(val);*((BYTE *)(ptr)1)=(BYTE)((WORD)(val)8);*((BYTE *)(ptr)2)=(BYTE)((DWORD)(val)16);*((BYTE *)(ptr)3)=(BYTE)((DWORD)(val)24)
#endif
#ifdef__cplusplus
#endif
#endif/*_FATFS*/