FatFs 是一个 ​​文件系统库​​,而 FAT16(用FAT16举例) 是一种 ​​文件系统格式​​,二者的关系可以类比为:

  • ​FatFs​​ → 一套工具(如螺丝刀),用于操作文件系统。
  • ​FAT16​​ → 一种标准(如螺丝的规格),定义了磁盘数据的存储规则。

​1. FatFs:嵌入式文件系统库​

​功能​

FatFs 是一个开源的、轻量级的文件系统模块,用于在嵌入式系统(如STM32、ESP32)中实现以下功能:

  • ​读写文件​​(支持 .txt.bin 等格式)。
  • ​管理目录​​(创建、删除、遍历文件夹)。
  • ​格式化存储设备​​(如SD卡、Flash)。
  • ​兼容多种FAT变种​​(FAT12、FAT16、FAT32、exFAT)。

​特点​

  • ​可移植性强​​:代码不依赖硬件,适配SPI、SDIO、USB等接口。
  • ​资源占用小​​:适合RAM/Flash有限的MCU。
  • ​开源免费​​:由ChaN开发,广泛应用于嵌入式领域。

​2. FAT16:文件系统格式​

​定义​

FAT16 是 ​​FAT(File Allocation Table)文件系统​​的一种变体,其核心特征:

  • ​分区容量上限​​:2GB(簇大小为32KB时)。
  • ​单文件限制​​:最大2GB。
  • ​适用场景​​:旧式U盘、小容量SD卡(如128MB~2GB)。

​FAT16的磁盘结构​

引导扇区 | FAT1表 | FAT2表(备份) | 根目录区 | 数据区
  • ​FAT表​​:记录文件占用的簇链。
  • ​根目录固定大小​​:FAT16的根目录条目数有限(通常512个文件)。

​3. FatFs 如何操作 FATx?​

FatFs 通过解析FATx的磁盘结构,提供统一的API接口。例如:

挂载FAT16格式的SD卡​

FATFS fs; // FatFs文件系统对象 f_mount(&fs, "0:", 1); // 挂载设备(假设是FAT16格式)

  • FatFs 会读取设备的 ​​引导扇区​​,自动识别是FAT12、FAT16还是FAT32。
  • 后续通过 f_open()f_write() 等函数操作文件时,FatFs 会按FAT16的规则读写数据。

FATFS格式化SD卡​ 

使用f_mkfs()函数,根据SD卡的容量,自动匹配格式化FAT12还是FAT16、还是FAT32, 所以FAT16/FAT32 ​​不是硬件固化的​​,而是通过 ​​格式化​​ 动态写入SD卡的。


​4. FatFs 与 FAT16 的关联​

​对比项​ ​FatFs​ ​FAT16​
​角色​ 软件库(实现文件操作) 磁盘格式标准
​是否依赖硬件​ 否(纯C代码,需底层磁盘驱动) 是(依赖存储介质布局)
​灵活性​ 可支持FAT12/16/32/exFAT 仅一种固定格式
​典型应用​ 嵌入式系统(STM32、ESP32) 老旧存储设备(≤2GB的SD卡/U盘)

5. SD卡的文件格式信息存储位置​

SD卡的文件系统(如FAT32)依赖以下 ​​关键表信息​​ 来管理数据:

​1. FAT表(File Allocation Table)​
  • ​作用​​:记录文件占用的簇(Cluster)链,标记空闲或坏簇。
  • ​FAT16/FAT32差异​​:
    • FAT16:用16位表示簇号(最大65525个簇)。
    • FAT32:用32位表示簇号(支持更多簇)。
  • ​位置​​:通常存储在SD卡的 ​​起始扇区​​(如FAT32的FAT1表在扇区1~100,FAT2为备份)。
​2. 根目录表(Root Directory)​
  • ​作用​​:存储根目录下的文件和子目录信息(文件名、属性、起始簇号)。
  • ​FAT16​​:固定大小(通常512个条目,占用32个扇区)。
  • ​FAT32​​:动态大小(可存储在数据区任意位置)。
​3. 引导扇区(Boot Sector)​
  • ​作用​​:存储文件系统元数据,包括:
    • 文件系统类型(FAT16/FAT32/exFAT)。
    • 簇大小(如4KB)。
    • FAT表数量和大小。
  • ​位置​​:SD卡的 ​​扇区0​​(可通过hexdump查看):
​4. 数据区(Data Region)​
  • ​作用​​:实际存储文件内容,按簇分配(1簇=多个扇区)。

​SD卡文件系统表示例(FAT32)​

扇区0: [引导扇区]  
扇区1~100: [FAT1表]  
扇区101~200: [FAT2表(备份)]  
扇区201~300: [根目录]  
扇区301~N: [数据区]  

6. 小结

  • ​FatFs 是工具​​:提供API操作FAT12/16/32/exFAT文件系统。
  • ​FAT16 是标准​​:定义了一种具体的磁盘数据组织方式。
  • ​FatFs 可识别并操作FAT16​​:开发者无需关心底层细节,直接调用 f_open()f_write() 等函数即可。
  • ​文件系统格式​​ 是数据管理的规则,核心是 ​​FAT表、目录表、引导扇区​​。
  • ​SD卡的表信息​​ 由格式化创建,可通过工具或代码读取。
  • ​嵌入式开发中​​,理解这些结构有助于优化存储和修复故障(如掉电后的FAT表恢复)
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐