文章目录

  • 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文件合并指南相关推荐

  1. pb文件生成java类,根据proto文件生成pb和pb_service文件

    假如有一个HelloWorld.proto文件,内容如下: syntax = "proto3"; option java_package = "ex.grpc" ...

  2. 如何修改linux文件生成日期,我如何更改文件的修改/创建日期?

    问题描述 有没有办法改变文件被修改/创建的日期(在Nautilus中或者用ls -l命令显示)?理想情况下,我正在寻找一个命令,可以将一大堆文件的日期/时间戳更早或更晚(例如+8小时或-4天等)更改为 ...

  3. python的.py文件生成可运行的exe文件

    使用PyInstaller生成可运行的exe文件 使用第三方库PyInstaller实现.py文件快速生成exe文件可执行文件 (cmd命令行)pyinstaller -F <文件名.py> ...

  4. android 阻止文件生成方法,禁止软件创建文件夹 禁止创建文件夹

    安卓 怎么阻止软件在文件夹中创建文件 首先说明,Android软件之所以会在文件夹中创建文件,大多数是为了做软件缓存,防止反复的从服务器读取数据,照成用户流量浪费,如果强制的阻止可能会让软件报错. 一 ...

  5. C#如何实现XML文件生成和读取,XML文件的打开方式,解决方案!!!!!!

    以前对XML文件没什么了解,觉得很神奇,其实C#中的XML文件一般就是你们项目下的配置文件,由根节点和子节点组成. 接下来给大家说说XML文件最基础的读取和生成! 以下为C#程序XML文件生成的控制台 ...

  6. [转]在VS中为C/C++源代码文件生成对应的汇编代码文件(.asm)

    原文链接:https://www.cnblogs.com/lulipro/p/9926474.html 转载申明:感谢原作者!如有侵权,请联系我删除,谢谢

  7. cmd命令生成webservice_根据wsdl文件生成WebService客户端代码

    有时候在项目中,一个项目可能有好几个公司在做.系统之间难免会出现互相调用接口的现象,这时候有一种办法就是使用webService.本篇文章将介绍如何将对接系统提供的WebService接口,根据对方提 ...

  8. jquery文件上传插件 uploadify java_jQuery文件上传插件Uploadify使用指南

    对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持 Flash,主要特性:支持多文件上传.HTML5版本可拖拽上传.实时上传进度条显示.强大的参数 定制功能,如文件大小. ...

  9. MDK中hex转BIN文件生成

    MDK开发的技巧: 1.使用fromelf.exe程序,将.hex或者.axf转化为.bin文件. 2.利用.bat批处理文件,将.bin和.hex拷贝到需要的文件夹下. 例如:E685工装中 Run ...

最新文章

  1. Xamarin XAML语言教程使用属性设置进度条的当前进度
  2. windows按照sqlite笔记
  3. 简单的DPDK介绍与分析
  4. linux内核 RCU机制概述
  5. java calendar类_2020 年,你还在使用 Java 中的 SimpleDateFormat 吗?
  6. cmake构建工具 初步01
  7. 南理工计算机学院研究生课程的评价和反思(研一上)
  8. 如何自学python-如何自学python语言
  9. 中山大学计算机学院官网万海,中山大学
  10. WIN10 企业版 LTSC 激活
  11. 如何使用Charles进行APP抓包
  12. 硬件设计——一键开关机
  13. 计算机主板启动显示器黑屏,电脑开机显示器黑屏怎么回事_开机显示器黑屏怎么解决...
  14. bat文件的@echo off是什么作用?
  15. OPPO云VPC网络实践
  16. Vue.component的属性
  17. 用C语言程序实现十进制转换为二进制
  18. 加勒比海盗5——死无对证
  19. 这篇3万字的Java后端面试总结,面试官看了瑟瑟发抖(汇总)
  20. 六“元”数智增长模型,企业元宇宙时代的经营新范式

热门文章

  1. Linux服务器:Linux中VMware虚拟机硬盘空间扩大方法
  2. 区块链以价值开启“大版权时代”
  3. ACM MM 2020大奖项出炉!南开获最佳论文奖,西安交大获最佳学生论文奖
  4. 出门问问李志飞:人工智能创业者不要欺骗自己
  5. 总结 — 键盘输入特殊字符
  6. Fragment的懒加载与生命周期详解
  7. 2018年广东工业大学文远知行杯新生程序设计竞赛 1007 活在无尽梦境的后续 β
  8. Android Studio之初体验 ---- 很好很强大
  9. [陈鹏导师精益项目实战]华北区家电行业精益改善项目第五期启动
  10. 光源控制器接口定义说明