本帖最后由 小恩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文件不同的IDE生成bin文件的方法略有区别,本文使用的是MCUXpresso IDE。在IDE中对项目编译链接,得到axf文件。对axf文件执行BinaryUtilities生成对应的可执行bin文件。
2. blhost烧录bin文件
l 准备工作 通过主机电脑的USB和UART接口,blhost可以直接连接到MCU。在连接上电时,按住ISP按钮或短接J10以进入 ISP模式。我们先测试连接HIGH-SPEED-USB USB1端口。
通过USB连接至开发板时,需要先确定USB设备的VID和PID参数。在Windows系统下,VID和PID可以在设备管理器中找到。
在Linux系统下,通过执行命令$lsusb,查看当前连接的USB设备。
l 执行blhost.exe -- get-property 该命令用于获得MCU的属性和设置,其中参数1返回MCU的bootloader版本。我们通过这个命令测试是否连接成功。 - Example(WIN):
- blhost.exe -u 0x1FC9,0x0021 -- get-property 1
复制代码
l 执行blhost.exe -- flash-erase-all 当程序烧录目标存储器为FLASH时,必须在写入程序前擦除FLASH,否则程序无法正确运行。 - Example(WIN):
- blhost.exe -u 0x1FC9,0x0021 -- flash-erase-all
复制代码
l 执行blhost.exe -- write-memory 将bin文件写入指定地址。这里我们烧录在FLASH上,起始地址为0x00000000。 - Example(WIN):
- blhost.exe -u 0x1FC9,0x0021 -- write-memory 0 blinky.bin
复制代码
而对于要烧录到RAM的程序来说,需要注意避开blhost的保留区。通过get-property 0x0c命令,可以查看保留区。如图所示,blhost在RAM上有0x20000000-0x20005FFF的保留区。
l 执行blhost.exe -- execute 执行Execute命令可以直接跳转到指定地址以执行程序。我们用Execute命令来执行刚刚烧录的程序,命令参数包括<address> <arg> <stackpointer>。 - Example(WIN):
- blhost.exe -u 0x1FC9,0x0021 – execute 0x00000181 0 0x20040000
复制代码
<arg>为write-memory操作时程序烧录的地址。 <address>和<stackpointer>分别为可执行起始地址和栈指针,与工程文件的memory定义有关。当编译链接完成生成bin文件后,二进制文件查看工具打开bin文件,可以在bin文件头看到相应地址,前4个字节为栈指针,接着4个字节为程序的执行起始地址,以小端模式存放。在工程的.map文件中,能够找到对应地址印证。
l UART连接 通过UART烧写的操作和通过USB类似。LPCXpresso55S69虚拟串口复用Debug Link接口。连接Debug Link接口,在设备管理器中可以查到使用的COM端口。这里我们使用了COM5端口。 - Example(WIN):
- blhost.exe -p COM5 -- flash-erase-all
- blhost.exe -p COM5 -- write-memory 0 blinky.bin
- blhost.exe -p COM5 -- reset
复制代码
3. 基于blhost的自动烧录dos/shell脚本
整理blhost命令,我们可以编写一些脚本文件来自动化烧录过程。这里我们在Windows和Linux环境下分别编写了通过USB连接的自动烧录脚本autorun.bat和autorun.sh。
autorun.zip
(5.72 KB, 下载次数: 15)
|