相关资料
官方关于分区表的详细说明
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/partition-tables.html
github上已经定义的分区表
https://github.com/espressif/arduino-esp32/tree/master/tools/partitions
pio已下载到本地用户目录 .platformio\packages\framework-arduinoespressif32\tools\partitions
csv分区文件的格式
github上的 default.csv 4M分区表
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000, #20K
otadata, data, ota, 0xe000, 0x2000, #8K
app0, app, ota_0, 0x10000, 0x140000, #1280K
app1, app, ota_1, 0x150000,0x140000, #1280K
spiffs, data, spiffs, 0x290000,0x160000, #1408K
coredump, data, coredump,0x3F0000,0x10000, #64K
#1280K+1280K+1408K+64K+8K+20K+36K(boot32K+分区表自身4K)==4096K
- #开头的是注释
- Name 是标签名,不重要,可以取个有意义的名字
- Type 分区类型,可以是app或data,或自定义类型
- SubType 和Type有关
- 当Type=app,SubType可以是factory(出厂程序区,ota不会改变)、 ota_0 - ota_15、test
- 当Type=data时,SubType可以是ota(ota启动选择分区,固定8K)、phy、nvs 、nvs_keys 、coredump(用于在使用自定义分区表 CSV 文件时存储核心转储)、efuse、undefined、fat、spiffs、littlefs - Offset 分区偏移地址,可省略(设置分区大小可自动计算偏移地址)
- Size 分区大小,可以是十进制数或十六进制数、可以以K(1024)或M(1024*1024)为单位
- Flags 可以是encrypted(flash加密,app 分区无论如何都会加密。) 和 readonly(只读)
- 偏移地址需为 0x1000 (4 KB)的整数倍
- app分区大小需为 0x10000 (64 KB)的整数倍
- 支持ota需要两个app分区
- 分区表的默认位置为0x8000,占用4K大小
更多具体的内容请查看官方文档https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/partition-tables.html
修改示例
分区表的bin文件是通过csv分区表文件生成的,github上已经有了已经定义好的分区表文件,如果合适,可以直接使用,如果不符合需求,可以复制过来修改
- 以修改4MB(4096K)大小的Flash的分区表为例,如果不是pio环境则使用sdk提供的py工具
- 在PlatfromIO工程根目录中新建一个 esp32_4m.csv 文件,并在env环境中配置
board_build.partitions =esp32_4m.csv - 复制 default.csv 文本 到 esp32_4m.csv ,并修改
1. 两个app分区最大化,缩小文件系统分区
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 20K,
otadata, data, ota, 0xe000, 8K,
app0, app, ota_0, 0x10000, 1920K,
app1, app, ota_1, ,1920K,
spiffs, data, spiffs, ,128K,
coredump, data, coredump, ,64K,
2. 一个app分区最大化,缩小文件系统分区
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 20K,
otadata, data, ota, 0xe000, 8K,
app0, app, ota_0, 0x10000, 3840K,
spiffs, data, spiffs, ,128K,
coredump, data, coredump, ,64K,
3. 一个app分区和文件系统分区平均分配
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 20K,
otadata, data, ota, 0xe000, 8K,
app0, app, ota_0, 0x10000, 1984K,
spiffs, data, spiffs, ,1984K,
coredump, data, coredump, ,64K,
以上几个示例分区是在合宙esp32c3开发板上测试的
十六进制转以K为单位的十进制可以用windows程序员计算器计算,如0x140000=1310720=1280*1024=1280K
只要在app分区、文件系统分区间以64K为倍数调整大小,应该就不会有问题