起因:由于会用到蓝牙和WIFI以及HTTP OTA功能,导致需要的Flash会比较大。乐鑫原本的分区表是一个固件(factory)和两个OTA(ota_0,ota_1),而固件(factory)分区是用来兜底的,但是这部分可以用ota_0或ota_1来作为兜底的功能分区。那么固件(factory)分区我们是可以删除,把这部分的flash长度平均到ota_0和ota_1,来扩大可编程flash空间。
一、环境
1、ESP-IDF版本:V4.4
2、编译 :VSCode + IDF
3、开发板 : ESP32(其他模块一样同样 大概)
首先感谢Chinese Forum 中文社区的@ESP_Yake 大佬的解答,不然估计要等很久才能有这篇笔记。
PDF资料和demo工程,我上传到了gitee上,有需要的可以下载测试
partitions_demo: [笔记]ESP32修改分区表 -- 扩大可编程FLASH容量
提前操作:
因为上传至gitee后不会有.vscode文件,遇到使用者自行添加---用vscode打开后按F1,然后点击下图的选项
二、讲解过程
1、碍于需要简单操作性的问题,我添加了console。
指令有:
wifi connect [x] [y] --x填写你的wifi名字 --y填写你的wifi密码,该指令用于连接wifi
ota updata [url] --url填写你的http server的文件下载地址(要在连接wifi再使用该指令)
2、检查容量是否正确
我使用的是4MB,如果你们使用的是2MB,则要更改分区表ota_0和ota_1的长度和起始位置,注意ota_0的起始位置0x10000是不更改的
3、添加并选中自定义分区表
在工程目录下添加partitions.csv文件,内容可以见红框内
选中分区表,该作用为,编译阶段会使用你指向的CSV文件生成相应的partitions.bin文件
4、勾选启用http ota
注意一下,该功能选项是跳过证书验证,不过等下我们使用的server我记得是没有相关证书,所以这个选不选在测试阶段都是没啥问题,但是在产品测试阶段则不推荐使用
5、编译下载
下载分两种情况
1、如果出现这种,这可以不用看下面的操作
2、如果没有出现上述的LOG,则需要使用tools软件进行烧录
然后我们添加bin文件和flash偏移地址
搞定之后,配置其他的设置项,我推荐这里的波特率低一点,保证它的成功率。之后先ERASE清除固件,然后再START下载刚才选中的bin固件。一般的开发板都自带自动下载,如果没有的话,要手动按住BOOT按键(一般板上有两个按键,一个是BOOT、一个是RST)再重新点击START或ERASE
下载完成后,我们就使用串口工具进行测试
6、连接WIFI
我们打开串口,使用指令连接WIFI
中间是一个空格隔开
这样就连接成功了
7、使用powershell创建http server
我们来到工程下的build文件夹中
然后,在空白处Shift+右键,可以看到“在此处打开Powershell窗口(S)”,点击之后你可以看到这个
然后输入python -m http.server 8070,这就创建了http server
这里需要注意,你需要在电脑上安装python才能进行这部操作。如果没有安装,个人推荐安装3.7版本的python
我们使用浏览器打开登录服务器的ip,这里可以从串口的LOG看到服务器的IP
因为我使用的是8070端口,所以浏览器登录的时候也要使用8070端口
所以输入 192.168.137.1:8070
然后就能看到
8、进行OTA测试
前面的步骤已经连接上的WIFI,我的组件中是对WIFI进行了NVS的保存操作,所以等下OTA之后不用再输入WIFI的名字和密码了
我们在串口上输入
ota updata http://192.168.137.1:8070/partitions_demo.bin
后面的http的地址,是这里复制过来的,这样比较快,且不会出错。
然后,我们修改一下main.c里面的代码,在里面添加printf打印函数,确保每次升级都是最新编译出来的固件
记得要编译!!!!!!!!!!
然后串口发送OTA升级指令
看LOG
翻译过来就是,正在OTA,从地址偏移的0x10000开始写入,这里的0x10000就是ota_0的起始地址
升级完成后,可以看到printf出来的字符串了
我们再改字符串,编译,发送OTA升级指令
这里的0x170000就是ota_1的起始地址
这就验证正确了。
需要注意一点,如果发送OTA升级指令的时候卡在这里
这个有可能是服务器server没有相应,那么我们到PowerShell窗口界面敲几下回车就可以了
如果有什么问题,请在下面评论或私信,看到会回的