0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机BootLoader与APP如何合并?

jf_pJlTbmA9 来源:网络 作者:网络 2023-10-25 17:17 次阅读

1、前言

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

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

wKgZomUDwb-AJ8SyAAAIMPnyX6s470.png

2、传统方式

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

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

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

手动复制、合并固件

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

3、高效方式

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

3.1 合并文件

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

合并两个文件:copy /b

重命名文件:ren

删除文件:del

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

例子:

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

copy/b.Boot.bin+.App.binFirmware.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 <-Binary> <-offset> <偏移地址> <-Output> <-Intel>

例子:

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

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

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

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文件,通过该方式和固件合并,这样量产时将参数和固件一并写入,提高生产效率!

wKgZomUDwcGAZdTvAAAK3sGfTy4445.png

来源:网络

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    455

    文章

    50714

    浏览量

    423139
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634635
  • bootloader
    +关注

    关注

    2

    文章

    235

    浏览量

    45612
收藏 人收藏

    评论

    相关推荐

    BootLoaderAPP之间的关系

    STM32单片机BootLoader扫盲BootLoaderAPP之间的关系APP就是平时写的单片机
    发表于 12-09 06:01

    bootloaderapp配置方法分享

    :STM32F103C8T6单片机flash有4K,前20K空间留给bootloader,从20K之后开始存放APP程序。所以IROM1开始地址设置为 0x8005000,大小为20K。如果A
    发表于 01-11 06:47

    求解,把Bootloaderapp合并成一个固件后出现的几个问题

    各位大佬,大家好,我想把Bootloaderapp合并成一个固件,但是目前出现问题了,请大家不吝赐教。几种情况如下: 1.单独用J-flash烧录bootloader,然后用RT S
    发表于 09-07 18:28

    Atmel Samc21单片机BootLoader程序和资料合集免费下载

    单片机程序为BootLoader程序,即只需要提供.HEX文件或者.bin文件,利用232串口就可以向单片机进行烧录.而不需要调试器,与本人上传的"SAMC21 BootLoader
    发表于 06-27 08:00 48次下载
    Atmel Samc21<b class='flag-5'>单片机</b>的<b class='flag-5'>BootLoader</b>程序和资料合集免费下载

    如何在PIC18单片机中使用BootLoader

    介绍在PIC18系列单片机中使用BootLoader的原理、方法及优点;介绍HI-TECH公司使用C语言实现BootLoader的程序,给出详细的使用方法和参数配置方法;针对程序中存在的问题进行探讨
    发表于 05-21 08:00 6次下载
    如何在PIC18<b class='flag-5'>单片机</b>中使用<b class='flag-5'>BootLoader</b>

    单片机Bootloader可以实现用户轻松升级程序

    并存储在规定的Flash中。 这个过程与手机端更新APP类似。 以STM8单片机为例,该如何实现Bootloader呢?今天和大家分享一下。 01 什么是Bootloader
    的头像 发表于 10-23 16:57 4960次阅读
    <b class='flag-5'>单片机</b>的<b class='flag-5'>Bootloader</b>可以实现用户轻松升级程序

    STM8单片机为例,如何实现Bootloader

    上位把.bin/hex文件以CAN通讯的方式发送给单片机并存储在规定的Flash中。这个过程与手机端更新APP类似。 以STM8单片机为例,该如何实现
    的头像 发表于 04-12 09:48 3143次阅读
    STM8<b class='flag-5'>单片机</b>为例,如何实现<b class='flag-5'>Bootloader</b>?

    如何快速将BootLoaderAPP固件合并

    应用程序。 因此,在发布固件的时候,会存在BootLoader固件和App固件;此时我们期望是将BootLoader固件和App固件合并成为
    的头像 发表于 09-24 14:19 5334次阅读

    STM32单片机BootLoader

    STM32单片机BootLoader如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少
    发表于 11-11 15:21 43次下载
    STM32<b class='flag-5'>单片机</b><b class='flag-5'>BootLoader</b>

    PIC单片机BootLoader实现

    PIC单片机BootLoader实现
    发表于 11-16 11:06 15次下载
    PIC<b class='flag-5'>单片机</b>的<b class='flag-5'>BootLoader</b>实现

    STM32单片机bootloader扫盲

    STM32单片机BootLoader扫盲BootLoaderAPP之间的关系APP就是平时写的单片机
    发表于 11-26 18:21 77次下载
    STM32<b class='flag-5'>单片机</b><b class='flag-5'>bootloader</b>扫盲

    单片机 IAP 功能基础开发篇之APP升级(三)

    1、前言上一篇单片机 IAP 功能基础开发篇之APP升级(二)讲到了单片机APP 程序升级具体的设计方案,这篇介绍的是升级进阶功能,如何在编译后获取程序的起始地址、结束地址和程序大
    发表于 12-03 12:21 4次下载
    <b class='flag-5'>单片机</b> IAP 功能基础开发篇之<b class='flag-5'>APP</b>升级(三)

    适合单片机的几款开源Bootloader

    如果日常工作中经常使用linux,那么对U-Boot,LILO,GRUB等常用Bootloader一定不陌生。但是这些Bootloader主要用于引导linux启动,不太适合单片机产品。
    发表于 05-25 15:42 7390次阅读
    适合<b class='flag-5'>单片机</b>的几款开源<b class='flag-5'>Bootloader</b>

    单片机BootLoaderAPP如何合并

    嵌入式固件一般分为BootLoaderAppBootLoader用于启动校验、App升级、App版本回滚等功能,
    的头像 发表于 07-25 11:29 1441次阅读
    <b class='flag-5'>单片机</b><b class='flag-5'>BootLoader</b>与<b class='flag-5'>APP</b>如何<b class='flag-5'>合并</b>

    单片机WiFi模块怎样连接手机APP

    单片机WiFi模块连接到手机APP通常涉及以下几个步骤: 选择单片机和WiFi模块 :选择合适的单片机(如Arduino, ESP32等)和WiFi模块(如ESP8266, ESP3
    的头像 发表于 09-10 15:31 900次阅读