ESP idf 框架下 SD 文件保存失败原因分析
调试的时候发现,只要文件名称超过 8 个字符,保存就会报错
// 初始化SD卡
sd_storage_init();
// // 文件操作示例
const char *file_path = "/sdcard/maintestttttttttt.txt";
const char *data = "Hello, SD Card!!!!";
// 写入文件
if (sd_storage_write_file(file_path, data) == ESP_OK) {
ESP_LOGI("MAIN", "File written successfully");
}
查询原因后发现是 ESP-IDF 中使用 FAT 文件系统(SD 卡通常格式化为 FAT32)时,文件名被自动转换为大写是 FAT 文件系统本身的特性
FAT 文件系统的设计限制:
- FAT12/FAT16/FAT32 文件系统最初设计于 DOS 时代,采用 8.3 文件名格式(8 字符主名 + 3 字符扩展名)
- 这些文件系统不区分大小写,且默认将所有文件名存储为大写
- 这是 FAT 文件系统的标准行为,在所有操作系统(Windows/Linux/macOS)上表现一致
ESP-IDF 的 FATFS 实现 使用 FATFS 库(由 ChaN 开发)处理 FAT 文件系统:
- 默认配置下,FATFS 会:
- 自动将文件名转换为大写
- 截断长文件名至 8.3 格式
- 移除非法字符(如 *?:<>| 等)
启用长文件名支持(LFN)
在 menuconfig 中配置:
idf.py menuconfig
Component config → FAT Filesystem support →
Long filename support
-
( ) Long filename buffer in heap -
(X) Long filename buffer in stack # 推荐选择栈分配 -
(255) Max long filename length

开启后一切就正常了
浙公网安备 33010602011771号