分区表在IDF中的作用 对于 ESP32-S31与 ESP32-S3 软件架构基本一致来说Partition Table分区表是 Flash 中的软件地图。它告诉 Bootloader、应用程序和 ESP-IDFFlash 的哪一段存放 Bootloader、哪一段存放 App、哪一段存放 NVS、OTA 镜像、用户数据等。1. 分区表的位置ESP-IDF 默认布局Flash Offset ------------- | Bootloader | 0x0000 ------------- | Partition | 0x8000 | Table | ------------- | App0 | 0x10000 ------------- | App1 | ------------- | NVS | ------------- | User Data | -------------启动时流程ROM ↓ Bootloader ↓ 读取 Partition Table ↓ 找到当前可启动 App ↓ 跳转执行 App因此没有分区表Bootloader 就不知道应用程序在哪里。2. 分区表的核心作用作用1定位应用程序例如# Name, Type, SubType, Offset, Size factory, app, factory, 0x10000, 2M ota_0, app, ota_0, 0x210000, 2M ota_1, app, ota_1, 0x410000, 2MBootloader 启动时查询 OTA 状态 ↓ 决定使用 factory 或 ota_0 或 ota_1 ↓ 从对应地址启动作用2支持 OTA 升级这是分区表最重要的用途之一。例如Flash ├─ ota_0 当前运行 └─ ota_1 下载新固件升级过程运行 ota_0 ↓ 下载新镜像到 ota_1 ↓ 修改 OTA 状态区 ↓ 重启 ↓ 启动 ota_1如果新版本异常回滚到 ota_0 ESP-IDF OTA 模块正是依赖分区表实现的。 [docs.espressif.com]作用3保存系统配置通常有一个 NVS 分区nvs, data, nvs, 0x9000, 0x6000用于保存WiFi SSID WiFi Password Device ID Calibration Data Product SN代码中nvs_open(...)实际上就是访问 NVS 分区。作用4保存用户数据可定义专用数据区userdata, data, fat, 0x700000, 1M存放日志 配置文件 升级包 图片 音频 参数访问方式esp_partition_find() esp_partition_read() esp_partition_write()3. 分区表格式ESP-IDF 常见格式# Name, Type, SubType, Offset, Size nvs, data, nvs, 0x9000, 24K otadata, data, ota, 0xF000, 8K factory, app, factory, 0x10000, 2M ota_0, app, ota_0, , 2M ota_1, app, ota_1, , 2M storage, data, spiffs, , 1M字段含义字段说明Name分区名称Typeapp 或 dataSubTypefactory、ota、nvs等OffsetFlash起始地址Size分区大小4. Bootloader如何使用分区表启动时ROM ↓ Bootloader ↓ 读取0x8000处Partition Table ↓ 解析所有分区 ↓ 读取otadata ↓ 决定运行哪个APP ↓ 跳转APP入口例如ota_1 Offset0x220000Bootloader最终跳转Flash 0x220000对应映射0x42000000执行代码。5. 软件如何查找分区ESP-IDFconst esp_partition_t *part esp_partition_find_first( ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, userdata);返回part-address part-size之后即可esp_partition_read() esp_partition_write() esp_partition_erase_range()6. 典型产品中的分区规划8MB FlashBootloader 32KB Partition 4KB NVS 24KB OTA Data 8KB OTA_0 2MB OTA_1 2MB Storage 剩余空间16MB FlashBootloader Partition NVS OTA Data Factory App OTA_0 OTA_1 Filesystem Log User Data这种布局在量产产品中非常常见。7. ESP32-S31项目中的实际意义对于你的 ESP32-S31 项目分区表通常承担以下职责Bootloader ↓ Partition Table ↓ Application ↓ NVS配置区 ↓ OTA升级区 ↓ 用户数据区开发过程中经常会遇到App 太大需要调整 OTA 分区大小增加日志存储区增加文件系统SPIFFS/FATFS/LittleFS增加校准数据区增加生产测试数据区这些都通过修改分区表实现而不需要修改 Bootloader 逻辑。一句话总结ESP32-S31 的 Partition Table 本质上是 Flash 资源的管理目录。Bootloader 依靠它找到可启动应用OTA 依靠它切换固件NVS 和文件系统依靠它定位数据存储区域。它是整个 ESP32 软件启动和 Flash 管理机制的核心。