嵌入式文件系统选型:LittleFS 还是 FATFS?

Evek Golden Lv4

在嵌入式开发中,只要涉及到存储(SD卡、SPI Flash),就绕不开文件系统。目前市面上最主流的两个选择是:经典的 FatFs 和后起之秀 LittleFS

很多工程师习惯无脑上 FatFs,结果量产后发现文件频频损坏。本文将告诉你为什么,以及如何选择。

1. FatFs:老当益壮的通用王者

FatFs 是 ChaN 老师开发的通用 FAT 文件系统模块。

优点

  • 兼容性无敌:Windows, Linux, macOS 都能原生识别。插上 SD 卡就能读。
  • 生态成熟:几乎所有 MCU 厂商的 SDK 都集成了它。

致命弱点

  • **非掉电安全 (Not Power-Loss Safe)**:FAT 表更新不是原子操作。如果在写文件时突然断电,文件系统极易崩溃,甚至导致整个磁盘不可读。
  • **无磨损均衡 (No Wear Leveling)**:FAT 表通常固定在存储器的头部。频繁修改文件会导致 FAT 表所在的 Flash 块迅速磨损坏块,这对擦写寿命有限(10万次)的 Flash 是毁灭性的。

结论:FatFs 适合 SD 卡U 盘等大容量、自带坏块管理控制器的介质。

2. LittleFS:专为嵌入式而生

LittleFS 是 ARM 为了解决 IoT 设备存储痛点而开源的小型文件系统。

核心特性

  • **掉电安全 (Copy-on-Write)**:LittleFS 所有的元数据更新都是“写时复制”的。修改数据时,它会找一块新的空闲区域写入,确认写完后再更新指针。这就保证了无论何时断电,文件系统要么是修改前的状态,要么是修改后的状态,绝不会处于“中间态”。
  • 动态磨损均衡:LittleFS 没有固定的 FAT 表,它像链表一样把数据分散存储。它会智能地在整个 Flash 空间内轮换使用 Block,极大延长 Flash 寿命。
  • 资源占用极低:RAM 和 ROM 占用都比 FatFs 小。

缺点

  • 不兼容 PC:插在电脑上读不出来(无法识别)。通常需要通过 USB MSC 协议模拟成 FAT,或者专门写上位机工具提取。
  • 大文件性能稍弱:对于几百 MB 的大文件,读写速度不如 FAT 线性。

结论:LittleFS 是 SPI Flash (NOR/NAND) 的绝配。

3. 选型决策树

  1. 介质是 SD 卡 / eMMC / USB 盘? -> 选 FatFs。因为控制器自带磨损均衡,且为了兼容 PC。
  2. 介质是片内 Flash / SPI NOR Flash? -> 选 LittleFS
  3. 系统需要频繁断电? -> 必须 LittleFS
  4. 需要通过 USB 模拟 U 盘让用户拷贝配置? -> 这有点棘手。可以考虑 FatFs(风险自担),或者使用 LittleFS + 模拟 FAT 层(技术难度高)。

总结

不要拿把锤子当万能钥匙。理解介质的物理特性(Page, Block, Erase Cycle),才能为你的 IoT 设备选出最稳健的“大脑皮层”。

  • Title: 嵌入式文件系统选型:LittleFS 还是 FATFS?
  • Author: Evek Golden
  • Created at : 2024-06-05 23:23:00
  • Updated at : 2026-06-12 08:57:02
  • Link: https://blog.cocodemo.uno/posts/fs7h2x9/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments