26-ESP32-S3 的 FLASH分区表以及 SPIFFS 文件系统 和spiffsgen.py工具

ESP32-S3 的 SPIFFS 文件系统

ESP32-S3的ROM,RAM,FLASH

存储器类型 描述 容量
内部存储器
ROM 用于存储固定的程序代码和数据 384KB
SRAM 用于存储运行时的程序数据 512KB
RTC SRAM 在深度睡眠模式下仍然保持数据 16KB
外部存储器
PSRAM 片外用于存储运行时的程序数据 最大16MB
特殊存储器
RTC FAST memory 可以作为指令存储器也可以作为数据存储器进行访问 -
RTC Slow memory 从深度睡眠模式唤醒后必须要运行的代码要放在 RTC 存储器中 -
SPI Flash 片外通过 SPI接口外接 最大16MB

对于片外的Flash 它是可读可写的,由于它的容量高达16MB,这意味着我们可以在其中存储大量的配置文件、图像、音频文件,甚至是一些小型的视频文件,可以尝试很多有趣的项目和应用

Flash分区表

ESP32-S3 的 Flash 存储器,它被划分为多个分区,每个分区都有特定的用途。

而Flash分区表它定义了 Flash 存储器的布局。Flash 分区表中的每个条目都描述了一个分区的属性,包括其在 Flash 中的位置(偏移量)、大小、类型、以及其他一些属性。

如何配置分区表

在使用分区表时,最简单的方法就是打开项目配置菜单(idf.py menuconfig),并在 CONFIG_PARTITION_TABLE_TYPE 下选择一个预定义的分区表:

  • “Single factory app, no OTA”

  • “Factory app, two OTA definitions”

如果想要查看当前使用的分区表 只要在终端运行 idf.py partition-table ,即可以打印当前使用分区表的信息摘要。
在这里插入图片描述
这里我使用的Single factory app, no OTA分区表

自定义分区表

关于自定义分区表可以查看我写的另一篇博客
15-partition table (分区表)

Flash 分区表的结构

以下是 “Factory app, two OTA definitions” 选项的分区表信息摘要:

# 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,
factory,  app,  factory, 0x10000,  1M,
ota_0,    app,  ota_0,   0x110000, 1M,
ota_1,    app,  ota_1,   0x210000, 1M,

Factory app, two OTA definitions相比Single factory app, no OTA多了otadataota_0ota_1这三个分区

这三个分区在 ESP32-S3 的 OTA(Over-The-Air)更新机制中起着重要的作用。它们三个共同支持 ESP32-S3 的 OTA 更新功能,使设备能够在固件正常运行时根据接收数据(如通过 Wi-Fi 或蓝牙)进行自我更新。

ESP32-S3启动时 启动加载器会查询 “otadata” 分区的数据,以判断该从哪个 OTA 应用程序分区加载程序,如果不存在 “otadata” 分区则会从factory分区启动

SPIFFS介绍

前面铺垫了这么多,存储有了,哪怎么使用这些空间呢,这就需要文件管理系统了,在我们的windows电脑里有NTFS文件系统,在安卓手机里有F2FS 文件系统,而对于ESP32有SPIFFS文件系统。

SPIFFS(Serial Peripheral Interface Flash File System)是 ESP32-S3 的内存管理系统。更具体地说,它是一种在你的 ESP32 关机后不会擦除的内存存储。你可以使用它进行数据记录,保存访问代码,存储文件,以及记住用户输入的设置。

SPIFFS有以下特性和用处

  • 在指定的地址保存的数据不会因为重新更新而删除(如用户配置好的用户设置)

  • 不用外置的SD卡,节约硬件资源

  • 保存HTML和CSS文件以及建立Web服务器

  • SPIFFS 是一个用于 SPI NOR flash 设备的嵌入式文件系统,支持磨损均衡、文件系统一致性检查等功能。

  • 目前,SPIFFS 尚不支持目录,但可以生成扁平结构。如果 SPIFFS 挂载在 /spiffs 下,在 /spiffs/tmp/myfile.txt 路径下创建一个文件则会在 SPIFFS 中生成一个名为 /tmp/myfile.txt 的文件,而不是在 /spiffs/tmp 下生成名为 myfile.txt 的文件;

SPIFFS 与 NVS 的区别

SPIFFS(Serial Peripheral Interface Flash File System)和 NVS(Non-Volatile Storage)都是 ESP32-S3 的存储系统,但它们有一些关键的区别。

  • NVS 在 SPI NOR flash 上实现了一个有容错性,和磨损均衡功能的键值对存储。
  • NVS 可以存储一些 PHY 初始化数据,也可以存储其他数据,一些断电存储的数据建议放在这里。

总的来说,SPIFFS 更适合用于存储文件,而 NVS 更适合用于存储键值对数据。具体使用哪种存储系统,取决于应用需求。

SPIFFS 的使用

1️⃣注册装载 SPIFFS

该函数使用给定的路径前缀将 SPIFFS 注册并装载到 VFS,其函数原型如下所示:

esp_err_t esp_vfs_spiffs_register(const esp_vfs_spiffs_conf_t * conf);

该函数的形参描述,如下表所示:

评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁子希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值