問題描述
在使用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來不及在程序跑飛前連接MCU
在 Flash-XIP代碼跑飛後,Jlink在Reset後Code會立即運行,所以無法進行連接(跑飛的原因有多種,如硬件配置、野指針、初始化失敗、代碼bug等)
- 另一種是由於寫入的程序FCDB和BootHeader有誤,導致Bootloader無法正確引導啓動
這種情況需要檢查下BootHeader的Macro是否開啓:
將XIP_BOOT_HEADER_ENABLE設爲0,即不需要生成包含i.MXRT加載啓動文件頭的image;
如果爲1,那麼生成的可執行image文件會包含i.MXRT加載啓動文件頭,生成的image也可叫做Bootable image,即能被BootROM正確加載啓動的image
一般XIP(eXecute In Place,如flash)中的image,都要定義:
XIP_EXTERNAL_FLASH=1
XIP_BOOT_HEADER_ENABLE=1
這樣BootROM才能在flash中加載application到RAM/XIP執行