查看: 5309|回复: 2

[原创] Tool: 使用blhost一键烧录

[复制链接]

该用户从未签到

715

主题

6374

帖子

0

超级版主

Rank: 8Rank: 8

积分
25171
最后登录
2025-8-12
发表于 2022-9-26 11:05:11 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2022-9-29 14:48 编辑

blhost是NXP用于在PC主机端的命令行工具。blhost通过向BOOT ROM或运行有Flashloader的MCU发送命令来实现设备的读写和擦除等操作,而不依赖IDE。blhost是一个多平台工具,可在Windows、Linux(x86)、Mac、Linux(Arm)系统使用,主机能够通过USB、UART直接连接MCU设备,能为MCU设备工业现场应用提供便利。本文介绍了应用blhost对LPCXpresso55S69进行烧录的基本流程,进一步地,将blhost命令写入dos/shell脚本,实现更自动化的烧录。

1.   编译生成bin文件
本文以SDK_2_12_0_LPCXpresso55S69中的lpcxpresso55s69_led_blinky为例,演示blhost工具的使用方法。该SDK可在SDK Builder | MCUXpressoSDK Builder (nxp.com)下载。
不同的IDE生成bin文件的方法略有区别,本文使用的是MCUXpresso IDE。在IDE中对项目编译链接,得到axf文件。对axf文件执行BinaryUtilities生成对应的可执行bin文件。
1.png

2.   blhost烧录bin文件
l  准备工作
通过主机电脑的USB和UART接口,blhost可以直接连接到MCU。在连接上电时,按住ISP按钮或短接J10以进入 ISP模式。我们先测试连接HIGH-SPEED-USB USB1端口。
2.png


通过USB连接至开发板时,需要先确定USB设备的VID和PID参数。在Windows系统下,VID和PID可以在设备管理器中找到。
3.png


在Linux系统下,通过执行命令$lsusb,查看当前连接的USB设备。
4.png


l  执行blhost.exe -- get-property
该命令用于获得MCU的属性和设置,其中参数1返回MCU的bootloader版本。我们通过这个命令测试是否连接成功。
  1. Example(WIN):
  2. blhost.exe -u 0x1FC9,0x0021 -- get-property 1
复制代码

l  执行blhost.exe -- flash-erase-all
当程序烧录目标存储器为FLASH时,必须在写入程序前擦除FLASH,否则程序无法正确运行。
  1. Example(WIN):
  2. blhost.exe -u 0x1FC9,0x0021 -- flash-erase-all
复制代码

l  执行blhost.exe -- write-memory
将bin文件写入指定地址。这里我们烧录在FLASH上,起始地址为0x00000000。
  1. Example(WIN):
  2. blhost.exe -u 0x1FC9,0x0021 -- write-memory 0 blinky.bin
复制代码

而对于要烧录到RAM的程序来说,需要注意避开blhost的保留区。通过get-property 0x0c命令,可以查看保留区。如图所示,blhost在RAM上有0x20000000-0x20005FFF的保留区。
5.png

l  执行blhost.exe -- execute
执行Execute命令可以直接跳转到指定地址以执行程序。我们用Execute命令来执行刚刚烧录的程序,命令参数包括<address> <arg> <stackpointer>。
  1. Example(WIN):
  2. blhost.exe -u 0x1FC9,0x0021 – execute 0x00000181 0 0x20040000
复制代码

<arg>为write-memory操作时程序烧录的地址
<address>和<stackpointer>分别为可执行起始地址和栈指针,与工程文件的memory定义有关。当编译链接完成生成bin文件后,二进制文件查看工具打开bin文件,可以在bin文件头看到相应地址,前4个字节为栈指针,接着4个字节为程序的执行起始地址,以小端模式存放。在工程的.map文件中,能够找到对应地址印证。
6.png


7.png


l  UART连接
通过UART烧写的操作和通过USB类似。LPCXpresso55S69虚拟串口复用Debug Link接口。连接Debug Link接口,在设备管理器中可以查到使用的COM端口。这里我们使用了COM5端口。
  1. Example(WIN):
  2. blhost.exe -p COM5 -- flash-erase-all
  3. blhost.exe -p COM5 -- write-memory 0 blinky.bin
  4. blhost.exe -p COM5 -- reset
复制代码

8.png


3.   基于blhost的自动烧录dos/shell脚本
整理blhost命令,我们可以编写一些脚本文件来自动化烧录过程。这里我们在Windows和Linux环境下分别编写了通过USB连接的自动烧录脚本autorun.bat和autorun.sh。 autorun.zip (5.72 KB, 下载次数: 15)
回复

使用道具 举报

  • TA的每日心情
    开心
    2025-5-23 18:48
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    1

    主题

    4

    帖子

    0

    注册会员

    Rank: 2

    积分
    64
    最后登录
    2025-7-4
    发表于 2025-6-12 23:49:15 | 显示全部楼层
    大佬大佬,有不借助实体按键的形式,用上位机连接USB进行烧录的形式吗
    嵌入式好难
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    8 小时前
  • 签到天数: 2398 天

    连续签到: 107 天

    [LV.Master]伴坛终老

    84

    主题

    2万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    22282
    最后登录
    2025-8-16
    发表于 2025-7-25 11:01:01 | 显示全部楼层
    blhost支持哪些固件文件类型啊
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-16 08:36 , Processed in 0.262050 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表