esp32 在PlatformIO中修改分区表

相关资料

官方关于分区表的详细说明
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
  1. #开头的是注释
  2. Name 是标签名,不重要,可以取个有意义的名字
  3. Type 分区类型,可以是app或data,或自定义类型
  4. 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
  5. Offset 分区偏移地址,可省略(设置分区大小可自动计算偏移地址)
  6. Size 分区大小,可以是十进制数或十六进制数、可以以K(1024)或M(1024*1024)为单位
  7. 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为倍数调整大小,应该就不会有问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值