ESP32 bin文件生成及多个bin文件合并指南

这篇具有很好参考价值的文章主要介绍了ESP32 bin文件生成及多个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

工程分区表如下:
ESP32 bin文件生成及多个bin文件合并指南

Tips: 如需更加深入了解ESP32分区表有关内容,可参考博主另外一篇博客 ESP32 分区表(点击跳转!) 或官方 IDF 编程指南。

3. 编译

采用IDF工具实现ESP32的编译,具体命令如下:

idf.py build

ESP32 bin文件生成及多个bin文件合并指南

编译成功之后,可以在控制终端打印的信息提示生成了对应的文件,同时在最后提示,“To flash, run this command”,对应含义为“如果需要烧录需要运行下述命令”

通过提示可知,我们可以知道需要烧录哪些文件,如此处需要烧录的文件是:

  • bootloader.bin 地址:0x1000
  • partition-table.bin 地址:0x8000
  • ota_data_initial.bin 地址:0xd000
  • test.bin 地址:0x10000

ESP32 bin文件生成及多个bin文件合并指南
ESP32 bin文件生成及多个bin文件合并指南

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的使用说明,在下载的工具包内有相关文档说明,大家可自行查阅,下述只对部分关键点进行简述
ESP32 bin文件生成及多个bin文件合并指南
ESP32 bin文件生成及多个bin文件合并指南

4.3 Flash Download Tools Q&A

4.3.1 工程所需的烧录bin文件有哪些?

  • 在调用idf.py build命令编译完以后会生成对应的提示信息,提示信息内包含烧录完整工程所需的bin文件项
  • ESP32 bin文件生成及多个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:ESP32 bin文件生成及多个bin文件合并指南


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设置具体的大小

ESP32 bin文件生成及多个bin文件合并指南


4.3.2.3 使用文本文件描述merge_bin选项进行合并

  4.3.2.2 中需要在 merge_bin命令中输入所有待合并的bin文件路径以及对应的偏移地址,当bin文件较多的时候输入较多的参数也是一个较为复杂且易出错的问题,那是否可以考虑将此指令编写成一个脚本呢?当我在准备为其编写一个脚本的时候,发现 esp32 其实也考虑了这个点

ESP32 bin文件生成及多个bin文件合并指南

  其实在编译的时候,工程同时也生成了一个文本文件来描述需要生成的bin文件,在对应工程目录下执行了 idf.py build 命令之后,我们可以发现在 build/ 目录下会生成一个 flash_args 文件,打开此文件如下:
ESP32 bin文件生成及多个bin文件合并指南

  此文件内描述了调用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
  • ESP32 bin文件生成及多个bin文件合并指南

Tips: 如果执行命令报错,请检查 ①flash_args是否在build目录下存在 ②确认执行此命令时已进入build目录下!!


创作不易,转载请注明出处!

关注、点赞+收藏,可快速查收博主有关分享!文章来源地址https://www.toymoban.com/news/detail-488363.html


到了这里,关于ESP32 bin文件生成及多个bin文件合并指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL JOIN 子句:合并多个表中相关行的完整指南

    JOIN子句用于基于它们之间的相关列合并来自两个或更多表的行。 让我们看一下“Orders”表的一部分选择: OrderID CustomerID OrderDate 10308 2 1996-09-18 10309 37 1996-09-19 10310 77 1996-09-20 然后,看一下“Customers”表的一部分选择: CustomerID CustomerName ContactName Country 1 Alfreds Futterkiste Maria A

    2024年02月05日
    浏览(48)
  • 【uniapp小程序-生成二维码+多个图片文字合并一张图】

    下载uqrcodejs: https://uqrcode.cn/doc/guide/getting-started.html

    2024年02月03日
    浏览(62)
  • ccs生成bin文件方法

    右击工程文名,点击属性 , 然后 依次点击 Build-Step , 如下图 在 Post Build Step中输入如下字符:\\\"${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat\\\" \\\"${BuildArtifactFileName}\\\" \\\"${BuildArtifactFileBaseName}.bin\\\" \\\"${CG_TOOL_ROOT}/bin/ofd2000.exe\\\" \\\"${CG_TOOL_ROOT}/bin/hex2000.exe\\\" \\\"${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe\\\"

    2024年01月18日
    浏览(39)
  • python 合并多个excel文件

    使用 openpyxl 思路: 读取n个excel的文件,存储在一个二维数组中,注意需要转置。 将二维数组的数据写入excel。 安装软件: 源代码: 效果截图: 使用 pandas 思路: 读取n个excel的文件,存储在一个二维数组中,注意需要转置。 将二维数组的数据写入excel。 安装软件: 源代码

    2024年02月14日
    浏览(43)
  • 【方法】如何合并多个PDF文件?

    多个PDF文件,想合并成一个文件,要怎么操作呢? 如果PDF文件的数量少,并且页数也不多,可以试试将内容复制黏贴到Word文档,再转为PDF格式;如果文件数量多,页数也多,就不太合适了,容易出错,也十分耗费时间。 想要快速合并多个PDF文件,又不容易出错,不妨借助

    2024年01月24日
    浏览(45)
  • Keil使用 fromelf 生成bin文件

    一、语法格式如下: fromelf    [options]    input_file [options] 选项如下,可以组合使用,两者之间用空格隔开: 二、在Keil中的使用过程 1、配置Output,生成可执行文件 aa即为可执行文件名,后缀为axf。即编译后会生成一个叫aa.axf的文件,然后再由这个文件生成bin文件。 2、配置

    2023年04月26日
    浏览(44)
  • 使用Python合并多个Excel文件

    合并Excel可以将多个文件中的数据合并到一个文件中,这样可以帮助我们更好地汇总和管理数据。日常工作中,合并Excel主要有以下两种需求: 将多个Excel文件合并为一个文件 将多个Excel工作表合并为一个工作表 这篇文章将介绍如何使用第三方Python库 Spire.XLS for Python 实现以上

    2024年02月05日
    浏览(44)
  • 合并多个大语言模型文件的方法

    运行下面命令, (示例)Linux and macOS: (示例)Windows command line: refer: https://huggingface.co/TheBloke/Swallow-70B-instruct-GGUF 完结!

    2024年01月17日
    浏览(51)
  • PHPWord 实现合并多个word文件

    本来想着当调包侠呢,结果翻了一遍文档,没有这种操作支持,阿这😂 不出意外的一顿胡扯,给👨‍🦳气的要中风啦 word 也就是 docx 结尾的文件本质上就是 xml 字符串, 两个word文件合并其实就是把两个字符串拼接起来,你真是小天才呢👨‍🎤 原地址 【能打开的直接抄就

    2024年02月15日
    浏览(47)
  • lammps教程:多个dump文件合并为一个文件

    大家好,我是小马老师。 本文介绍多个dump文件合并为一个dump文件的方法。 在前面的文章中,介绍过python ovito可以把一个dump文件按帧拆分为多个dump文件。 同理,多个dump文件也可以合并为一个dump文件。 基本原理是先读入多个dump文件,然后再合并输出为一个单独的文件。

    2023年04月09日
    浏览(196)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包