大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是不同J-Link版本對於i.MXRT1170連線復位後處理行為。
痞子衡之前寫過一篇舊文 《i.MXRT1170上用J-Link連線復位後PC總是停在0x223104的原因》,這篇文章詳細解釋了 RT1170 BootROM 程式碼裡軟體實現的 Debug Mailbox 機制對 J-Link 除錯體驗的影響,文末還給了結論 J-Link 裡只要執行 reset 後 PC 就必定會停在 0x223014,這句話其實不完全準確,因為底層 J-Link 指令碼內容可以改變這個行為,這在不同 J-Link 版本的 DLL 處理裡就有體現。今天痞子衡要聊得就是這個話題:
一、不同J-Link版本關於RT1170更新
為了瞭解不同 J-Link 版本對於 RT1170 處理差異,痞子衡從 J-Link 歷史版本記錄 https://www.segger.com/downloads/jlink/ReleaseNotes_JLink.html 裡抽取了從 V6.64 - V7.96i 所有關於 RT1170 更新如下,其中 V6.86、V6.94、V6.98c、V7.86 四個版本涉及 Debug 連線處理,但是沒有說明進一步實現細節。
J-Link版本 | 關於RT1170更新 |
---|---|
V6.64 | DLL 7.Added (QSPI) flash programming support for NXP iMXRT117x series devices. |
V6.72 | DLL 2.Added (QSPI) flash programming support for the Cortex-M4 core of NXP iMXRT117x series devices. |
V6.80b | DLL 1.NXP RT117x QSPI flash programming: Some necessary pins were not correctly configured to connect to the FLEXSPI controller. Fixed. |
V6.86 | DLL 14.NXP RT117x: Reset did not work for rev B0 silicon. Fixed. |
V6.88 | DLL 57.Added 4byte address mode QSPI flash programming support NXP iMXRT117x series devices. |
V6.94 | DLL 3.JTAG chain detection for NXP iMXRT117x series devices, fixed. |
V6.98 | DLL 7.Added debug and (QSPI) flash programming support for NXP MIMXRT1177xxxA_M4 and MIMXRT1177xxxA_M7. |
V6.98c | DLL 1.NXP iMXRT117x: Reading PC & SP after reset could return incorrect values. Fixed. |
V7.00 | DLL 4.Added quad memory mapped read for NXP iMXRT117x series devices with SPIFI-Lib support. |
V7.22b | DLL 10.NXP i.MXRT117x Cortex-M4 debug: Software breakpoints did not work correctly in case the LMem caches were enabled. Fixed. |
V7.50 | DLL 28.NXP i.MXRT117x series: Connect sequence to the Cortex-M4 failed under certain circumstances. Fixed. DLL 42.NXP i.MXRT117x series: Some devices passed by ARM KEIL MDK were not detected correctly. Fixed. |
V7.54 | DLL 12.NXP iMXRT117x devices: Flashloader did not save and restore all used registers. Fixed. |
V7.82d | DLL 11.NXP i.MXRT117x: Added flash programming support for FlexSPI 2 flash bank. |
V7.84c | DLL 11.NXP iMXRT117x: Detecting FlexSPI2 boot config and booting from FlexSPI2 did not work. Fixed. |
V7.86 | DLL 4.NXP iMXRT117x: Debug connection would fail when debugging both Cortex-M4 and Cortex-M7 cores and performing a reset via Cortex-M7. Fixed. |
V7.86e | DLL 9.NXP iMXRT117x: FlexSPI Flash programming did not work. Introduced with V7.86. Fixed. |
V7.88k | DS 5.NXP iMXRT117x FlexSPI support: Under certain circumstances writing less than four bytes could fail. Fixed. |
V7.88i | DS 6.NXP iMXRT117x FlexSPI1 support: Added support for pin configuration "nCS@AD18_CLK@AD19_D0@AD20_D1@AD21_D2@AD22_D3@AD23" |
V7.94d | DS 3.NXP iMXRT1170: Flash programming did not work. Introduced with V7.88l. Fixed. |
二、J-Link V6.86f對於RT1170連線復位處理
從 J-Link 版本來看,V6.86 開始正式支援 RT1170 B0 Silicon(恩智浦最終釋出的晶片版本),我們就從 V6.86 版本開始做測試。在測試之前,痞子衡在板載序列 NOR Flash 裡燒錄了一個連結在 0x30002000 的 XIP App 程式。然後使用 J-Link commander 操作如下:
上述測試結果表明:當晶片上電/復位能正常啟動連結在 0x30002000 的 App 時,J-Link 下用預設 MIMXRT1176XXXA_M7 裝置去連晶片復位後,PC 能停在 App 裡,因為自帶 DLL 裡整合了 jlinkscript 處理,這在 dll 裡搜尋 "Valid application detected. Setting PC / SP manually." 資訊可知。但是如果我們自己新增的 jlinkscript 不包含這樣的處理(比如用超級下載演算法 UFL),那麼 PC 還是停在 0x223104。
如果我們在板載序列 NOR Flash 裡燒錄了一個不是連結在 0x30002000 的 App,痞子衡燒錄得是連結在 0x3000a000 處的 XIP App(總之保證 Flash 偏移 0x2000 處沒有有效 App 中斷向量表),再來做同樣的測試(在晶片能正常啟動 App 情況下),此時 PC 永遠停在 0x223104,這說明 J-Link DLL 預設整合的 jlinkscript 永遠是從 Flash 0x2000 偏移處取 App 資訊去設定 PC、SP。
我們緊接著上面的測試,使用 mem32 命令讀取 0x3000a000 處內容,發現是有效 App 資料,這說明 FlexSPI 外設被正常初始化了,此時手動設定 PC、SP 後可以跳轉到 App 裡,這意味著如果我們自定義 jlinkscript 裡能夠解析 IVT 去獲取 App 資訊,那麼可以做到通用。
三、不同J-Link版本對於RT1170連線復位處理
由於 V6.86 版本對於連線復位處理已經一定程度上滿足實際需求,因此對比後續更高 J-Link 版本意義不太重要了,不過這裡有一個差異不得不提。正常來說,在晶片上電/復位能正常啟動連結在 0x30002000 的 App 情況下,reset 命令執行完後,PC 應該 halt 在 BootROM 裡,需要繼續使用 go 命令才能跳轉進入 App,這在 V6.86 上確實如此。然後在 V7.94f 版本上測試來看,reset 之後,PC 已經 halt 在 App 裡了。
至此,不同J-Link版本對於i.MXRT1170連線復位後處理行為痞子衡便介紹完畢了,掌聲在哪裡~~~
歡迎訂閱
文章會同時釋出到我的 部落格園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。