# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x6000,
phy_init, data, phy,     0xf000,  0x1000,
factory,  app,  factory, 0x10000, 1M,
spiffs,   data, spiffs,  , 3M , 

类似于这样的配置,只有一个分区,代码中初始化

    esp_vfs_spiffs_conf_t conf = {
      .base_path = "/spiffs",
      .partition_label = NULL,
      .max_files = 5,
      .format_if_mount_failed = true
    };

可以填写.partition_label = NULL,一个分区自动识别了。

但是,坑在这里,如果是两个分区

# ESP-IDF Partition Table
# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,    0x4000,
otadata,  data, ota,     0xd000,    0x2000,
phy_init, data, phy,     0xf000,    0x1000,
model,    data, spiffs,  0x10000,   0xF0000,
ota_0,    app,  ota_0,   0x100000,  6M,
ota_1,    app,  ota_1,   0x700000,  6M,
spiffs,   data, spiffs,  0xD00000,  1M,

注意,最后面加,号

如果两个分区,烧录需要指定烧录到哪个分区 

# 配置 SPIFFS 自动烧录(关键代码)
spiffs_create_partition_image(spiffs data FLASH_IN_PROJECT)

spiffs分区名字 data文件夹名字

然后使用的时候有个地方很容易忽略

    // SPIFFS配置(指定spiffs分区)
    esp_vfs_spiffs_conf_t conf = {
        .base_path = "/spiffs",
        .partition_label = "spiffs",
        .max_files = 5,
        .format_if_mount_failed = true
    };

        .partition_label = "spiffs",
不能用NULL,必须指定分区名称了。base_path并不是分区名称的意思,而第二个partition_label才是,所以不要弄混了,多分区害我搞了几个小时才明白问题在这里。会导致读不出来,然后改别的地方又冒出一大堆几十个错误,哎。。。。最后发现是这里问题,踏马的

2. 各参数详解

(1).base_path = "/spiffs"
  • 作用:指定 SPIFFS 分区在系统中的 “挂载路径”(类似电脑的 C:/ D:/)。
  • 使用:后续通过文件操作函数(如 fopen fread)访问该分区时,必须以这个路径为前缀。例如:fopen("/spiffs/test.txt", "r") 表示打开 SPIFFS 分区中的 test.txt 文件。
  • 注意:路径可以自定义(如 "/storage"),但需保证唯一性,避免与其他文件系统(如 FATFS)冲突。
(2).partition_label = "spiffs"
  • 作用:指定要挂载的 SPIFFS 分区的 “标签”(对应分区表中的 label 字段)。
  • 背景:Flash 中可能有多个 SPIFFS 类型的分区(如你的项目中有 model 和 spiffs 两个),通过标签可以精准定位到目标分区。
  • 对应关系:必须与 partitions.csv 中目标分区的标签完全一致,否则会报 “分区未找到” 错误。
(3).max_files = 5
  • 作用:限制 SPIFFS 同时打开的最大文件数量(防止资源耗尽)。
  • 设置:根据实际需求调整(如同时播放音乐、读取配置文件等场景可能需要更大的值),但不宜过大(会占用更多内存)。
(4).format_if_mount_failed = true
  • 作用:当 SPIFFS 挂载失败时(如分区未初始化、文件系统损坏),自动格式化该分区并重新挂载。
  • 适用场景
    • 首次使用新分区(为空,无文件系统结构)时,自动初始化;
    • 分区损坏时(如意外断电导致文件系统错乱),自动修复(但会丢失所有数据)。
  • 风险:设为 true 可能导致数据丢失,生产环境可根据需求改为 false(仅报错不格式化)。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐