ESP32分区表图解

目前使用的ESP-WROOM-32集成4MB SPI Flash。在编译esp32程序时,通过make menuconfig -> PartitionTable 可以有三种分区选择:工厂程序(无OTA分区)/工厂程序(双OTA分区)/用户自定义分区。

本文以ESP32 4M Flash为例,讲一讲如何用户自定义分区表。

首先下图是一个适用于阿里云物联网平台的分区表:
在这里插入图片描述

关于分区图示的说明:

  1. 0x8000之前的地址保存Boot loader。
  2. Partition Table分区:ESP32 在 flash 的 默认偏移地址 0x8000 处烧写一张分区表。该分区表的长度为 0xC00 字节(最多可以保存 95 条分区表条目)。分区表数据后还保存着该表的 MD5 校验和,用于验证分区表的完整性。此外,如果芯片使能了安全启动功能,则该分区表后还会保存签名信息。这个默认偏移地址在make menuconfig - Partition Table-offset of Partition Table这里设置。修改这个值,会影响到后面所有分区的偏移量。
  3. NVS分区:这个实际上是NVS(2)分区。用于存储每台设备的 PHY 校准数据(注意,并不是 PHY 初始化数据)。也用于存储 Wi-Fi 数据(如果使用了 esp_wifi_set_storage(WIFI_STORAGE_FLASH) 初始化函数)和通过NVS API 保存的其他应用程序数据。强烈建议为 NVS 分区分配至少 0x3000 字节空间。上图分配了0x4000字节。
  4. OTA data分区:系统从哪个app分区启动由此分区内的信息决定。
  5. Phy_init分区:用于存储 PHY 初始化数据。这样可以为每个设备(而不是在固件中)配置 PHY。在默认的配置中,phy partition 未被使用。
  6. Factory app分区:用于保存工厂(出厂)应用程序。如果分区表中有工厂应用程序,ESP-IDF 软件启动加载器会启动工厂应用程序。如果分区表中没有工厂应用程序(如上面的分区表例子),则启动第一个可用的 OTA 分区(通常是 OTA_0)。
  7. Core dump分区:core dump分区用于查找系统崩溃时的软件错误,系统崩溃的时候会将调试信息写入到Flash中保存以便开发者对崩溃原因进行分析。关于这个分区的使用可以参考使用ESP32 的调试工具 coredump
  8. OTA_0/OTA_1分区用于保存OTA下载的固件。OTA启用后,OTA下载的固件镜像交替保存于OTA_0/OTA_1分区,镜像验证后,OTA data分区更新,指定在下一次启动时使用该镜像。OTA不会影响到Factory app分区,这样用户可以随时恢复到出厂状态。
  9. fctry分区:保存阿里云四元组。如果不连接阿里云,该分区可以省略。

esp-aliyun仓库提供的默认例程的分区表文件(examples/ota/ota_example_mqtt/partitions_esp32.csv)如下:

# Name,   Type, SubType, Offset,   Size, Flags
# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
nvs,      data, nvs,     ,        0x4000,
otadata,  data, ota,     ,        0x2000,
phy_init, data, phy,     ,        0x1000,
ota_0,    app,  ota_0,   ,        1M,
ota_1,    app,  ota_1,   ,        1M,
fctry,    data, nvs,     ,        0x4000

关于这个分区表文件的说明:

  1. 在上面分区表文件内,没有写偏移地址(offset),只标明长度,所以相应分区会紧跟着前一个分区之后开始;若为首个分区,则将紧跟着分区表(Partition Table)开始。系统会自动计算。
  2. 即便系统自动计算了偏移地址,fctry的offset仍然需要我们自行计算,因为我们需要手动烧录这个分区,而烧录的时候需要指定地址。
  3. app 分区的偏移地址必须要与 0x10000 (64K)对齐,如果将偏移字段留空,gen_esp32part.py 工具会自动计算得到一个满足对齐要求的偏移地址。如果 app 分区的偏移地址没有与 0x10000 (64K) 对齐,则该工具会报错。
  4. 上面的这个分区表例子中没有Factory app工厂应用程序分区,所以默认从第一个可用的 OTA 分区(通常是 OTA_0)启动。

下面是esp-idf/components/partition_table/partitions_two_ota_coredump.csv中的分区标文件内容,可以看到比上个例子多了factory分区。

# Name,   Type, SubType, Offset,   Size
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs,      data, nvs,     ,         0x4000
otadata,  data, ota,     ,         0x2000
phy_init, data, phy,     ,         0x1000
factory,  0,    0,       ,         1M
coredump, data, coredump,,         64K
ota_0,    0,    ota_0,   ,         1M
ota_1,    0,    ota_1,   ,         1M

关于ESP8266分区表,可以参考ESP8266 分区表介绍

参考文献::

  1. 分区表 - ESP32 - — ESP-IDF 编程指南 latest 文档
  2. 空中升级 (OTA) - ESP32 - — ESP-IDF 编程指南 latest 文档
  3. ESP8266 分区表介绍
  • 11
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ESP的分区表是一个定义了芯片内存布局和分区的配置文件。分区表可以通过一个名为partitions.csv的文件来定义。该文件包含了一系列的分区条目,每个分区条目包括了分区的名称、类型、大小和偏移量等信息。 例如,分区表可以定义bootloader分区、应用程序分区、数据分区等。每个分区都有一个唯一的名称用于标识,而类型可以是bootloader、数据、应用程序等。分区的大小和偏移量可以根据实际需求进行配置。 分区表的格式可以通过make menuconfig命令来配置。在ESP-IDF编程指南的最新文档中可以找到ESP32分区表格式的详细介绍。 总结起来,ESP32分区表是一个定义了芯片内存布局和分区配置的文件,它可以通过partitions.csv文件来定义。分区表的格式可以通过make menuconfig命令进行配置。详细的分区表格式可以在ESP-IDF编程指南的最新文档中找到。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ESP32分区表图解](https://blog.csdn.net/toopoo/article/details/107327828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [ESP32 分区表修改导致重启的问题](https://blog.csdn.net/qq_42312125/article/details/127806525)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [ESP32 快速入门(九):自定义 ESP32 分区表 partitions.csv](https://download.csdn.net/download/weixin_38677505/14031363)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值