大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是不同J-Link版本對於i.MXRT1170連接複位後處理行為。 痞子衡之前寫過一篇舊文 《i.MXRT1170上用J-Link連接複位後PC總是停在0x223104的原因》,這篇文章詳細解釋了 RT1170 BootROM 代碼里軟體 ...
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是不同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主頁、知乎主頁、微信公眾號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下麵二維碼,就可以在手機上第一時間看了哦。
最後歡迎關註痞子衡個人微信公眾號【痞子衡嵌入式】,一個專註嵌入式技術的公眾號,跟著痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職於某全球頂級半導體原廠MCU系統部門,擔任高級嵌入式系統應用工程師。
專欄內所有文章的轉載請註明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關註痞子衡的Github主頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關於專欄文章有任何疑問請直接在博客下麵留言,痞子衡會及時回覆免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。