在嵌入式开发中,尤其是基于 MCU 的系统设计中,Bootloader + APP 架构是一种非常常见且成熟的方案。

但在实际量产或调试过程中,往往会遇到一个问题:

如何把 Bootloader 和 APP 固件合并成一个 HEX 文件,一次烧录完成?

本文将结合实际工程经验,讲清楚:

  • Bootloader + APP 架构原理

  • HEX 文件为什么可以合并

  • EXE 工具使用方法

  • 实际开发中的注意事项

HEX合并工具下载:百度网盘 请输入提取码 提取码: k1h6


一、为什么需要合并 HEX 文件?

在 MCU 项目中,通常会将系统划分为两个部分:

Bootloader(引导程序)

  • 位于 Flash 起始地址(如 0x08000000

  • 负责:

    • 上电初始化

    • 固件升级(串口 / CAN / OTA)

    • 跳转到 APP


APP(应用程序)

  • 位于 Bootloader 之后(如 0x08008000

  • 负责:

    • 业务逻辑

    • 控制算法

    • 通信协议


问题来了

编译后你会得到两个文件:

boot.hex
app.hex

如果分别烧录:

  • 需要操作两次

  • 容易出错

  • 不适合量产

    最佳方案:合并成一个 HEX,一次烧录


二、为什么 HEX 文件可以直接合并?

Intel HEX 文件本质上是:

带地址信息的存储格式

例如:

:10 0000 00 112233445566778899AABBCCDDEEFF ...

关键点:

  • 每一行都带地址

  • 数据不是连续存储,而是“地址映射”


这意味着:

只要满足:

Bootloader 地址区 ≠ APP 地址区

例如:

Boot: 0x08000000 ~ 0x08007FFF
APP : 0x08008000 ~ 0x0803FFFF

两者不会冲突,可以直接合并


三、HEX 合并工具使用说明(exe版)

HEX合并工具下载:链接: https://pan.baidu.com/s/1ADZGQt0Og8vV6XwS3LTPaA?pwd=k1h6 提取码: k1h6


3.1 使用前准备

将以下文件放在同一目录:

merge_hex.exe
boot.hex
app.hex

3.2 操作步骤

  1. 双击运行 merge_hex.exe

  2. 程序自动:

    • 扫描当前目录 .hex

    • 取前两个文件

    • 执行合并

  3. 输出文件:

merged1.hex

3.3 成功提示

✅ 合并完成: merged1.hex

  • 自动扫描 .hex 文件

  • 默认取前两个,因为exe程序中会自动扫描前两个hex文件,所以在同exe程序目录下只保留合并的两个hex即可,hex命名没有要求。

  • 输出固定为 merged1.hex


四、常见问题分析(工程重点)


4.1 地址冲突

地址冲突: 0x08001234

原因:

  • Boot 和 APP 写入同一地址

典型错误:

  • APP 起始地址仍是 0x08000000

解决:

  • 修改 APP 工程地址(Keil):
IROM1 Start = 0x08008000

4.2 选错 HEX 文件

工具默认:

hex_files[0]
hex_files[1]

如果目录里有多个 hex,会选错

特别注意:

只保留:
boot.hex
app.hex

五、结语

在 MCU 开发中,Bootloader + APP 架构几乎是标配。 而 HEX 合并,是从“开发阶段”走向“工程化”的关键一步。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐