文件系统
已支持的文件系统列表:
关键特性 |
NVS 库 |
FAT 文件系统 |
SPIFFS 文件系统 |
LittleFS 文件系统 |
---|---|---|---|---|
特点 |
键值对保存,接口安全 |
操作系统支持,兼容性强 |
针对嵌入式开发,资源占用低 |
资源占用低,读、写、擦除速度快 |
应用场景 |
参数保存 |
音视频、文件保存 |
音视频、文件保存 |
文件保存 |
容量 |
KB-MB |
GB |
< 128 MB |
< 128 MB |
目录支持 |
X |
√ |
X |
√ |
磨损均衡 |
√ |
可选 |
√ |
√ |
读写效率 |
0 |
0 |
0 |
高 |
资源占用 |
0 |
0 |
1 |
1 |
掉电保护 |
√ |
X |
X |
√ |
加密 |
√ |
√ |
X |
√ |
备注
0:暂无数据或不参与比较。
1:低 RAM 占用。
NVS 库
非易失性存储 (NVS) 库主要用于读写在 flash NVS 分区中存储的数据。NVS 中的数据以键值对的方式保存,其中键是 ASCII 字符串,值可以是整数、字符串、二进制数据 (BLOB) 类型。NVS 支持掉电保护和数据加密,适合存储一些较小的数据,如应用程序参数等。如需存储较大的 BLOB 或者字符串,请考虑使用基于磨损均衡库的 FAT 文件系统。
参考文档:
批量生产时,可以使用 NVS 分区生成工具。
示例程序:
写入单个整数值:storage/nvs_rw_value。
写入二进制大对象:storage/nvs_rw_blob。
FAT 文件系统
ESP-IDF 使用 FatFs 库实现了对 FAT 文件系统的支持,FatFs 是独立于平台和存储介质的文件系统层,通过统一接口实现对物理设备(如 flash、SD 卡)的访问。用户可以直接调用 FatFs 的接口操作,也可以借助 C 标准库和 Posix API 通过 VFS(虚拟文件系统)使用 FatFs 库的大多数功能。
FAT 文件系统操作系统兼容性强,广泛应用于 USB 存储盘或 SD 卡等移动存储设备上。ESP32 系列芯片通过支持 FAT 文件系统,可以实现对这些常见存储设备的访问。
参考文档:
示例程序:
storage/sd_card:访问使用 FAT 文件系统的 SD 卡。
storage/ext_flash_fatfs:访问使用 FAT 文件系统的外部 Flash 芯片。
SPIFFS 文件系统
SPIFFS 是一个专用于 SPI NOR flash 的嵌入式文件系统,原生支持磨损均衡、文件系统一致性检查等功能。用户可以直接调用 SPIFFS 提供的 Posix 样式接口,也可以通过 VFS 操作 SPIFFS 的大多数功能。
SPIFFS 作为嵌入式平台 SPI NOR Flash 的专用文件系统,相比 FAT 文件系统占用 RAM 资源更少,但是仅用于支持容量小于 128 MB 的 Flash 芯片。
参考文档:
示例程序:
storage/spiffs:SPIFFS 使用示例。
LittleFS 文件系统
LittleFS 是一个专用于 SPI NOR flash 的嵌入式文件系统,原生支持磨损均衡、文件系统一致性检查、断电保护等功能。
LittleFS 作为高完整性的嵌入式平台 SPI NOR Flash 文件系统,支持高效的读写速度且占用的 RAM 资源更少。
LittleFS 目前由第三方维护,可通过包管理器轻松获取。
参考文档:
示例程序:
storage/littlefs:LittleFS 使用示例。
虚拟文件系统 (VFS)
ESP-IDF 虚拟文件系统 (VFS) 组件可以为不同文件系统 (FAT, SPIFFS) 提供统一的接口,也可以为设备驱动程序提供类似文件读写的操作接口。
参考文档: