ESP32 bin文件生成及多个bin文件合并指南
文章目录
- 1. 前言
- 2. 硬件及分区表
- 3. 编译
- 4. 烧录
- 4.1 使用 idf flash 命令烧录
- 4.2 使用 Flash Download Tools 工具烧录
- 4.3 Flash Download Tools Q&A
- 4.3.1 工程所需的烧录bin文件有哪些?
- 4.3.2 生成的bin文件数量太多,能否合成一个?
- 4.3.2.1 使用 FLash Download Tools 合并bin文件
- 4.3.2.2 使用 `esptool.py` 工具的 `merge_bin` 功能进行合并
- 4.3.2.3 使用文本文件描述`merge_bin`选项进行合并
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目录下!!
创作不易,转载请注明出处!
关注、点赞+收藏,可快速查收博主有关分享!
ESP32 bin文件生成及多个bin文件合并指南相关推荐
- pb文件生成java类,根据proto文件生成pb和pb_service文件
假如有一个HelloWorld.proto文件,内容如下: syntax = "proto3"; option java_package = "ex.grpc" ...
- 如何修改linux文件生成日期,我如何更改文件的修改/创建日期?
问题描述 有没有办法改变文件被修改/创建的日期(在Nautilus中或者用ls -l命令显示)?理想情况下,我正在寻找一个命令,可以将一大堆文件的日期/时间戳更早或更晚(例如+8小时或-4天等)更改为 ...
- python的.py文件生成可运行的exe文件
使用PyInstaller生成可运行的exe文件 使用第三方库PyInstaller实现.py文件快速生成exe文件可执行文件 (cmd命令行)pyinstaller -F <文件名.py> ...
- android 阻止文件生成方法,禁止软件创建文件夹 禁止创建文件夹
安卓 怎么阻止软件在文件夹中创建文件 首先说明,Android软件之所以会在文件夹中创建文件,大多数是为了做软件缓存,防止反复的从服务器读取数据,照成用户流量浪费,如果强制的阻止可能会让软件报错. 一 ...
- C#如何实现XML文件生成和读取,XML文件的打开方式,解决方案!!!!!!
以前对XML文件没什么了解,觉得很神奇,其实C#中的XML文件一般就是你们项目下的配置文件,由根节点和子节点组成. 接下来给大家说说XML文件最基础的读取和生成! 以下为C#程序XML文件生成的控制台 ...
- [转]在VS中为C/C++源代码文件生成对应的汇编代码文件(.asm)
原文链接:https://www.cnblogs.com/lulipro/p/9926474.html 转载申明:感谢原作者!如有侵权,请联系我删除,谢谢
- cmd命令生成webservice_根据wsdl文件生成WebService客户端代码
有时候在项目中,一个项目可能有好几个公司在做.系统之间难免会出现互相调用接口的现象,这时候有一种办法就是使用webService.本篇文章将介绍如何将对接系统提供的WebService接口,根据对方提 ...
- jquery文件上传插件 uploadify java_jQuery文件上传插件Uploadify使用指南
对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持 Flash,主要特性:支持多文件上传.HTML5版本可拖拽上传.实时上传进度条显示.强大的参数 定制功能,如文件大小. ...
- MDK中hex转BIN文件生成
MDK开发的技巧: 1.使用fromelf.exe程序,将.hex或者.axf转化为.bin文件. 2.利用.bat批处理文件,将.bin和.hex拷贝到需要的文件夹下. 例如:E685工装中 Run ...
最新文章
- Xamarin XAML语言教程使用属性设置进度条的当前进度
- windows按照sqlite笔记
- 简单的DPDK介绍与分析
- linux内核 RCU机制概述
- java calendar类_2020 年,你还在使用 Java 中的 SimpleDateFormat 吗?
- cmake构建工具 初步01
- 南理工计算机学院研究生课程的评价和反思(研一上)
- 如何自学python-如何自学python语言
- 中山大学计算机学院官网万海,中山大学
- WIN10 企业版 LTSC 激活
- 如何使用Charles进行APP抓包
- 硬件设计——一键开关机
- 计算机主板启动显示器黑屏,电脑开机显示器黑屏怎么回事_开机显示器黑屏怎么解决...
- bat文件的@echo off是什么作用?
- OPPO云VPC网络实践
- Vue.component的属性
- 用C语言程序实现十进制转换为二进制
- 加勒比海盗5——死无对证
- 这篇3万字的Java后端面试总结,面试官看了瑟瑟发抖(汇总)
- 六“元”数智增长模型,企业元宇宙时代的经营新范式