问题描述
在使用NXP RT10xx系列的童鞋,会经常遇到在某次下载SpiFlash代码后,再次Debug就连不上,提示下方:
这时IAR无论如何也连接不上板子了,通Jflash连接,也会提示DAP Register Failed, 初次遇到会误认为硬件坏掉了。。
。
解决
解决方法有两种:
一、通过 清空Memory(需更改BootMode)
1、更改BootMode,这里我用的RT1060,所以讲开发板将开发板的SW17更改为Serial 模式:
SW7 to “1-OFF, 2-OFF, 3-OFF, 4-ON”.:
2、通过IAR打开一个NXP SDK工程,并切换Debug模式,然后清空Memory
这里随便选择一个Led_Blinky的工程,点击Erase Memory
注意要选择Debug Configuration
3、Erase后,将开发板SW7拨回正常启动(Internal Boot)
SW7 to “1-OFF, 2-OFF, 3-ON, 4-OFF”.:
最后就发现IAR可以正常连接调试了:
BootMode如下
二、通过MCUBootUtility烧写/下载任一程序,如LedBlinky:
- 下载MCUBootUtility: https://github.com/JayHeng/NXP-MCUBootUtility/releases
- 将EVK board SW7改为Serial :
3. 下载后在NXP-MCUBootUtility/Bin中打开NXP-MCUBootUtility.exe ,然后根据使用的硬件,选择MCU Device、Boot DeviceConfiguration、BootType、
4.点击Connect to ROM/Reset Device连接,连接后选中Borwse打开编译好的Hex/bin (如打开文件里包含测试用的LedBlinky固件)最后点击上方All-in One Action烧写程序到单片机
具体使用可参见https://github.com/JayHeng/NXP-MCUBootUtility
根本原因
原因也有多种,例如:
一种是Jlink来不及在程序跑飞前进行进行连接,在 Flash-XIP代码跑飞后,Jlink在Reset后Code会立即运行,所以无法进行连接(跑飞的原因有多种,如硬件配置、野指针、初始化失败、代码bug等)
另一种是由于写入的程序FCDB和BootHeader有误,导致Bootloader无法正确引导启动