此时,SWD功能被禁用。在OTP字段处于默认值的前提下,若想恢复,需要使用在ISP模式和Debug Mailbox中的批量擦除命令(mass erase)。如果已经配置过OTP,且设置bit 4 为1,即禁掉了masserase功能,则无论如何也无法恢复SWD了。
当启用批量擦除时,Debug Mailbox也被启用并允许调试器与引导加载程序通信以执行批量擦除。
因此,可以使用 Debug Mailbox 来执行 Mass Erase操作,恢复ECRP设置,即恢复SWD。
3.操作步骤 IDE:MCUXpressoIDE_11.4.0_6237或其它版本
IDE安装路径:C:\nxp\MCUXpressoIDE_11.4.0_6237
工具脚本:LPC546xxMassErase.scp
工具脚本路径:C:\nxp\MCUXpressoIDE_11.4.0_6237\ide\binaries\Scripts
在操作中,其他版本的 MCUXpressoIDE及其他安装路径操作相同。
1) 将LPC546xxMassErase.scp脚本放至上述路径中。
2) 打开命令提示符窗口。
3) 将路径更改为C:\nxp\MCUXpressoIDE_11.4.0_6237\ide\binaries。
4) 执行redlinkserv -commandline的命令。
5) 执行redlinkserv -commandline 命令后,应该会看到redlink> 提示符。
6) 执行加载命令“C:\nxp\MCUXpressoIDE_11.4.0_6237\ide\binaries\Scripts\LPC546xxMassErase.scp”。
7) 执行加载命令后,您应该看到正在加载“LPC546xxMassErase.scp”。
8) 执行运行命令。
9) 执行运行命令后,您应该会看到以下消息。
此时,SWD接口可以正常调试使用。
4.ECRP返回值补充 在LPC546xx用户手册中,我们可以看到ISP-AP 命令,其中一个功能是可以读取ECRP的设置等级,也就是可以查看此芯片ECRP的配置情况。
通过本文第3部分运行脚本后返回信息也可以看到ECRP返回值,只是此处名字为CRP:
但是在用户手册中并没有它的解释,我们从用户定义的 ECRP 级别和 ROM 代码使用的 ECRP 定义中找到了相关资料,使用此功能的用户可以作为参考:
#defineCRP_JTAG_EN_BIT (1 << 6)
#define CRP_MASS_ERASE_DIS_BIT (1 << 7)
#defineCRP_IAP_PROT_EN_BIT (1 << 8)
#defineCRP_ISP_PINS_EN_BIT (1 << 9)
#define CRP_ISP_IAP_EN_BIT (1 << 10)
#defineCRP_DBG_MBOX_EN_BIT (1 << 11)
#defineCRP_COUNT_MASK 0x3F
#define CRP_DEFAULT_FEATURES 0xFFFFFFFF
#defineCRP_MASS_ERASE_ONLY (CRP_SECT_ERASE_DIS_BIT)
例如:
CRP_JTAG_EN_BIT: 1启用 JTAG/SWD,0表示禁用。对应ECRP值位17和16。
CRP_IAP_PROT_EN_BIT: 1启用IAP保护,0表示禁用。对应ECRP值位14~15。
CRP_ISP_PINS_EN_BIT: 1启用 ISP引脚,0表示禁用。对应ECRP值位12~13。
CRP_ISP_IAP_EN_BIT: 1启用 IAP 模式的 ISP,0表示禁用。对应ECRP值位14~15。
CRP_MASS_ERASE_DIS_BIT:0允许整体擦除,1不允许。对应ECRP值位0~5、位10~11、位14~15的组合。
CRP_DBG_MBOX_EN_BIT: 1启用ISP-AP 或Debug Mailbox,0表示禁用。它对应一些保留的 ECRP 位和 OTP 设置的组合。
注意,ROM 使用的所有这些 ECRP 值不仅会查看用户定义的 ECRP 值,还会检查 OTP 设置。当调用“Query ECRP Level”时,它返回ROM代码使用的值,而不是用户在镜像文件中编程的ECRP值。
小结:
在LPC546xx系列产品中,即使 SWD 被禁用,调试器也可以通过Debug mailbox与 LPC5460x 通信。 只要OTP没有禁掉Mass Erase功能,则调试器可以请求 LPC5460x 通过Debug Mailbox执行mass erase以恢复SWD功能。
此外,文章还补充了关于使用ISP-AP命令返回值的具体含义。