NXP i.MXRT10xx 程序跑飛、下載失敗、連接CPU失敗 - [已解決]

問題描述

在使用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:

  1. 下載MCUBootUtility: https://github.com/JayHeng/NXP-MCUBootUtility/releases
  2. 將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執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章