查看: 3586|回复: 2

[原创] LPC55xx: 介绍进入ISP模式的两种方式

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20081
最后登录
2024-4-29
发表于 2021-7-8 18:09:12 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2021-7-9 20:35 编辑

LPC55XX在启动时当内部FLASH验证失败或ISP引脚强制拉低,则进入ISP引导模式。
ISP模式主要用于:从主机下载镜像到内部的FLASH,在生产生命周期中配置设备(配置安全模式,烧写密钥,锁设置等)。此外,对于LPC55(S)0x/1x系列,程序在运行过程中也可以通过代码进入ISP模式。本文将对此进行介绍。

1.    启动时通过外部ISP引脚进入ISP模式
和其他LPC系列一样,LPC55在启动时当ISP引脚强制拉低时进入ISP模式,这也是我们最常见的方式。我们可以使用blhost命令来检测MCU是否成功进入ISP模式:
blhost.exe -p COM125 get-property 1

若成功进入ISP模式回车显示如下:

    1.JPG
          图1 检测MCU进入ISP模式

2.    在程序运行中进入ISP模式
注意:LPC55(S) 0x/1x 可以在程序运行过程中进入ISP模式。但LPC55(S) 2x/6x 在程序运行中无法进入ISP模式。故以下内容均基于LPC55(S)0x/1x。

2.1   方法一:通过设置PMC->AOREG1进入ISP模式
AOREG1寄存器由ROM引导代码管理和更新。它收集了一些重要的信息系统状态信息,
直接在程序中添加以下代码即可进入ISP模式:
   PMC->AOREG1|= (0x0A<< 16); //Set to boot from ROM
    NVIC_SystemReset();           //reset

运行以上代码后,同样执行图一所示的blhost指令可用于检测MCU是否成功进入ISP模式。

2.2 方法二:通过runBootloaderAPI进入ISP模式
       ROMBootloader为用户提供了在程序中进入ISP模式的API—— runBootloader
API原型:
void(*runBootloader)(void *arg);

无论ISP引脚是否连接到高电平,设备都根据参数arg的设置,通过UART接口直接进入ISP模式。根据用户手册,参数arg的格式说明如下:            
       2.1.jpg

例如,以下为基于SDK例程flashiap添加进入ISP模式的API:
步骤一: 在fsl_iap.c加入如下代码:
#define BOOTLOADER_TREE_LOCATION(0x1301fe00)
bootloader_tree_t *romApiTree = (bootloader_tree_t *)BOOTLOADER_TREE_LOCATION;
void runBootloader(void *arg)
{
    romApiTree-> runBootloader(&arg);
}

步骤二:在mian函数中加入代码,如下:
uint32_t arg = 0xEB120000;
runBootloader(arg);

检验是否进入ISP模式的仍同图一。

在应用程序调用上述runBootloader API并启动之后成功后,设备将只允许UART接口连接以传输数据主机上的数据。
注意:LPC55(S)06/16-EVK开发板上JP12跳线需要连接,开发板出厂的默认设置为连接。JP12连接LINK2的USB到UART0。如下:

         3.JPG

lpcxpresso55s16_flashiap1.zip

607.01 KB, 下载次数: 39, 下载积分: 威望 1

回复

使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2021-7-8 18:22:23 | 显示全部楼层
    这就是传说中的OTA呀
    规则多,安全性就应该挺好的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    注册会员

    Rank: 2

    积分
    100
    最后登录
    2024-2-2
    发表于 2021-10-16 10:37:36 | 显示全部楼层
    您好 我有个问题想请教下  我最近在做USB 的ISP升级 但是我在使用runBootloader(arg) 函数的时候芯片会自动重启 我不太明白是怎么回事。还有如何配置才能选择USB1作为ISP升级端口。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-30 11:17 , Processed in 0.143392 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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