查看: 839|回复: 2

如何利用BLHOST和MCX的USB ISP功能下载BIN文件到SRAM并运行

[复制链接]
  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    103

    主题

    869

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4350
    最后登录
    2025-8-21
    发表于 2025-3-2 14:25:36 | 显示全部楼层 |阅读模式
    本帖最后由 mgn 于 2025-3-2 16:28 编辑


    最近有客户想利用USB接口下载固件到MCU的SRAM区并执行,参考了NXP官方的BLHOST文档后,经过简单实验,可以利用NXP的MCX的ROM ISP功能实现。
    首先是BLHOST的官方文档, https://www.nxp.com/docs/en/user-guide/MCUBLHOSTUG.pdf
    BLHOST是NXP MCU ISP的上位机软件,开源,官方的SDK里一般自带,当然可以从这里下载。
    https://www.nxp.com/webapp/sps/d ... e1&DOWNLOAD_ID=null
    Note:如果遇到BLHOST不兼容的问题,请联系我,我有个版本可能没啥问题。

    这个例程中还用到了一个工具 readelf,一般在MCUXpreso IDE,GUI guider安装目录下,没有的话,后台ping我,我发给你。
    接下来,咱们在MCUXpresso上先做一个简单的工程并且把工程编译改到最终跑在RAM上。硬件我们用的是FRDM-MCXA153,代码例程用的GPIO闪灯的那个。
    工程建立好后,按下图所示步骤配置好工程并编译。
    Screenshot 2025-02-24 185546.png
    编译后,工程占用的flash和SRAM信息如下,这里Flash只用了0%,所有的code都在RAM中。
    Screenshot 2025-02-24 185644.png
    由于咱们利用的blhost工具提供的命令不支持axf格式文件的下载,所以我们要额外将工程编译后生成的axf文件转换为bin。如下图步骤,生成bin文件。
    Screenshot 2025-02-24 185659.png

    我们需要找到application binary中的堆栈地址以及入口地址(entry address),如下两图,需要在xxx.map文件中查找,这里stack的地址是0x20005a00,入口地址是0x200001a8。
    也可以通过readelf工具获取 堆栈地址和入口地址。
    Screenshot 2025-02-24 185851.png

    Screenshot 2025-02-24 190019.png

    可执行文件准备完毕后,我们需要连接开发板MCU的USB接口(不是MCU-Link的USB接口)。按住ISP按键在插入USB,或者通电的时候按住ISP按键后按下RESET按键并释放RESET。
    这里我们可以用usb tree这个工具,查看到MCX A153 USB的VID和PID号。
    Screenshot 2025-02-24 190101.png

    最后在命令行里 进入到blhost所在的文件夹,输入一下命令即可 让binary通过USB接口下载到MCX A153的SRAM中,并执行(execute)。
    Step 1. blhost.exe -u 0x1FC9,0x0155 -- get-property 1 用于查看ISP连接的状态是否正确。

    Step 2. blhost.exe -u 0x1FC9,0x0155 --write-memory 0x20000000 frdmmcxa153_gpio_led_output.bin 用于通过USB接口下载bin文件到MCX A153的RAM中。

    Step 3. blhost.exe -u 0x1FC9,0x0155 --execute 0x200001A9 0x20000000 0x20005A00 用于执行bin文件。

    0x200001A9 即之前查看的入口地址entry address,这里需要地址+1
    0x20000000 即bin文件的存放地址
    0x20005A00 即堆栈的地址

    Screenshot 2025-02-24 190334.png

    到此,看到 “Successful generic response to command ‘execute’” 理论上闪灯这个程序就在FRDM-MCXA153的板子上跑起来了。

    感谢您的阅读。

    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    1 小时前
  • 签到天数: 2409 天

    连续签到: 118 天

    [LV.Master]伴坛终老

    84

    主题

    2万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    22381
    最后登录
    2025-8-27
    发表于 2025-3-3 10:15:55 | 显示全部楼层
    学习学习
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情

    7 天前
  • 签到天数: 84 天

    连续签到: 1 天

    [LV.6]常住居民II

    7

    主题

    3451

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3069
    最后登录
    2025-8-20
    发表于 2025-3-3 13:19:24 | 显示全部楼层
    很不错的文章,学习了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-27 11:55 , Processed in 0.078334 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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