天天看點

痞子衡嵌入式:揭秘i.MXRT1170上用J-Link連接配接複位後PC總是停在0x223104的原因

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1170上安全調試政策實作對JLink調試的影響。

  痞子衡之前寫過一篇舊文 《i.MXRT600的ISP模式下用J-Link連接配接後PC總是停在0x1c04a》,這篇文章詳細解釋了 Debug Mailbox 機制對 J-Link 調試體驗的影響。我們知道 Debug Mailbox 是 i.MXRT 三位數系列(i.MXRT500/600)獨有的外設子產品,但是在 i.MXRT1170 上使用 J-Link 調試似乎存在跟 i.MXRT 三位數系列下類似的體驗,這個體驗明顯跟 i.MXRT10xx 系列下不同,而且 i.MXRT1170 中沒有 Debug Mailbox 子產品,這是怎麼回事?且聽痞子衡細聊:

  按照我們之前在 i.MXRT1050 上的調試經驗,将晶片設為串行下載下傳模式後,使用 JLink 連接配接上晶片,并 halt 住核心,此時晶片 PC 是正常停在 ROM 區域的(不斷 go 和 halt 指令交替執行,PC 值是一直在變化的),讓我們同樣的過程在 i.MXRT1170 上也操作一次:

痞子衡嵌入式:揭秘i.MXRT1170上用J-Link連接配接複位後PC總是停在0x223104的原因

  我們發現 PC 固定指向了 0x223104,并且不管你如何 reset 再重新 halt,它一直停在這個地方,這是怎麼回事?

  不同于 i.MXRT 三位數系列中有專門寄存器 RSTCTRL0->SYSRSTSTAT[5] 記錄核心軟複位狀态(warm reset)以便 BootROM 初始化階段根據此狀态來進入 Debug Mailbox 安全調試流程,在 i.MXRT1170 上是一種全新的方式,BootROM 利用了一個未開放的調試中斷(中斷号 52),該調試中斷被使能後,當調試口接收到調試請求時,該中斷便會被觸發。

痞子衡嵌入式:揭秘i.MXRT1170上用J-Link連接配接複位後PC總是停在0x223104的原因

  i.MXRT1170 BootROM 初始化階段會立即使能這個 Reserved68_IRQn 中斷,并且用一個全局變量(is_debug_pending)記錄該中斷觸發狀态。在 BootROM 執行過程中,一旦調試中斷觸發,在其中斷響應函數裡會将 is_debug_pending 置起來,并且立刻關閉 Reserved68_IRQn 中斷(不需要二次響應),然後 BootROM 兩個主階段( Serial Downloader 和 Device Boot)流程裡都會有對 is_debug_pending 狀态的處理,隻要 is_debug_pending 被置起來,BootROM 就會立即結束正常主流程,轉而做一些安全化的處理(HAB狀态清理、恢複時鐘/外設、中斷相關狀态善後),最後便進入如下 debug_loop_routine() 函數,__ASM("B .") 指令位址就在 0x223104,這就是 i.MXRT1170 上的調試安全設計,其實是一種簡化的 Debug Mailbox 機制。

  基于上面分析,最後痞子衡再總結一下這個安全政策對 JLink 調試的影響:

當晶片在ROM中執行(比如SDP模式,比如Flash中沒有應用程式)時,用JLink連接配接晶片,halt住核心,PC總是停在0x223104,這是安全調試政策決定的。 當晶片正常啟動Flash裡的應用程式後(即離開了ROM),用JLink連接配接晶片,halt住核心,PC指向的是真實的應用程式位置。 當JLink連接配接上晶片後,隻要執行reset指令,都會直接進入安全調試模式(PC停在0x223104)。

  至此,i.MXRT1170上安全調試政策實作對JLink調試的影響痞子衡便介紹完畢了,掌聲在哪裡~~~

文章會同時釋出到我的 部落格園首頁、CSDN首頁、知乎首頁、微信公衆号 平台上。

微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。

痞子衡嵌入式:揭秘i.MXRT1170上用J-Link連接配接複位後PC總是停在0x223104的原因

  最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。

痞子衡嵌入式:揭秘i.MXRT1170上用J-Link連接配接複位後PC總是停在0x223104的原因
痞子衡嵌入式:揭秘i.MXRT1170上用J-Link連接配接複位後PC總是停在0x223104的原因
痞子衡嵌入式:揭秘i.MXRT1170上用J-Link連接配接複位後PC總是停在0x223104的原因

  衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。

  專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/

  與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]

  可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。

  關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。

  痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。