目录
在esp32-s3的source code根目录下,有partitions.csv文件,内容为
# Name, Type, SubType, Offset, Size
nvs, data, nvs, 0x9000, 0x6000
otadata, data, ota, 0xF000, 0x2000
phy_init, data, phy, 0x11000, 0x1000
ota_0, app, ota_0, 0x20000, 0x200000
ota_1, app, ota_1, 0x220000, 0x200000
spiffs, data, spiffs, 0x420000, 0xBD0000
coredump, data, coredump,0xFF0000, 0x10000
分区表划分的是 Flash闪存,不是芯片内置 ROM/RAM!ESP32-S3 内置 384KB ROM、512KB RAM 是运行内存 / 只读启动代码 ,分区表操作的是外挂Flash(此表总大小 16MB),比如W25Q128JV。
partitions.csv列名定义
Name(分区名) | Type(类型:app = 固件分区 /data = 数据分区) | SubType(子类型) | Offset(Flash 起始地址) | Size(分区大小,十六进制)
逐行解释
nvs(Non-Volatile Storage):NVS 键值对存储分区(存配置参数),24KBotadata:OTA (Over-The-Air)升级状态分区(标记当前运行哪个 OTA 固件),8KBphy_init:WiFi / 蓝牙物理层校准数据分区,4KBota_0:OTA 主固件分区,0x200000 = 2MBota_1:OTA 备用固件分区,0x200000 = 2MBspiffs(SPI Flash File System):轻量文件系统分区(存文件 / 网页资源)0xBD0000=11MBcoredump:系统崩溃日志转储分区,64KB
关于ota_0和ota_1的作用
- ota_0/ota_1 2MB 作用 :OTA 升级专用双固件分区;
ota_0运行当前固件,ota_1存放升级固件,升级完成后切换,防止固件损坏变砖。 - 注意 :分区表是16MB Flash的空间划分,和芯片 384KB 内置 ROM 是完全不同的硬件,地址不重叠。
开发者注意事项
partitions.csv文件放在source code的根目录下,esp-idf集成开发环境在编译此代码的时候,会自动寻找并解析此文件(ESP-IDF 构建系统自动读取 → 校验分区合法性 → 生成二进制分区表文件 → 最终和固件一起打包烧录,全程自动,无需手动干预)
如果你打算把partitions.csv放在自定义路径里,需通过 menuconfig 配置路径。
如果你很聪明,你会发现这个partitions.csv文件没有定义bank0~bank8的存储内容。
|--------------|----------------|----------------|------|------------------------------|
| Bank | 地址范围 | usage | size | 管理方式 |
| bank0~bank7 | 0x0000~0x7FFF | 第二阶段bootloader | 32KB | esp-idf自动生成,编译时写入bin文件 |
| bank8 | 0x8000~0x8FFF | 分区表 | 4KB | 由partitions.csv生成,编译时写入bin文件 |