乐于分享
好东西不私藏

MDK-使用MDK下载bin文件到MCU中

MDK-使用MDK下载bin文件到MCU中

MDK-使用MDK下载bin文件到MCU中

在嵌入式开发中,我们偶尔会遇到这样的尴尬局面:

  1. 1. 只有现成的 .bin 固件,没有完整的工程源码;
  2. 2. 缺乏厂商的专用下载工具(或者工具极难用);
  3. 3. J-Link 变严格/收费,旧版驱动频繁弹窗或无法识别;
  4. 4. 手头只有最便宜的 DAP-Link 或 ST-Link,但它们往往不直接支持原始 .bin 的拖拽或地址偏移配置。

今天教大家一个非常实用的小技巧:利用开源小工具 srec_cat(或 J-Flash / bin2hex)将 .bin 转换为带有正确起始地址的 .hex 文件,然后伪装成 Keil MDK 的编译产物,直接用 MDK 烧录到芯片中!

一、 为什么不能直接用 MDK 烧录 .bin?

  • • .bin 文件:是纯粹的二进制镜像文件,里面只有代码字节,不包含“这段代码应该烧录到 Flash 的哪个地址”的信息。
  • • .hex 文件:不仅包含代码字节,还包含了明确的内存起始地址(例如 0x08000000)。
  • • MDK 的下载机制:MDK 的 Flash 下载算法(Flash Load)要求知道具体的下载地址。对于工程内编译出的对象,MDK 会自动关联;但如果只是外来文件,MDK 更“喜欢”能自解析地址的 Intel HEX 格式。

二、 核心步骤:将 .bin 转为 .hex

要将 .bin 转换为带烧录地址的 .hex,我们需要指定芯片 Flash 的起始地址(如 STM32 常规为 0x08000000)。

这里推荐使用公认最稳定的命令行工具 srec_cat(SRecord 工具包的一部分)。

步骤 1:下载工具

前往 SourceForge 下载 SRecord for Windows,解压后提取里面的 srec_cat.exe。

步骤 2:执行转换命令

将 srec_cat.exe 和你的 firmware.bin 放在同一个目录下,打开命令行(CMD 或 PowerShell),运行以下命令:

Bash

srec_cat.exe firmware.bin -binary -offset 0x08000000 -o firmware.hex -intel

参数解析:

  • • firmware.bin: 你的原始二进制文件。
  • • -binary: 指定输入文件格式为 BIN。
  • • -offset 0x08000000: 最关键的一步! 填入芯片 Flash 的起始地址(根据你的 MCU 调整,如 0x08000000 或 0x00000000)。
  • • -o firmware.hex -intel: 输出为 Intel HEX 格式的文件。

(提示:如果你电脑里装有早期版本的 Segger J-Link 软件,也可以用 J-Flash 打开 .bin -> 输入起始地址 -> 另存为 .hex)

三、 在 Keil MDK 中配置并下载 .hex

有了转换好的 firmware.hex,接下来我们用 MDK 把这个文件烧进芯片。

1. 建立一个“空壳”工程

在 MDK 中新建一个工程,芯片型号选择你实际使用的 MCU(例如 STM32F103C8)。

  • • 无需添加任何源码(.c 或 .h),也不用配置 RTE。

2. 替代 MDK 的默认输出文件

通常 MDK 烧录的是 Objects/xxx.hex。我们需要让 MDK 在点击下载(Download)时,直接去读取我们刚刚转换好的 firmware.hex。

方法如下:

1. 在 MDK 的工程属性 **`Options for Target` -> `Output`** 中,查看输出的 Name(假设是 `test`)。

2. 把我们之前生成的 `firmware.hex` 复制到工程的 `Objects` 目录下。

3. 重命名为 `test.hex`(直接覆盖原有的 `.hex`)。

3. 配置烧录器与 Flash 算法

  1. 1. 打开 Options for Target -> Debug:
    • • 选择你现有的硬件调试器(例如 DAP-Link 或 ST-Link),告别昂贵的 J-Link。
  2. 2. 点击 Debug 设置旁的 Settings -> 切换到 Flash Download 标签页:
    • • 勾选 Erase Sectors 或 Full Chip Erase。
    • • 确认下方 Programming Algorithm(烧录算法)中有对应芯片的算法文件。
    • • 确保 RAM for Algorithm 的地址与大小设置正确。

四、 一键下载与验证

  1. 1. 打开 MDK 主界面。
  2. 2. 无需点击 Build(编译),直接点击菜单栏的 Download 图标(F8)。
  3. 3. 看 Output 窗口输出:
    Erase Done.
    Programming Done.
    Verify OK.
  4. 4. 出现 Verify OK 说明 .hex 文件已成功烧录至芯片对应地址!

五、 总结与避坑指南

  1. 1. 偏移地址切勿填错:如果你的固件带 Bootloader,APP 的起始地址可能是 0x08004000 或 0x08008000,转换 .bin 时 -offset 参数一定要与向量表偏移对应,否则烧完芯片无法运行。
  2. 2. DAP-Link 是绝佳替代方案:J-Link 驱动在更新后对盗版和某些特定环境限制越来越多,建议手头常备一个基于 CMSIS-DAP 的开源烧录器,配合 MDK 使用非常稳定且免驱。

相关学习资料