侵权投诉

                  如何快速将BootLoader与APP固件合并

                  嵌入式ARM ? 2021-09-24 14:19 ? 次阅读

                  1、前言嵌入式固件一般分为BootLoader和App,BootLoader用于启动校验、App升级、App版本回滚等功能,BootLoader在cpu上电第一阶段中运行,之后跳转至App地址执行应用程序。

                  因此,在发布固件的时候,会存在BootLoader固件和App固件;此时我们期望是将BootLoader固件和App固件合并成为一个固件,这样在量产时只需烧录一次即可。

                  2、传统方式一些传统的方法都是“土办法”,没什么毛病,但比较繁琐。项目种类增加,或者版本发布频繁时更加体现出繁琐性,且易出错,操作稍微失误可能导致固件不完整;烧录不完整的固件,机子变“砖头”。

                  烧录两次,分别烧录BootLoader和App固件

                  烧录固件到芯片后,再从芯片读取固件,另存为hex文件

                  手动复制、合并固件

                  BootLoader支持App固件传输功能的,只烧录BootLoader,后期再升级App

                  3、高效方式我们目标是通过自动化脚本合并生成一个发布固件,提高效率和确保固件的完整性。

                  3.1 合并文件

                  Linux下的脚本我们用得很多,其实Windows的脚本也非常优秀,利用Windows的脚本可以快速实现增、删、查、改文件。常用Windows脚本命令如下。

                  合并两个文件:copy /b

                  重命名文件:ren 《source_file》 《dect_file》

                  删除文件:del

                  很显然,我们利用其合并命令,只需一条指令即可将BootLoader和App文件合并。

                  假设当前目录存在Boot.bin和App.bin文件,合并后文件命名为Firmware.bin。

                  copy /b .Boot.bin + .App.bin Firmware.bin

                  ?

                  注:Windows的目录路径为反斜杠,与Linux不同。

                  ?3.2 bin转hex

                  我们知道,二进制(bin)文件是不存在地址信息的,cpu上电执行并不一定是从地址0开始执行代码,如STM32芯片起始执行地址为0x8000000。

                  因此不能通过串口工具烧录bin文件,只能通过J-link或者ST-link烧录,并且在烧录前指定存储起始地址。因此,将bin文件转换为hex文件是有必要的。

                  「bin转hex方式:」

                  使用jflash工具,把合并后的bin文件,使用jflash打开,另存为hex格式文件

                  将bin文件烧录置芯片,读取出来,另存为hex文件

                  自己动手写一个bin转hex工具

                  借助第三方bin转hex工具前两者太繁琐,效率低下;第三个比较灵活,但需要花点时间;如果使用优秀的现成工具是最快捷的办法。推荐使用“srec_cat.exe”工具,可以结合Windows脚本一起使用。

                  3.2.1 srec_cat工具

                  srec_cat一个功能非常强大的文件合并、转换工具,支持功能众多,包括:

                  文件合并

                  文件分割

                  bin转hex

                  hex转bin

                  数据填充

                  CRC校验

                  此外,还存在srec的系列工具,文件比较工具 srec_cmp.exe和文件信息查看工具 srec_info.exe,可以从文章后面官方网站下载使用。

                  「文件合并」

                  命令格式:

                  srec_cat.exe 《源文件0》 《文件类型》 《源文件1》 《文件类型》 《目标文件》 《文件类型》

                  例子:

                  srec_cat.exe source0.bin -Binary source1.bin -Binary -o merge.bin -Binary

                  srec_cat.exe source0.hex -Intel source1.hex -Intel -o merge.hex -Intel

                  如果BootLoader和App生产的文件为hex格式,可以直接使用该命令合并为一个hex文件,注意地址的连续性。

                  「bin转hex」

                  命令格式:srec_cat.exe 《bin源文件》 《-Binary》 《-offset》 《偏移地址》 《-Output》 《hex目标文件》 《-Intel》

                  例子:

                  将Boot.bin和App.bin合并的Firmware.bin转换为hex格式文件。

                  srec_cat.exe Firmware.bin -Binary -offset 0x8000000 -o Firmware.hex -Intel

                  0x8000000,是STM32的起始执行地址。

                  更多的srec应用和工具下载详见官方网站:

                  ?

                  http://srecord.sourceforge.net/download.html

                  ?3.3 完整示例

                  第一步,在需要生成固件目录新建一个txt文件。

                  第二步,键入如下内容(Boot固件和App固件可以指定目录)。

                  copy /b .Boot.bin + .App.bin Firmware.bin

                  srec_cat.exe Firmware.bin -Binary -offset 0x8000000 -o Firmware.hex -Intel

                  del Firmware.bin

                  第三步,重命名txt文件为“.bat”后缀文件,即是Windows可执行脚本的文件类型。

                  第四步,双击运行脚本,即可生成目标文件。

                  出现任何目标文件生成失败的情况,检查相关源文件是否存在,路径是否正确。

                  3.4 举一反三

                  以此类比,存在多个App文件的情况,可以通过该方式分别进行合并出一个固件。另外,实际项目中,经常会使用内部flash空闲扇区保存一些设备参数信息,如校准系数、设备地址、序列号等信息。

                  我们可以将参数信息保存为一个bin文件,通过该方式和固件合并,这样量产时将参数和固件一并写入,提高生产效率!

                  来源:https://acuity.blog.csdn.net/article/details/106724373

                  责任编辑:haq

                  原文标题:一个高效的BootLoader与APP固件合并方法

                  文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

                  收藏 人收藏
                  分享:

                  评论

                  相关推荐

                  stm32学习笔记 PWR

                  PWRSTM32的工作电压(VDD)为2.0~3.6V。通过内置的电压调节器提供所需的1.8V电源。....
                  发表于 12-02 13:21 ? 0次 阅读
                  stm32学习笔记 PWR

                  STM32PWM与示波器实验

                  STM32PWM与示波器实验STM32输出PWM波形1、PWM(脉冲宽度调制)介绍2、STM32F1....
                  发表于 12-02 13:21 ? 2次 阅读
                  STM32PWM与示波器实验

                  Arduino IDE进行STM32的串口通信

                  目录一、安装和配置Arduino IDE开发环境1.Arduino 简介2.软件安装及配置二、编译及....
                  发表于 12-02 13:21 ? 2次 阅读
                  Arduino IDE进行STM32的串口通信

                  一些做“飞卡智能车”时候的总结

                  写在前面的话:? ? ? 很有幸带队参加了11-14届的全国大学生智能车竞赛,经历了从”飞思卡尔杯”....
                  发表于 12-02 13:06 ? 2次 阅读
                  一些做“飞卡智能车”时候的总结

                  EEPROM和FLASH,NAND FLASH和NOR FLASH有什么区别?

                  存储器分为两大类:RAM和ROM,RAM就不讲了,主要讨论ROM。ROM最初是不能编程的,出厂什么内....
                  发表于 12-02 12:51 ? 4次 阅读
                  EEPROM和FLASH,NAND FLASH和NOR FLASH有什么区别?

                  [ESP8266学习笔记]components_nvs 非易失性存储 Non-Volatile Storage(NVS),保存数据到flash

                  1.简介有时我们需要保存一些信息,然后在下次启动时使用,比如 wifi的 ssid和passwd。我....
                  发表于 12-02 12:51 ? 2次 阅读
                  [ESP8266学习笔记]components_nvs 非易失性存储 Non-Volatile Storage(NVS),保存数据到flash

                  void 型指针的高阶用法,你掌握了吗?

                  关注+星标公众号,不错过精彩内容转自 | 嵌入式客栈要比较灵活的使用C语言实现一些高层级的框架时,需....
                  发表于 12-02 12:36 ? 3次 阅读
                  void 型指针的高阶用法,你掌握了吗?

                  树莓派4B-SPI读写flash-FM25CL16B(同时支持FM25CL64等其它系列Flash)

                  1.树莓派SPI介绍4B的引脚如下图所示:其中Pin19、21、23是SPI0,接口定义如下所示:时....
                  发表于 12-02 12:36 ? 1次 阅读
                  树莓派4B-SPI读写flash-FM25CL16B(同时支持FM25CL64等其它系列Flash)

                  Nand Flash驱动(实现初始化以及读操作)

                  本节来学习裸机下的Nand Flash驱动,本节学完后,再来学习Linux下如何使用Nand Fla....
                  发表于 12-02 12:36 ? 3次 阅读
                  Nand Flash驱动(实现初始化以及读操作)

                  单片机日记-Day01-买了个开发板套件

                  一、学习计划计划item时间备注资料搜集2020-03-08无二、资料搜集资料备注普中科技-双核-A....
                  发表于 12-02 12:21 ? 4次 阅读
                  单片机日记-Day01-买了个开发板套件

                  FLASH存储浮点数据的解决办法

                  需求: 参数的数据类型为浮点数据,需要存储至FLASH中。解决办法:采用联合体联合体特性:联合体....
                  发表于 12-02 12:21 ? 2次 阅读
                  FLASH存储浮点数据的解决办法

                  微处理器flash及ram内容详解

                  做嵌入式工程师很多年了,有的同事经常ram和flash傻傻分布清楚,只知道ram里有堆栈,不知道RO....
                  发表于 12-02 12:21 ? 4次 阅读
                  微处理器flash及ram内容详解

                  ESP32-Flash分区,基于PlatfromIO-Arduino

                  ESP32-Flash分区,基于PlatfromIO-Arduino在PlatformIO中添加分区....
                  发表于 12-02 12:21 ? 2次 阅读
                  ESP32-Flash分区,基于PlatfromIO-Arduino

                  提高单片机设计的10个细节

                  前言1 干扰对单片机应用系统的影响1.1测量数据误差加大1.2 控制系统失灵1.3 影响单片机RAM....
                  发表于 12-02 12:06 ? 3次 阅读
                  提高单片机设计的10个细节

                  IAP操作中APP操作Flash擦除固件区数据发生硬件错误原因以及解决方法

                  IAP操作中Boot搬运固件区数据到执行区发生硬件错误
                  发表于 12-02 12:06 ? 2次 阅读
                  IAP操作中APP操作Flash擦除固件区数据发生硬件错误原因以及解决方法

                  嵌入式C语言STM32在FLASH中读取写入数据

                  STM32F4XX向指定FLASH地址读写向FLASH中写入数据的主体思想就是先解锁,然后清标志位,....
                  发表于 12-02 12:06 ? 2次 阅读
                  嵌入式C语言STM32在FLASH中读取写入数据

                  《STM32从零开始学习历程》——SPI读取FLASH ID

                  《STM32从零开始学习历程》@EnzoReventonSPI读取FLSAH ID相关链接:SPI物....
                  发表于 12-02 11:51 ? 2次 阅读
                  《STM32从零开始学习历程》——SPI读取FLASH ID

                  关于单片机存储“Program Size: data=56.4 xdata=0 code=1067”对应 flash 和RAM ROM

                  给单片机下载程序是有时会出现:如何知道现在的程序会不会超出单片机的存储?单片机的芯片手册中:flas....
                  发表于 12-02 11:51 ? 2次 阅读
                  关于单片机存储“Program Size: data=56.4 xdata=0 code=1067”对应 flash 和RAM ROM

                  【嵌入式】EEPROM与Flash对比分析

                  不必害怕未知,无需恐惧犯错,做一个Creator!功能特点对比EEPROM的全称是“电可擦除可编程只....
                  发表于 12-02 11:51 ? 2次 阅读
                  【嵌入式】EEPROM与Flash对比分析

                  STM32的Flash地址是0x08000000,从0x00000000不可以?

                  这里写自定义目录标题为什么STM32从Flash地址0x08000000的启动而不是0x000000....
                  发表于 12-02 11:51 ? 2次 阅读
                  STM32的Flash地址是0x08000000,从0x00000000不可以?

                  STM32F4内部Flash读写

                  之前的文章中介绍过STM32F0列的内部Flash读写《STM32CubeMX之内部Flash读写》....
                  发表于 12-02 11:36 ? 3次 阅读
                  STM32F4内部Flash读写

                  单片机 APROM: RAM: Flash:区别

                  APROM是用户程序存储区,我们写的单片机的程序的代码,就放在这里.APROM是,APROM是Fla....
                  发表于 12-02 11:36 ? 3次 阅读
                  单片机 APROM: RAM: Flash:区别

                  浅析ICP与ISP、及IAP三种单片机烧录方式

                  首先来了解以下ICP、ISP、IAP是啥意思?ICP:In Circuit Programing,在....
                  发表于 12-02 11:36 ? 1次 阅读
                  浅析ICP与ISP、及IAP三种单片机烧录方式

                  S32K1XX调试--S32K116的flash擦写程序移植

                  1、环境S32DS IDE2、背景NXP官方出的开发工具 S32KDS提供了图像化配置工具PE(Pr....
                  发表于 12-02 11:36 ? 1次 阅读
                  S32K1XX调试--S32K116的flash擦写程序移植

                  STM32CUBEMX(10)--Flash读写

                  STM32CUBEME--ADC通过轮询方式读取,USART打印概述硬件准备选择芯片型号配置时钟源配....
                  发表于 12-02 11:21 ? 2次 阅读
                  STM32CUBEMX(10)--Flash读写

                  新唐n76e003单片机遥控PWM信号检测控制航灯系统

                  第一次使用学习单片机编程, 使用了n76e003, 主要在检测pwm的信号问题上花了比较多的时间,最....
                  发表于 12-02 11:06 ? 3次 阅读
                  新唐n76e003单片机遥控PWM信号检测控制航灯系统

                  【STM32】STM32 变量存储在片内FLASH的指定位置

                  在这里以STM32L4R5为例(官方出的DEMO板),将变量存储在指定的片内FLASH地址(0x08....
                  发表于 12-02 11:06 ? 2次 阅读
                  【STM32】STM32 变量存储在片内FLASH的指定位置

                  远程升级单片机程序设计思路

                  关注+星标公众号,不错过精彩内容来源 | 嵌入式技术开发之前给大家分享过IAP升级APP的例子,今天....
                  发表于 12-02 11:06 ? 4次 阅读
                  远程升级单片机程序设计思路

                  英飞凌TC264D单片机供电电路设计

                  这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成....
                  发表于 12-02 10:51 ? 2次 阅读
                  英飞凌TC264D单片机供电电路设计

                  【STC单片机学习】第十五课:I2C通信-EEPROM

                  【朱老师课程总结 侵删】第一部分、章节目录第三部分、随堂记录1.15.1.EEPROM及其背景知识1....
                  发表于 12-02 10:51 ? 4次 阅读
                  【STC单片机学习】第十五课:I2C通信-EEPROM

                  腾讯成功注册狗头表情商标

                  近日,根据企查查 App 数据显示,腾讯申请的“狗头”商标正式完成注册,主要涉及科学仪器、金属材料、....
                  的头像 lhl545545 发表于 12-02 10:44 ? 128次 阅读

                  Twin Builder—系统级多物理域数字孪生平台

                  TwinBuilder是ANSYS公司系统仿真单元的核心产品,是一款专业的跨学科多领域系统仿真软件和....
                  的头像 林瑶 发表于 12-02 10:34 ? 6次 阅读
                  Twin Builder—系统级多物理域数字孪生平台

                  STM32单片机基础18——使用硬件QSPI读写SPI Flash(W25Q64)

                  本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件QSPI外设与 S....
                  发表于 12-02 10:21 ? 2次 阅读
                  STM32单片机基础18——使用硬件QSPI读写SPI Flash(W25Q64)

                  单片机:EEPROM介绍与操作

                  文章目录EEPROM介绍EEPROM 单字节读写操作时序EEPROM 写数据流程EEPROM 读数据....
                  发表于 12-02 10:21 ? 2次 阅读
                  单片机:EEPROM介绍与操作

                  单片机中为什么有了Flash还有EEPROM?

                  时,然后才能再下一次,这么折腾一天也改不了几次。历史的车轮不断前进,伟大的EEPROM出现了,拯救了....
                  发表于 12-02 10:06 ? 0次 阅读
                  单片机中为什么有了Flash还有EEPROM?

                  flash 磨损均衡处理

                  FLASH磨损均衡原理及实现背景磨损均衡原理磨损均衡实现定长数据读写不定长数据读写多个不定长数据存储....
                  发表于 12-02 10:06 ? 0次 阅读
                  flash 磨损均衡处理

                  String-MCU内存字符串和Flash字符串指针

                  ?  很多时候,MCU受指今影响,访问Flash和内部RAM时的方法不同,所以编译器在编译Flash....
                  发表于 12-02 09:51 ? 2次 阅读
                  String-MCU内存字符串和Flash字符串指针

                  单片机ram和rom的区别

                  单片机运行时需要调用某个程序/函数/固定数据时就需要读取ROM,然后在RAM中执行这些程序/函数的功....
                  发表于 12-02 09:36 ? 6次 阅读
                  单片机ram和rom的区别

                  痞子衡嵌入式:MCUBootUtility v2.4发布,轻松更换Flashloader文件

                  --  痞子衡维护的NXP-MCUBootUtility工具距离上一个版本(v2.3.1)发布过去2....
                  发表于 12-02 09:36 ? 11次 阅读
                  痞子衡嵌入式:MCUBootUtility v2.4发布,轻松更换Flashloader文件

                  如何使用Simplicity Studio查看MCU内部Flash的数据

                  很多嵌入式MCU开发工程师在产品开发和调试阶段,需要将MCU内部Flash存放的Code数据读取出来....
                  发表于 12-02 09:36 ? 2次 阅读
                  如何使用Simplicity Studio查看MCU内部Flash的数据

                  Keil编译后生成bin文件占用内部Flash的大小,RAM,ROM,Code,RO-data,RW-data,ZI-data

                  Keil编译后生成bin文件占用内部Flash的大小,RAM,ROM,Code,RO-data,RW....
                  发表于 12-02 09:21 ? 6次 阅读
                  Keil编译后生成bin文件占用内部Flash的大小,RAM,ROM,Code,RO-data,RW-data,ZI-data

                  STM32F407 FSMC驱动NAND FLASH MX30LF2GE8AB 附带测试程序链接

                  STM32F407 FSMC驱动NAND FLASH MX30LF2GE8AB简介:FSMC全称灵活....
                  发表于 12-02 09:21 ? 2次 阅读
                  STM32F407 FSMC驱动NAND FLASH MX30LF2GE8AB 附带测试程序链接

                  RISC-V MCU开发 (六):代码下载

                  RISC-V MCU开发 (六):代码下载MounRiver? Studio(MRS)配合GD-Li....
                  发表于 12-02 09:06 ? 2次 阅读
                  RISC-V MCU开发 (六):代码下载

                  STM32入门开发: 介绍SPI总线、读写W25Q64(FLASH)(硬件+模拟时序)

                  一、环境介绍编程软件: keil5操作系统: win10MCU型号: STM32F103ZET6ST....
                  发表于 12-02 09:06 ? 4次 阅读
                  STM32入门开发: 介绍SPI总线、读写W25Q64(FLASH)(硬件+模拟时序)

                  STM32L0芯片FLASH编程示例及提醒

                  关注+星标公众号,不错过精彩内容来源|茶花MCU这里就STM32L053芯片的FLASH编程做个简单....
                  发表于 12-01 21:06 ? 9次 阅读
                  STM32L0芯片FLASH编程示例及提醒

                  STM32CUBEIDE中修改FLASH起始地址的方法

                  若在MCU芯片中需要将程序分成两个部分(如同时包含DFU下载程序与正常的应用程序),则需要将其中一者....
                  发表于 12-01 20:51 ? 4次 阅读
                  STM32CUBEIDE中修改FLASH起始地址的方法

                  关于STM32F103C8T6内部FLASH容量的问题

                  ? ? 在STM32中文参考手册的第3页就看到STM32MCU的名命规则如下? ??? ? 显而易见....
                  发表于 12-01 20:51 ? 0次 阅读
                  关于STM32F103C8T6内部FLASH容量的问题

                  EasyFlash移植手册----基于stm32

                  文章目录EasyFlash移植手册----基于stm321.下载源码2.文件结构3.添加文件4.移植....
                  发表于 12-01 20:36 ? 2次 阅读
                  EasyFlash移植手册----基于stm32

                  【flash系列】带校验、备份的简易存储方案

                  背景在实际项目开发过程中,常常会涉及到一些参数的存储,这些参数占用存储空间不大,但需要具备可读可写的....
                  发表于 12-01 20:21 ? 0次 阅读
                  【flash系列】带校验、备份的简易存储方案

                  FPGA和USB3.0通信-FX3硬件设计简谈

                  FPGA和USB3.0通信-FX3硬件设计简谈本次演示用的是USB3.0芯片-CYPRESS CYU....
                  发表于 12-01 20:06 ? 3次 阅读
                  FPGA和USB3.0通信-FX3硬件设计简谈

                  WS2811使用时需要注意哪些东西

                  WS2811 使用时需要注意的东西:1.发送0 1时的高低点平时间,建议使用逻辑分析仪或示波器进行波形查看,精准时间大小。2.WS28...
                  发表于 12-01 08:34 ? 0次 阅读

                  51系列的STC12 与STC15 IO模式设置

                  51系列的STC12  STC15 IO模式同样的P1 ~P3 IO设置寄存器为P1M1 P1M0 ~ P3M1 P3M0C语言移位操作完...
                  发表于 12-01 08:32 ? 0次 阅读

                  在51单片机和STM32中如何进行整个开发流程

                  单片机的使用不仅是简单的代码堆砌和模块组合,使用单片机进行一个复杂的项目实践,需要的不仅是对各个模块的熟练使用,更需要对...
                  发表于 12-01 08:24 ? 0次 阅读

                  使用51单片机驱动AD9833模块

                  使用51驱动AD9833模块的使用关于AD9833相关参数程序流程代码片上传程序总结关于AD9833AD9833是一款低功耗、可编程波形发...
                  发表于 12-01 07:53 ? 0次 阅读

                  使用单片机AT89S52控制直流电机的运转

                  概述使用单片机AT89S52 / AT89C51控制直流电机进行高/低速正/反转,另有红、黄、绿LED灯指示电机状态,具体实现功能如下...
                  发表于 12-01 07:50 ? 0次 阅读

                  使用CC2530单片机驱动OLED显示器显示汉字及英文

                  摘要本文章主要讲述了显示设备的发展史,从最初的胶片,CRT显示器,液晶显示,到LED显示器。然后介绍了各种显示器的工作原...
                  发表于 12-01 07:34 ? 0次 阅读

                  怎样去使用C51单片机的XBYTE

                  【实例】百度结果:这个主要是在用C51的P0,P2口做外部扩展时使用,其中XBYTE [0x0002],P2口对应于地址高位,P0口对应...
                  发表于 12-01 07:04 ? 0次 阅读

                  8051系列单片机固件升级iap声明

                  8051系列单片机固件升级iap声明:#define UPGRADE_FLAG 0xaa //升级标志位#define APP_START_ADDR 0x000...
                  发表于 12-01 07:01 ? 0次 阅读

                  单片机的选型指南

                  单片机的的选型是一件重要而费心的事情;如果单片机型号选择得合适,单片机应用系统就会得经济,工作可靠;如果选择得不合适,就会造...
                  发表于 12-01 06:37 ? 0次 阅读

                  80C51系列单片机硬件基础相关资料推荐

                  80C51系列单片机硬件基础一、总体介绍;  单片机是一个大规模的集成电路芯片。现在一般介绍单片机时,一般以MCS-51单片机为...
                  发表于 12-01 06:36 ? 0次 阅读
                  欧美美女的白虎