LAT1020
Local Application Tips
LAT1020 Rev 1.0 Aug. 2021
STM32 用户准备 FatFS 基础知识
关键字:FatFS
1. 前言
FatFS 最初为小系统设计,特别适 MCU 的应用场景,是 STM32 应用中的常用的一
个文件系统。一般情况下,直接使 FatFS 应用接口 format, create, open, read, write,
close 等配合默认参数进行应用开发。但是,一些文件系统相关的问题,例如,如何优化
嵌入式系统使得所使用的空间为最小,开发人员就需要了解一些 FatFS 的基础知识。本文
就是为这部分需求而写
2. 文件系统的结构
FAT 文件系统一般由以下部分依次组成, 引导区、保留区、FAT 区、根目录、子目
与文件。
1 FAT 件系统的结构
2.1. 描述
Boot Sector 引导区一般会存在于第 0 个逻辑 Sector。它会包含以下设置:
Sector 包含的字节数目,通常 512(偏移 11-12
Cluster 包含的 Sector 数目,可以是 1(偏移 13
系统保留的 Sector 数目(偏移 14-15
FAT 数目(偏移 16
根目录项数目(偏移 17-18
Sector 总数目(偏移 19-20
Track 包含的 Sector 数目(偏移 24-25
Head 的数目(偏移 26-27
隐藏的 sector 数目(偏移 28-29 这里为 FAT12
这些参数一般会由用户设置。在做 STM32 开发的时候,若使用外部 Flash 或者内部
SRAM 对于 Track Head,这些和实际物理磁盘相关的设置是没有意义的。所以,通
常在参考例程里,你可以看到,每 track 包含的 Sectors Heads 通常设置成 1。当然隐
藏的 Sector 数目一般为 0
注意,这里仅仅列出了用户经常需要关注的参数,并没有列出完整的引导区的布局。
如果需要完整的查看引导区的信息,也要留意 FAT12, FAT16 FAT32 在一些引导区参
数的不同。
LAT1020
LAT1020 - Rev 1.0 page 2/6
2.2. 实例
我们可以使用 STM32 USB 中间件 mass storage 功能让 win10 格式化出一个 FatFS
件系统。我们通过直接查看 STM32 内存,可以看到 FAT12 引导区如下。注意,相
Win10 的格式化,使用 STM32Cube 文件系统中间件的格式化函数,格式化出的 FatFS
加符合嵌入式系统的要求,例如我们可以减少根目录的项数目,保留区也不需要太多
2 FatFS 文件系统内存实例
3. FAT
FAT 区是文件系统的 Cluster 分配表,它保存系统的每一个 Cluster 的使用情况。一个
Cluster 或者被文件使用,或者标记为空闲,或者标记为坏块。
如果一个 Cluster 被使用,则会构成一个 Cluster 链。
一个 Cluster 链的第一个 Cluster 的索引就是第一项索引自身。
一个 Cluster 链的下一个 Cluster 的索引,由当前(或者说前一个)表项的值指
定。
一个 Cluster 链结束时就会在需要指向的索引设置为一个特殊的值。 这个值由
FAT 1 项指定。
如果某个 Cluster 是空闲的,没有被使用,则该 Cluster 所对应的 FAT 表项位置的值为
一个特殊的值;一般这个值为 0