本帖最后由 小恩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 检测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的格式说明如下:
例如,以下为基于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。如下:
|