ESP32 分区表
1. 分区表概述
ESP32 针对 flash 进行划分,划分为不同的区域用作不同的功能,并在flash的 0x8000 位置处烧写了一张分区表用来描述分区信息。
分区表可以根据自己的需要进行配置,每一个分区都有其特定的作用,可根据自己的需求进行配置以及修改,下述以官方例程里面的分区表进行描述。
以以下分区表为例:
# 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,
对应的 flash 布局如下:

partition_tables分区:存储描述 flash 分区信息的分区表nvs分区:非易失性存储 (NVS) 库,主要用于在 flash 中存储键值格式的数据,使用方法参考:非易失性存储 (NVS) 库otadata分区:记录启动信息,描述启动具体哪一个OTA分区phy_init分区:用于存储芯片的PHY有关数据,芯片网络有关数据存放在此分区factory分区:工厂程序分区,通过串口烧录在芯片内的第一个出厂程序ota_0分区:OTA升级的程序分区ota_1分区:OTA升级的程序分区
2. 分区表操作指南
2.1 查找默认分区表
其实每一个程序都有使用分区表,我们进入 hello_world 例程(路径:esp-idf/example/get-started/hello_world)执行idf.py build 在编译过程打印的信息中我们可以看到对应的工程分区表配置

那么工程的分区表在哪里呢?在hello_world 工程内似乎也没有看到有关分区表的描述文件。
其实,这是使用了 IDF 工具目录下的分区表配置了工程
输入idf.py menuconfig 打开menuconfig配置菜单,Partition Table 选项下是关于工程分区表的配置

分区表的使用方案总共有四种方案,分别是:
- 单个工厂APP分区,无OTA分区
- 单个工厂APP分区(更大的APP分区),无OTA分区
- 工厂APP分区,两个OTA分区
- 自定义分区表

关于配置描述可参考:CONFIG_PARTITION_TABLE_TYPE
对应的分区表存放在 IDF 目录下的 components/partition_table/目录下

2.2 配置自定义分区表
配置自定义的分区表,可以首先从 IDF 目录下的 components/partition_table/目录下拷贝一个示例分区表到对应工程目录下

之后配置menuconfig选择自定义分区表

指定自定义分区表名称

3. 参考文档
- ESP32 分区表描述:ESP32 分区表
- 分区表配置描述:CONFIG_PARTITION_TABLE_TYPE



















