请选择 进入手机版 | 继续访问电脑版
查看: 1399|回复: 7

[分享] 如何使用LPC51U68的HID boot loader源码

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3297

    主题

    6542

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    31909
    最后登录
    2024-3-29
    发表于 2021-11-11 17:28:50 | 显示全部楼层 |阅读模式
    如何使用LPC51U68的HID boot loader源码


    对恩智浦MCU有一定了解的朋友,一定知道NXP有一套非常完善的MCU boot loader解决方案:MCU BOOT,你也可曾上手体验过它呢?


    这个MCU BOOT的内容非常丰富,实现了基于各种接口的boot loader(UART I2C SPI CAN USB…),并且提供了blhost命令行上位机工具及其源码。
    当然,boot loader的源码也是。。。比较复杂。一些朋友表示移植,看懂有点困难。正好最近支持客户时,应客户要求,自己实现了一套极简版的USB HID boot loader。协议和工具都是兼容恩智浦MCU BOOT的。
    恩智浦的MCU BOOT有一套完整的自定义协议。在各个MCU芯片手册的ROM章节,以及MCU BOOT资料包里的文档中都有详细介绍,这里就不赘述了。
    具体关于MCU BOOT协议的介绍和各个接口定义,需要查看MCU BOOT的官方手册。
    实际上这套代码已经存在很多年了。以前主要是支持串口,这次把USB接口加上了。


    使用HID bootloader的步骤如下:


    1,下载源代码,git 仓库地址:https://github.com/yandld/nxp_easy_mcuboot.git
    2,目前HID boot loader功能只支持Keil。HID功能只支持LPC51U68(后面会加入更多的型号和IDE)。


    在\nxp_easy_mcuboot\Project\lpcxpresso51u68中,会看到4个文件夹,分别是:
    14.png
    3,打开boot loader Keil工程:\nxp_easy_mcuboot\Project\lpcxpresso51u68\lpcxpresso51u68_hid_bl,编译并下载到LPCXpresso51U68板子上。
    4,连接LPC51U68的USB(J6)到PC, 然后按住WAKE(SW1)按键,再按RESET复位MCU,强制进入boot  loader模式:这时候会听到PC USB识别的声音,打开\nxp_easy_mcuboot\pc_tool下的KinetisFlashTool.exe

    点击连接,会看到boot loader的连接信息(说明上位机已经成功连接boot loader),如下图:
    15.png
    5,编译lpcxpresso51u68_app中的用户示例代码(小灯闪烁)。并生成.hex文件,在KinetisFlashTool中点Browse选择编译生成好的lpcxpresso51u68_app.hex文件,并点击Update开始升级,如果看到进度条走动并且看到升级成功log 说明升级成功:
    16.png
    打开串口并复位板子,会看到串口打印log,小灯闪烁,说明boot loader功能实现正常:
    17.png
    在这个代码仓库中,除了LPC51U68 HID boot loader外,还包含其他NXP MCU的boot loader代码,绝大多数只支持串口。


    这套代码实际是NXP官方MCU BOOT代码的最小简化版本,砍掉了绝大多数的高级功能,只留最核心的几条常用命令处理,所以代码比官方的精简好懂很多。当然它也只能实现最简单的boot loader,像双固件冗余升级,安全升级等特性是实现不了的。如果您在使用中有问题,欢迎给我留言哦~

    如果您想实现大而全的安全升级,双固件备份功能的boot loader,可以移步到这个项目:
    https://github.com/NXPmicro/sbl
    https://github.com/NXPmicro/sfw

    签到签到
    回复

    使用道具 举报

  • TA的每日心情

    2024-2-5 12:06
  • 签到天数: 627 天

    [LV.9]以坛为家II

    94

    主题

    1628

    帖子

    2

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4429

    热心会员

    最后登录
    2024-2-5
    发表于 2021-11-11 21:00:37 | 显示全部楼层
    不错,谢谢楼主分享,有空试试~~
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    11 分钟前
  • 签到天数: 1912 天

    [LV.Master]伴坛终老

    61

    主题

    1万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    16996
    最后登录
    2024-3-29
    发表于 2021-11-11 22:22:42 | 显示全部楼层
    不错,谢谢分享,这个很有用
    RTNB
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 23:06
  • 签到天数: 1467 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92135
    最后登录
    2024-3-28
    发表于 2021-11-11 22:41:17 | 显示全部楼层
    感谢分享,一直想着研究一下USB,有这个例子应该会比较容易理解一些
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    帖子

    0

    新手上路

    Rank: 1

    积分
    27
    最后登录
    2022-1-17
    发表于 2022-1-11 23:47:20 | 显示全部楼层
    git hub 网站上不去啊,有百度网盘或其它的地址可以下载吗? 谢谢!

    若是方便可以发到我邮箱 吗? 非常感谢 Leeu365@163.com
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    帖子

    0

    新手上路

    Rank: 1

    积分
    27
    最后登录
    2022-1-17
    发表于 2022-1-16 12:39:37 | 显示全部楼层
    谢谢楼主,我参考git里的代码, 想实现bootloader跳转到app,
    但是不成功

    器件为 LPC54113, BOOtloader 放在0 地址, app放在0x10000地址
    用的是git里的代码
    void JumpToImage(uint32_t addr)
    {
        uint32_t *vectorTable = (uint32_t*)addr;
        uint32_t sp = vectorTable[0];
        uint32_t pc = vectorTable[1];

       
        typedef void(*app_entry_t)(void);

        uint32_t s_stackPointer = 0;
        uint32_t s_applicationEntry = 0;
        app_entry_t s_application = 0;

        s_stackPointer = sp;
        s_applicationEntry = pc;
        s_application = (app_entry_t)s_applicationEntry;

       
            __set_MSP(s_stackPointer);
        __set_PSP(s_stackPointer);
       
        SCB->VTOR = addr;
       
        // Jump to application
        s_application();

        // Should never reach here.
        __NOP();
    }


    程序中跳转到0 地址也不成功啊。 没有任何输出,卡着不动。

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    帖子

    0

    新手上路

    Rank: 1

    积分
    27
    最后登录
    2022-1-17
    发表于 2022-1-16 12:40:11 | 显示全部楼层
    已经发新帖,请求帮助,非常感谢!
    https://www.nxpic.org.cn/module/forum/thread-627739-1-1.html
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    72

    帖子

    0

    注册会员

    Rank: 2

    积分
    78
    最后登录
    2023-1-28
    发表于 2022-11-6 21:51:35 | 显示全部楼层
    本帖最后由 kwcha333 于 2023-1-1 23:44 编辑

    感谢分享













    客戶在首一年更可只供利息而無須償還本金,務求能幫助客戶解決
    物業套現 壓力測試資金問題。



    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-3-29 09:48 , Processed in 0.155047 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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