FatFs文件系统(通用FAT文件系统模块)
介绍
FatFs 是一款面向小型嵌入式系统的通用 FAT/exFAT 文件系统模块。
该模块遵循 ANSI C(C89)标准编写,并与磁盘控制层完全分离,因此具备平台与存储设备无关性。
它可集成到资源有限的小型微控制器中,例如 8051、PIC、AVR、ARM、Z80、RX 等系列。
此外,还提供适用于内存极度受限系统的 Petit FatFs 模块(微型),可在此处获取。
功能特性
- 兼容DOS/Windows的FAT/exFAT文件系统。
- 平台无关。易于移植。
- 程序代码和工作区占用资源极少。
- 支持以下各种配置选项:
(1) ANSI/OEM 或 Unicode 格式的长文件名
(2)支持大容量存储的 exFAT 文件系统、64 位逻辑块地址(LBA)以及全局唯一标识分区表(GPT)。
(3)适用于实时操作系统的线程安全。
(4)多个卷(物理驱动器和分区,最多10个卷)。
(5)可变扇区大小。
(6)包含双字节字符集的多种代码页。
(7)只读、可选的API、I/O缓冲区等…
层级结构
最顶层是应用层:使用者只需要调用FATFS模块提供给用户的一系列应用接口函数(如f_open, f_read, f_write和f_close等),就可以像在PC上读写文件那样简单。
中间层FATFS模块:实现了FAT文件读写协议;它提供了ff.c和ff.h文件,一般情况下不用修改,使用时将头文件包含进去即可。
最底层是FATFS模块的底层接口:包括存储媒介读写接口和供给文件创建修改时间的实时时钟,需要在移植时编写对应的代码。
官网下载
FatFs官网地址:https://elm-chan.org/fsw/ff/
FatFs官网界面如下:
往下划到底,可以下载源码。
点击最新版本压缩包,选择下载路径,就可以下载最新的源码。
点击最新补丁,可以看到已发现并解决的BUG。
点击历史版本,可以下载其他版本的源码。
FatFs是完整版,Petit FatFs是阉割版。
Petit FatFs是用于小型8位微控制器的FatFs模块的子集,功能简单,占用资源小。
它是按照ANSI C编写的,并且与磁盘I/O层完全分开。即使RAM大小小于扇区大小,也可以将其合并到内存有限的微型微控制器中。
源码文件说明
下载后的文件压缩包,需要解压。
解压后,点开文件,具体如下:
documents文件(FatFs说明资料)
这个文件都是说明资料,简单了解一下就可以。
source文件(FatFs程序源码)
具体说明如下表:
| 文件 | 说明 |
|---|---|
| 00history.txt | 版本修订记录 |
| 00readme.txt | 说明文件 |
| diskio.c | 底层驱动文件 |
| diskio.h | 底层驱动头文件 |
| ff.c | 应用接口文件 |
| ff.h | 应用接口头文件 |
| ffconf.h | 配置头文件(宏配置) |
| ffsystem.c | 操作系统相关适配函数示例文件 |
| ffunicode.c | Unicode 编码工具函数文件 |
底层source/ diskio.c、source/diskio.h
| 函数 | 作用 |
|---|---|
| disk_status | 获取驱动状态 |
| disk_initialize | 初始化驱动 |
| disk_read | 读取数据 |
| disk_write | 写入数据 |
| disk_ioctl | 控制设备相关功能 |
应用接口层source/ff.c、source/ff.h
(1)文件访问函数
- f_open – 打开/创建文件
- f_close – 关闭已打开的文件
- f_read – 从文件读取数据
- f_write – 将数据写入文件
- f_lseek – 移动读写指针,扩展文件大小
- f_truncate – 截断文件大小
- f_sync – 刷新缓存数据
- f_forward – 将数据转发到流
- f_expand --为文件分配连续块
- f_gets – 读取字符串
- f_putc – 写入一个字符
- f_puts – 写入字符串
- f_printf – 写入格式化字符串
- f_tell – 获取当前读写指针
- f_eof – 测试文件结束
- f_size – 获取大小
- f_error – 检测错误
(2)目录访问函数
- f_opendir – 打开目录
- f_closedir – 关闭已打开的目录
- f_readdir – 读取目录项
- f_findfirst – 打开目录并读取第一个匹配项
- f_findnext – 读取下一个匹配的项目
(3)文件和目录管理函数
- f_stat – 检查文件或子目录是否存在
- f_unlink – 删除文件或子目录
- f_rename – 重命名/移动文件或子目录
- f_chmod – 更改文件或子目录的属性
- f_utime – 修改文件或子目录的时间戳
- f_mkdir – 创建子目录
- f_chdir – 更改当前目录
- f_chdrive – 更改当前驱动器
- f_getcwd – 获取当前目录和驱动器
(4)卷管理和系统配置函数
- f_mount – 注册/注销卷的工作区域
- f_mkfs – 在逻辑驱动器上创建一个FAT卷
- f_fdisk – 在物理驱动器上创建分区
- f_getfree – 获取卷的可用空间
- f_getlabel – 获取卷标
- f_setlabel – 设置卷标
- f_setcp – 设置活动代码页