403 字
2 分钟
ESP32 SPIFFS和LittleFS
前言
- 硬件:ESP32-S2-WROOM-1
- FS库:
esp32/LittleFS@^3.3.2 - 平台:arduino/PlatformIO
在兼容 ESP32 的wakenet和中文TTS的情况下,使用文件系统
虽然不知道具体原理,但根据网络上相关反馈,LittleFS是全面优于SPIFFS,并且LittleFS和SPIFFS是相互兼容的,只需要修改前缀即可。
准备
修改分区 partitions.csv
测试中使用的分区:
# Name, Type, SubType, Offset, Size, Flagsnvs, data, nvs, 0x9000, 0x5000,otadata, data, ota, 0xe000, 0x2000,app0, app, ota_0, 0x10000, 0x300000,app1, app, ota_1, 0x310000, 0x300000,model, data, spiffs, 0x610000, 0x300000,voice_data,data,fat, 0x910000, 0x400000,storage, data, spiffs, 0xD10000, 0x100000,coredump, data, coredump,0xFF0000, 0x10000,IMPORTANT如果分区中存在多个 spiffs 或 fat 类型的分区,并且使用的是 platformio,请将文件系统分区的位置移动到最后一个分区
修改项目配置
在 platformio.ini 中增加如下内容:
; upload_protocol = esptoolboard_build.filesystem = littlefs准备需要烧录的文件
在项目目录中创建 data 文件夹,项目结构如下:
PS D:\workspace\...\firmware> tree├─.pio├─.vscode├─data├─include├─lib├─src└─test在希望烧录的文件放入 data 文件夹中。
测试代码
#include <Arduino.h>#include <LittleFS.h>
void listDir(fs::FS &fs, const char *dirname, uint8_t levels){ Serial.printf("Listing directory: %s\r\n", dirname);
File root = fs.open(dirname); if (!root) { Serial.println("- failed to open directory"); return; } if (!root.isDirectory()) { Serial.println(" - not a directory"); return; }
File file = root.openNextFile(); while (file) { if (file.isDirectory()) { Serial.print(" DIR : "); Serial.println(file.name()); if (levels) { listDir(fs, file.path(), levels - 1); } } else { Serial.print(" FILE: "); Serial.print(file.name()); Serial.print("\tSIZE: "); Serial.println(file.size()); } file = root.openNextFile(); }}
void setup(){ Serial.begin(115200);
if (!LittleFS.begin(true, "/littlefs", 10, "storage")) { ESP_LOGE("setup", "LittleFS 挂载失败"); }
listDir(LittleFS, "/", 0);}
void loop(){
}烧录代码和文件系统
烧录代码:
- General >> Build
- General >> Upload
烧录文件系统:
- Platform >> Build Filesystem Image
- Platform >> Upload Filesystem Image
ESP32 SPIFFS和LittleFS
https://fuwari.vercel.app/posts/嵌入式/esp/esp32-spiffs和littlefs/