FatFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块。FatFs 的编写遵循ANSI C,并且完全与磁盘I/O层分开。因此,它独立(不依赖)于硬件架构。它可以被嵌入到低成本的微控制器中,如AVR, 8051, PIC, ARM, Z80, 68K 等等,而不需要做任何修改。官网http://elm-chan.org/。本文以0.09b版本为准(点击下载)。
FatFs开发包解压后有两个文件夹,分别是doc和src。doc是技术文档,src是源码。源码包含了如下文件:
ff.h :文件系统实现头文件,定义有文件系统所需的数据结构
diskio.h :底层驱动头文件,就一些状态宏的定义和底层驱动函数的申明
integer.h :仅实现数据类型重定义,增加系统的可移植性
ffconf.h :文件系统配置
ff.c :文件系统实现。
diskio.c 底层驱动
本文主要说明功能配置,即ffconf.h
_FS_TINY:文件系统为标准的还是微型的,[0]标准,[1]微型;
_FS_READONLY:文件系统是否为只读,[0]可读写,[1]只读,若只读则f_write、f_sync、 f_unlink、f_mkdir、f_chmod、f_rename、f_truncate和f_getfree不可用;
_FS_MINIMIZE:裁剪文件系统的功能,[0]所有功能,[1]f_stat、f_getfree、f_unlink、f_mkdir、f_chmod、f_truncate、f_rename移除,[2]在1的基础上移除f_lseek;
_USE_STRFUNC:是否允许字符串操作,[0]不允许,[1]允许,但不进行LF-CRLF转换,[2]允许,且进行LF-CRLF转换,即遇到换行符时,自动转换为回车换行符,如果工作在windows下,为保证文件兼容性(如换行符’\n’和回车符’\r’)需将此项设置为2;
_USE_MKFS:是否允许使用f_mkfs函数创建文件夹,[0]不允许,[1]允许;
_USE_FASTSEEK:是否开启快速索引,[0]不开启后,[1]开启,开启后会使用FIL结构体中的cltbl元素来加快搜索;
_USE_LABEL:用来设置是否支持磁盘盘符读取与设置,[0]不支持,[1]支持,支持后可以通过f_getlabel()和f_setlabel()读取和设置磁盘盘符;
_USE_FORWARD:用于允许f_forward函数,[0]不允许,[1]允许,只有开启tiny文件系统时才用到,该函数用于将读写的数据立即转存到数据流中,以节省RAM空间;
_CODE_PAGE:指定目标系统使用的OEM代码页。
_USE_LFN:使能或禁用长文件名(LFN)。当使能长文件名后,需要向工程添加包含Unicode支持函数的option/unicode.c文件。工作缓冲区增加(_MAX_LFN + 1) * 2个字节,如果使能exFAT,额外多需要608字节缓存。如果工作缓存使用栈内存,需当心栈溢出;如果工作缓冲使用堆内存,需要向工程添加内存管理函数ff_memalloc和ff_memfree。[0]禁用长文件名,使用DOS8.3各式命名,[1]使能长文建明,缓冲区使用静态内存,没有线程保护,[2]使能长文件名,缓冲区使用栈空间,[3]使用长文件名,缓冲区使用堆空间,动态分配;
_MAX_LFN:定义长文件名工作缓冲区大小,可以为12~255字节。当禁用长文件名时,此选项无效。
_LFN_UNICODE:使能或禁用Unicode。[0]使用ANSI/OEM编码,[1]使用Unicode编码,如果要使用Unicode(UTF16)字符串路径名,需要使能LFN和设置本选项为1。此选项还影响字符串I/O功能函数。如果禁用长文件名,此选项必须为0。
_FS_RPATH:配置相对路径函数。[0]禁用相对路径函数并从工程中移除,[1]使能相对路径,f_chdir和f_chdrive函数有效,[2]使能相对路径,在1的基础上f_getcwd函数有效;
_VOLUMES:配置可用卷的数目,可设置为1~10。
_MAX_SS:定义扇区大小,有效值为512、1024、2048、4096,需要根据硬件配置来定义。都设置为512可以兼容所有SD卡和硬盘,但是在某些片上Flash和其它存储设备可能需要更大值。
_MULTI_PARTITION:使能或禁止多分区函数。[0]禁能分区函数,[1]使能分区函数。禁止时每个逻辑驱动器数目一定与物理驱动器数目相同;
_USE_ERASE:是否允许扇区擦除,[0]禁止,[1]允许,若允许则要在disk_ioctl函数中添加擦除命令代码;
_WORD_ACCESS:数据递进格式,[0]即以字节为单位递进,兼容性更强,[1]word递进(2Byte),此项取决于硬件是否支持两字节递进;
_FS_REENTRANT:FatFs模块的可重入性,就是能否被多线程同时访问。[0]禁止,[1]允许,注意,访问不同卷上的文件/目录总是可重入的。
_FS_TIMEOUT:重入设置超时时间,单位为系统时钟滴答周期,当宏_FS_REENTRANT=0时,本设置无效。
_SYNC_t:定义同步对象类型,取决于O/S。当宏_FS_REENTRANT=0时,本设置无效。
_FS_LOCK:使能或禁用文件锁功能。控制重复打开文件和非法打开文件对象。[0]禁用文件锁,[1]使能文件锁;