[问题解决] - NXP i.MXRT10xx 程序跑飞、连接失败

时间:2024-03-30 18:20:27

问题描述

在使用NXP RT10xx系列的童鞋,会经常遇到在某次下载SpiFlash代码后,再次Debug就连不上,提示下方:

[问题解决] - NXP i.MXRT10xx 程序跑飞、连接失败
这时IAR无论如何也连接不上板子了,通Jflash连接,也会提示DAP Register Failed, 初次遇到会误认为硬件坏掉了。。

解决

解决方法有两种:

一、通过 清空Memory(需更改BootMode)

1、更改BootMode,这里我用的RT1060,所以讲开发板将开发板的SW17更改为Serial 模式:
SW7 to “1-OFF, 2-OFF, 3-OFF, 4-ON”.:
[问题解决] - NXP i.MXRT10xx 程序跑飞、连接失败

2、通过IAR打开一个NXP SDK工程,并切换Debug模式,然后清空Memory
这里随便选择一个Led_Blinky的工程,点击Erase Memory

[问题解决] - NXP i.MXRT10xx 程序跑飞、连接失败
注意要选择Debug Configuration
[问题解决] - NXP i.MXRT10xx 程序跑飞、连接失败

3、Erase后,将开发板SW7拨回正常启动(Internal Boot)
SW7 to “1-OFF, 2-OFF, 3-ON, 4-OFF”.:
[问题解决] - NXP i.MXRT10xx 程序跑飞、连接失败

最后就发现IAR可以正常连接调试了:
[问题解决] - NXP i.MXRT10xx 程序跑飞、连接失败

BootMode如下
[问题解决] - NXP i.MXRT10xx 程序跑飞、连接失败

二、通过MCUBootUtility烧写/下载任一程序,如LedBlinky:

  1. 下载MCUBootUtility: https://github.com/JayHeng/NXP-MCUBootUtility/releases
  2. 将EVK board SW7改为Serial :

[问题解决] - NXP i.MXRT10xx 程序跑飞、连接失败
3. 下载后在NXP-MCUBootUtility/Bin中打开NXP-MCUBootUtility.exe ,然后根据使用的硬件,选择MCU Device、Boot DeviceConfiguration、BootType、
[问题解决] - NXP i.MXRT10xx 程序跑飞、连接失败

4.点击Connect to ROM/Reset Device连接,连接后选中Borwse打开编译好的Hex/bin (如打开文件里包含测试用的LedBlinky固件)最后点击上方All-in One Action烧写程序到单片机
[问题解决] - NXP i.MXRT10xx 程序跑飞、连接失败

具体使用可参见https://github.com/JayHeng/NXP-MCUBootUtility

根本原因

原因也有多种,例如:
一种是Jlink来不及在程序跑飞前进行进行连接,在 Flash-XIP代码跑飞后,Jlink在Reset后Code会立即运行,所以无法进行连接(跑飞的原因有多种,如硬件配置、野指针、初始化失败、代码bug等)
另一种是由于写入的程序FCDB和BootHeader有误,导致Bootloader无法正确引导启动