> For the complete documentation index, see [llms.txt](https://fatfs.asicfans.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fatfs.asicfans.com/master.md).

# FatFs - 通用 FAT 文件系统模块

FatFs 是用于小型嵌入式系统的通用 FAT/exFAT 文件系统模块。 FatFs 模块的编写符合 ANSI C (C89)，并与磁盘 I/O 层完全分离。 因此它独立于平台。 它可以集成到资源有限的小型微控制器中，例如 8051，PIC，AVR，ARM，Z80，RX 等。此外，还提供用于微型微控制器的 [Petit FatFs](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/FatFs_Petit.md) 模块。

**特性**

* DOS/Windows 兼容的 FAT/exFAT 文件系统。
* 平台独立，移植简单。
* 非常小的程序代码和工作区占用空间。
* 支持多种[配置](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/FatFs_Config_CN.md)选项：
  * ANSI/OEM 或 Unicode 中的长文件名。
  * exFAT 文件系统。
  * RTOS 线程安全。
  * 多个卷（物理驱动器和分区）。
  * 可变的扇区大小。
  * 多个代码页，包括 DBCS。
  * 只读，可选的 API, I/O 缓存等等。

### 应用接口

FatFs 提供了如下对应用的多种文件系统函数。

* 文件访问
  * [f\_open](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_open.md) - 打开/创建文件
  * [f\_close](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_close.md) - 关闭一个已打开的文件
  * [f\_read](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_read.md) - 从一个文件中读取数据
  * [f\_write](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_write.md) - 写数据到一个文件中
  * [f\_lseek](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_lseek.md) - 移动读/写指针（光标），扩展大小
  * [f\_truncate](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_truncate.md) - 截断文件大小
  * [f\_sync](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_sync.md) - 刷新缓存数据
  * [f\_forward](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_forward.md) - 将数据发送到流
  * [f\_expand](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_expand.md) - 为文件分配一个连续的块
  * [f\_gets](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_gets.md) - 读一个字符串
  * [f\_putc](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_putc.md) - 写一个字符
  * [f\_puts](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_puts.md) - 都一个字符串
  * [f\_printf](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_printf.md) - 写一个格式化的字符串
  * [f\_tell](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_tell.md) - 获得当前的读/写指针（光标）。
  * [f\_eof](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_eof.md) - 测试文件结尾
  * [f\_size](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_size.md) - 获取大小
  * [f\_error](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_error.md) - 测试一个错误
* 目录访问
  * [f\_opendir](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_opendir.md) - 打开一个目录
  * [f\_closedir](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_closedir.md) - 关闭一个已打开的目录
  * [f\_readdir](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_readdir.md) - 读取目录成员
  * [f\_findfirst](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_findfirst.md) - 打开目录并读取第一个匹配的成员
  * [f\_findnext](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_findnext.md) - 读取下一个匹配的成员
* 文件与目录管理
  * [f\_stat](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_stat.md) - 检查文件或子目录的存在
  * [f\_unlink](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_unlink.md) - 移除一个文件或子目录
  * [f\_rename](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_rename.md) - 重命名/移动一个文件或子目录
  * [f\_chmod](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_chmod.md) - 改变一个文件或子目录的属性
  * [f\_utime](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_utime.md) - 改变一个文件或子目录的时间戳
  * [f\_mkdir](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_mkdir.md) - 创建一个子目录
  * [f\_chdir](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_chdir.md) - 改变当前目录
  * [f\_chdrive](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_chdrive.md) - 改变当前驱动器
  * [f\_getcwd](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_getcwd.md) - 检索当前目录与驱动器
* 卷管理与系统配置
  * [f\_mount](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_mount.md) - 注册/注销卷的工作区
  * [f\_mkfs](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_mkfs.md) - 在逻辑驱动器上创建一个 FAT 卷
  * [f\_fdisk](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_fdisk.md) - 在物理驱动器上创建逻辑驱动器
  * [f\_getfree](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_getfree.md) - 获取卷的总大小与剩余空间
  * [f\_getlabel](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_getlabel.md) - 获取卷标签
  * [f\_setlabel](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_setlabel.md) - 设置卷标签
  * [f\_setcp](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/f_setcp.md) - 设置活动代码页

### 媒体访问接口

由于 FatFs 模块是独立于平台和存储介质的**文件系统层**，因此它与物理设备完全分离，例如存储卡，硬盘和任何类型的存储设备。 低级设备的控制模块**不是 FatFs 模块的任何部分**，需要由实现者提供。 FatFs 通过如下所示的简单媒体访问接口访问存储设备。 此外，下载中还提供了某些平台的示例实现。 [此处](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/app5.md)提供了用于低级磁盘 I/O 模块的功能检查程序。

* [disk\_status](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/disk_status.md) - 获取设备状态
* [disk\_initialize](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/disk_initialize.md) - 初始化设备
* [disk\_read](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/disk_read.md) - 读一个或多个扇区
* [disk\_write](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/disk_write.md) - 写一个或多个扇区
* [disk\_ioctl](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/disk_ioctl.md) - 控制设备相关函数
* [get\_fattime](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/func/get_fattime.md) - 获取当前时间

### 资源

FatFs模块是一个为教育，研究和开发而开放的免费软件。 您可以使用，修改和/或重新分发个人项目或商业产品，不受您的任何限制。 有关详细信息，请参阅应用笔记。

* 先阅读: [FatFs 模块应用说明](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/FatFs_Read_First_CN.md) (*2019年6月8日*)
* 下载: FatFs R0.13c | 更改日志 | 最新补丁 （*April 13, 2019*）
* 下载: FatFs 多个平台的样例 （*October 14, 2018*）
* 下载: 预览发布
* 交流: [FatFs 用户论坛](http://elm-chan.org/fsw/ff/bd/)
* [微软 FAT32 规范](https://msdn.microsoft.com/en-us/windows/hardware/gg463080.aspx)↗(FAT文件系统上的授权文档)
* FAT文件系统的基础知识
* exFAT文件系统的基础知识
* 如何使用 MMC/SDC
* 玩转 FlashAir 和 FatFs
* [奈米桑的 Blog](http://nemuisan.blog.bai.ne.jp/)↗(STM32F/SPI & SDIO和LPC 4088/SDMMC 的良好实现)
* [来自 Tilen Majerle 的 STM32F4xx 设备上读取带有 FatFs 的 SD 卡](http://stm32f4-discovery.net/2014/07/library-21-read-sd-card-fatfs-stm32f4xx-devices/)↗（STM32F4-Discovery 快速简便的实现）
* [基准测试 1](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/img/rwtest1.png)（ATmega1284/20MHz，MMC 通过 USART 在 SPI，CFC 通过 GPIO）
* [基准测试 2](https://app.gitbook.com/s/-Lnq84rK35jMvfrxoa-a/img/rwtest2.png) (LPC2368/72MHz， MMC 通过 MCI)
* 应用程序的演示影片（此项目位于 ffsample.zip/lpc23xx）
