分区表(Partition Tables):ESP32 FLASH 分区功能简析

1、背景:

ESP32 是一款蓝牙与 WIFI 合一的 IoT 芯片,并且支持 OTA 在线升级功能,在实际产品开发过程中需要对 FLASH 分区定制才能更好地满足产品需求,做刚刚好的产品。

ESP32 系统可以运行多个应用程序,同时包括大量的数据(校正数据、文件系统、参数保存等),分区表存放在 FLASH 偏移地址 0x8000。

2、分区表简析

分区表长度为 0xC00 字节,最多支持 95 个分区入口,使用 MD5 校验,笔者使用的 ESP32 模组是 ESP-WROOM-32,该模组集成了 4MB SPI Flash,在编译esp32程序时,通过make menuconfig -> PartitionTable 可以看到三种分区选择:

工厂程序(无OTA分区):

偏移地址 0x10000 处存放出厂固件,bootloader 启动时默认加载该偏移地址应用程序

# Espressif ESP32 Partition Table
# Name,   Type, SubType, Offset,  Size
nvs,      data, nvs,     0x9000,  0x6000
phy_init, data, phy,     0xf000,  0x1000
factory,  app,  factory, 0x10000, 1M

工厂程序(双OTA分区):

otadata 分区存储 OTA 升级数据,用于启动时判断加载哪个入口的应用程序:factory、ota_0,ota_1

# Espressif ESP32 Partition Table
# Name,   Type, SubType, Offset,  Size
nvs,      data, nvs,     0x9000,  0x4000
otadata,  data, ota,     0xd000,  0x2000
phy_init, data, phy,     0xf000,  0x1000
factory,  0,    0,       0x10000, 1M
ota_0,    0,    ota_0,   ,        1M
ota_1,    0,    ota_1,   ,        1M

用户自定义分区:

# Name,   Type, SubType, Offset,   Size
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,   ,         1M
ota_1,    app,  ota_1,   ,         1M

menuconfig 中的配置只是修改配置文件中的宏,实际上 ESP32 SDK 对应 FLASH 分区配置的源码路径是:

\esp-idf\components\partition_table

该路径下有文件:

partitions_singleapp

partitions_singleapp_coredump

partitions_two_ota

partitions_two_ota_coredump

都是用来对Flash分区进行配置的。

以 partitions_two_ota_coredump 为例,使用 partitions_two_ota_coredump 配置分区时4M SPI Flash的分区情况如下图所示:  

3、生成分区二进制文件

分区文件是 CSV 格式,但是需要生成二进制文件才能被写入 FLASH,工具 gen_esp32part.py 被用于文件转化(CVS 和 二进制)。

转化 CVS 为二进制文件:

python gen_esp32part.py input_partitions.csv binary_partitions.bin

转化二进制为 CVS 文件:

python gen_esp32part.py binary_partitions.bin input_partitions.csv


refer:

https://esp-idf.readthedocs.io/en/latest/api-guides/partition-tables.html

https://blog.csdn.net/abc517789065/article/details/79891568

https://github.com/espressif/esp-idf/blob/be81d2c/components/partition_table/gen_esp32part.py


猜你喜欢

转载自blog.csdn.net/liwei16611/article/details/81051499