1. 前言
在ESP32开发过程中,对于我们实际的开发人员来说,将程序烧录进入ESP32内不是什么复杂的事情,直接输入idf.py flash
指令即可实现,但是当我们开发完成之后,如何将对应的bin文件提供给测试人员进行相应的测试,以及如何提供bin文件给到产线进行生产呢?
通常将工程文件直接发送出去是不现实的做法,因此需要我们对应的开发人员输出相应的bin文件,提供给测试及生产,那么ESP32 IDF如何实现bin文件的生成?以及如何将生成的多个bin文件进行合并生成一个bin文件呢?
本文将详细介绍,在我们使用 ESP-IDF 开发完对应工程软件之后的一系列生成、打包操作,包括 bin文件的生成
以及相应的 bin文件合并
等操作。
2. 硬件及分区表
控制器:
ESP32-WROOM-32UE
开发方案:ESP-IDF
工程分区表如下:
Tips: 如需更加深入了解ESP32分区表有关内容,可参考博主另外一篇博客 ESP32 分区表(点击跳转!) 或官方 IDF 编程指南。
3. 编译
采用IDF工具实现ESP32的编译,具体命令如下:
idf.py build
编译成功之后,可以在控制终端打印的信息提示生成了对应的文件,同时在最后提示,“To flash, run this command”,对应含义为“如果需要烧录需要运行下述命令”
通过提示可知,我们可以知道需要烧录哪些文件,如此处需要烧录的文件是:
- bootloader.bin 地址:0x1000
- partition-table.bin 地址:0x8000
- ota_data_initial.bin 地址:0xd000
- test.bin 地址:0x10000
4. 烧录
关于esp32的固件烧录主要有两种方式:
- 在工程目录下直接使用
idf flash
命令烧录 - 使用官方烧录工具 Flash Download Tools
4.1 使用 idf flash 命令烧录
使用 idf flash
指令烧录的方式,需要在对应的工程目录下进行烧录,idf工具会自动执行工程编译、之后读取工程 build/
目录下的bin文件并进行烧录,此方式适用于对应的开发人员在软件开发、调试阶段进行烧录及调试使用。
4.2 使用 Flash Download Tools 工具烧录
Flash Download Tools工具下载地址:https://www.espressif.com/en/support/download/other-tools
此方式烧录拿到对应工程编译生成的bin文件,由于此烧录方式不需要提供源码,因此此方式一般常用于工厂生产或测试过程中使用。
关于 Flash Download Tools的使用说明,在下载的工具包内有相关文档说明,大家可自行查阅,下述只对部分关键点进行简述
4.3 Flash Download Tools Q&A
4.3.1 工程所需的烧录bin文件有哪些?
- 在调用
idf.py build
命令编译完以后会生成对应的提示信息,提示信息内包含烧录完整工程所需的bin文件项 - 注意每个工程生成的bin文件项不一样,根据每个工程内容不同,编译生成的bin文件数量也会不一样
- 提示信息中不仅提示了对应bin文件的所处的文件路径,同时在每个文件路径前提示了对应bin文件应烧录的地址
4.3.2 生成的bin文件数量太多,能否合成一个?
在实际开发中,我们会发现一个工程编译下来,会生成好几个bin文件,少则三四个,多则上十个,这么多的bin文件,如果使用 Flash Download Tools 进行烧录的话,每个bin文件都需要点 ...
进行路径选择,并填写对应的烧录地址,这是一个很麻烦的事情,更是一个极容易出错的问题,那能否将这些bin文件合成成为一个bin文件呢?
当然是可以的,接下来我们将分享三种 esp32 bin文件合并的方案,大家可根据自行需要进行选择哪一种方案更加适合自己!
4.3.2.1 使用 FLash Download Tools 合并bin文件
如图所示,Example:
4.3.2.2 使用 esptool.py
工具的 merge_bin
功能进行合并
merge_bin
命令将会合并多个bin文件为一个bin文件,多个bin文件中间间隔的部分将会使用0xFF进行填充
esptool.py --chip ESP32 merge_bin -o merged-flash.bin --flash_mode dio --flash_size 4MB 0x1000 bootloader.bin 0x8000 partition-table.bin 0x10000 app.bin
以上命令将 bootloader.bin(0x1000地址开始烧写)
partition-table.bin(0x8000地址开始烧写)
app.bin(0x10000地址开始烧写)
合并为一个bin文件,并命名为merged-flash.bin(起始地址为0x0)
- 如需指定flash大小可使用
--flash_size
参数 - 如需指定flash最大通讯频率可使用
--flash_freq
参数 - 如需指定flash通讯模式可使用
--flash_mode
参数 - 如需指定合并后的bin文件起始地址偏移可使用
--target-offset 0xNMN
- 如需指定合并后的bin文件包总大小可使用
--fill-flash-size SIZE
,SIZE设置具体的大小
4.3.2.3 使用文本文件描述merge_bin
选项进行合并
4.3.2.2 中需要在 merge_bin
命令中输入所有待合并的bin文件路径以及对应的偏移地址,当bin文件较多的时候输入较多的参数也是一个较为复杂且易出错的问题,那是否可以考虑将此指令编写成一个脚本呢?当我在准备为其编写一个脚本的时候,发现 esp32 其实也考虑了这个点
其实在编译的时候,工程同时也生成了一个文本文件来描述需要生成的bin文件,在对应工程目录下执行了 idf.py build
命令之后,我们可以发现在 build/
目录下会生成一个 flash_args
文件,打开此文件如下:
此文件内描述了调用esptool.py merge
命令的参数信息,因此我们可以直接使用此文件合并一个完整的工程bin文件,且此文件内的信息都是编译自动生成的,也就解决了我们手动一个个输入bin文件造成的误输入导致的错误问题!
具体操作方法如下:
- 编译工程
idf.py build
- 进入编译生成的build目录
cd ./build
- 执行
merge_bin
命令,调用flash_args
文本内的参数esptool.py --chip ESP32 merge_bin -o merged-flash.bin @flash_args
Tips: 如果执行命令报错,请检查 ①flash_args是否在build目录下存在 ②确认执行此命令时已进入build目录下!!
创作不易,转载请注明出处!文章来源:https://www.toymoban.com/news/detail-488363.html
关注、点赞+收藏,可快速查收博主有关分享!文章来源地址https://www.toymoban.com/news/detail-488363.html
到了这里,关于ESP32 bin文件生成及多个bin文件合并指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!