MDK-使用MDK下载bin文件到MCU中
在嵌入式开发中,我们偶尔会遇到这样的尴尬局面:
1. 只有现成的 .bin固件,没有完整的工程源码;2. 缺乏厂商的专用下载工具(或者工具极难用); 3. J-Link 变严格/收费,旧版驱动频繁弹窗或无法识别; 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. 打开 Options for Target->Debug:• 选择你现有的硬件调试器(例如 DAP-Link 或 ST-Link),告别昂贵的 J-Link。 2. 点击 Debug 设置旁的 Settings-> 切换到Flash Download标签页:• 勾选 Erase Sectors 或 Full Chip Erase。 • 确认下方 Programming Algorithm(烧录算法)中有对应芯片的算法文件。 • 确保 RAM for Algorithm 的地址与大小设置正确。
四、 一键下载与验证
1. 打开 MDK 主界面。 2. 无需点击 Build(编译),直接点击菜单栏的 Download图标(F8)。3. 看 Output 窗口输出: Erase Done.
Programming Done.
Verify OK.4. 出现 Verify OK说明.hex文件已成功烧录至芯片对应地址!
五、 总结与避坑指南
1. 偏移地址切勿填错:如果你的固件带 Bootloader,APP 的起始地址可能是 0x08004000或0x08008000,转换.bin时-offset参数一定要与向量表偏移对应,否则烧完芯片无法运行。2. DAP-Link 是绝佳替代方案:J-Link 驱动在更新后对盗版和某些特定环境限制越来越多,建议手头常备一个基于 CMSIS-DAP 的开源烧录器,配合 MDK 使用非常稳定且免驱。
夜雨聆风