在PlatformIO中添加修改ESP32的分区表

发布时间:2023-11-05 16:30

一、遇到的问题及解决办法

  使用Vscode+Platformio开发ESP32,因为代码量过大,超过了默认的程序分区大小,所以就需要修改默认的分区表以扩大程序分区。使用Arduino可以很方便修改分区表,但是刚接触Platformio这个插件,且网络上有关介绍资料甚少,所以就动手找了找修改分区表的方法。
  找到方法后,添加csv文件并且编译,但是开始不管我怎么改都没效果,后来发现是工程的问题。重新建立工程后再添加、编译csv文件就可以了。

二、在PlatformIO中添加、编译分区表

  首先在工程路径下建立一个.csv文件,如下。
在这里插入图片描述
  然后在工程下的platformio.ini文件中添加编译命令board_build.partitions,在后面输入创建的.csv文件名全称,需要带上文件后缀,如下。
在这里插入图片描述
在这里插入图片描述
  然后在创建的.csv文件中填写自定义的分区表。分区表的格式和内容在乐鑫官方的编程指南上写的非常清楚,并且也解释了各个字段对应的功能,同时也列出了好几种格式(末尾有链接)。
  首先是最简单的一种,单应用没有OTA功能。

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

  然后是有带有OTA功能的。

# 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,    ,         1M
ota_1,    app,  ota_1,    ,         1M
nvs_key,  data, nvs_keys, ,        0x1000

  还有带spiffs的。

# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x5000,
otadata,  data, ota,     0xe000,  0x2000,
app0,     app,  ota_0,   0x10000, 0x140000,
app1,     app,  ota_1,   0x150000,0x140000,
spiffs,   data, spiffs,  0x290000,0x170000,

  验证了都可以正常使用,官网上有很详细的说明,可以去看下,末尾会附上链接。
  多说一句,开始我看网上分区表是下面这样,中间没用逗号分隔开的方式,

# Name	Type	SubType	Offset		Size	Flags
nvs		data	nvs		0x9000		0x5000	
otadata	data	ota		0xe000		0x2000	
app0	app		ota_0	0x10000		0x140000	
app1	app		ota_1	0x150000	0x140000	
spiffs	data	spiffs	0x290000	0x170000

  我开始就用的这种,我发现这个文件里面不管写什么,哪怕乱写大小和起始地址,都一点反应也没有,地址不对齐4K(是需要地址4k对齐吧),大小超出4MB范围,毛反应都没有,还不报错,就整的很无语。但是在乱改一通后也不报错,我意识到应该不是分区表格式内容的问题,我就重新建立了一个工程,然后重新建立.csv文件且编写,编译后发现不写逗号就会报错,拷贝了一个官方的示例后编译成功了,有效果,到这我确定了是原先工程的问题。

三、修改前和修改后的编译内存情况

  下面是修改前的,默认程序分区大小为1.25MB
在PlatformIO中添加修改ESP32的分区表_第1张图片
  下面是添加的分区表和修改分区表后编译的结果。
在PlatformIO中添加修改ESP32的分区表_第2张图片
在PlatformIO中添加修改ESP32的分区表_第3张图片
  看上面分区表可以看到大小是0x170000,转换成10进制就是1507328,和实际相符,说明分区表修改成功。
  到此就完成了修改ESP32分区表的全部工作。

四、总结

  开始一直不好用,可能是因为那个工程是搭建完环境后第一次建立的,有些东西不全,导致在编译分区表上发生问题。在PlatformIO中下载库时和支撑时最好还是开加速器,尤其是第一次建立工程时,不开加速器非常慢,在下载好前面的支撑文件后,后面再建立工程就不需要开加速器了,还很快。
  看官方文档上,对应的有俩APP区,说是用于交换运行程序,这样的话我觉得可以只写一个APP分区,下面可以试试(后面经过验证是可以的,可以只写一个APP区),如果可以省下的flash就可以多码点代码了(手动滑稽)。写这个是为了帮助其他遇到此问题的人,也算记录一下,希望可以节省一些时间。

  以上纯属个人经验,并且个人能力也有限,可能出现差错,如有问题请指正,我就改。

  下面附上一些链接。ESP32的,PlatformIO的。

PlatformIO在线说明文档 :https://docs.platformio.org/en/latest/what-is-platformio.html.

PlatformIO中有关ESP32的配置命令,如端口波特率、主频设置、flash模式、分区表编译调用等其他杂七杂八的:https://docs.platformio.org/en/latest/platforms/espressif32.html.

乐鑫有关分区表说明文档: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.

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号