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