嵌入式文件系统选型:LittleFS 还是 FATFS?
在嵌入式开发中,只要涉及到存储(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. 选型决策树
- 介质是 SD 卡 / eMMC / USB 盘? -> 选 FatFs。因为控制器自带磨损均衡,且为了兼容 PC。
- 介质是片内 Flash / SPI NOR Flash? -> 选 LittleFS。
- 系统需要频繁断电? -> 必须 LittleFS。
- 需要通过 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