在i.MXRT所有Flash下載下傳算法裡,痞子衡認為Segger J-Link版的Flash下載下傳算法是最應該掌握的,畢竟Segger提供了完善的軟體工具支援(Jlink commander、J-Flash、Ozone),既可獨立使用,也可嵌入其他MCU開發環境中使用(實際上它與Keil算法檔案是相容的),會修改和更新Segger Jlink Flash下載下傳算法,那真是走遍天下都不怕。
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是為i.MXRT設計更新Segger J-Link Flash下載下傳算法檔案。
想要在Flash中調試,基本是離不開Flash下載下傳算法的,畢竟要先将代碼燒寫進Flash,然後才能調試。主流MCU開發環境(MCUX / IAR / Keil)以及調試工具(J-Link)的Flash下載下傳算法設計思路基本都差不多,簡單的說,就是把Flash擦寫操作的底層驅動代碼可執行檔案通過JTAG/SWD預先加載到MCU内部RAM裡,然後繼續從JTAG/SWD接收應用程式代碼資料并調用預加載的Flash擦寫操作代碼實作下載下傳。
痞子衡前段時間為大家介紹過 《利用i.MXRT系列ROM提供的FlexSPI driver API可輕松IAP》,其實MCU開發環境和調試工具裡的Flash下載下傳算法也在某種程度上算是一種IAP,目前最新版本的開發環境和工具基本上都是基于ROM API來實作i.MXRT的Flash下載下傳算法的。
在i.MXRT所有Flash下載下傳算法裡,痞子衡認為Segger J-Link版的Flash下載下傳算法是最應該掌握的,畢竟Segger提供了完善的軟體工具支援(Jlink commander、J-Flash、Ozone),既可獨立使用,也可嵌入其他MCU開發環境中使用(實際上它與Keil算法檔案是相容的),會修改和更新Segger Jlink Flash下載下傳算法,那真是走遍天下都不怕。
是以痞子衡搞了一個i.MXRT下載下傳算法項目,收集了i.MXRT所有型号的下載下傳算法源代碼工程,其中jlink算法是最全的,其他IDE算法還在陸續完善中。今天痞子衡就給大家簡單介紹下,如何基于這個項目來生成和更新Segger J-Link Flash算法檔案。
i.MXRT下載下傳算法項目: https://github.com/JayHeng/imxrt-tool-flash-algo
想正常使用 J-Link 仿真器,首先需要在 Segger 官網下載下傳并安裝 J-Link 驅動:
下載下傳位址:https://www.segger.com/downloads/jlink/ 測試版本: v6.52e
以 i.MXRT600 晶片為例,進入 J-Link 安裝目錄,找到 \SEGGER\JLink_Vxxx\Devices\NXP\ 路徑檢視是否有 i.MXRT600 的支援,很遺憾,沒有發現 i.MXRT600 的蹤影,因為 i.MXRT600 型号比較新,還沒有被 J-Link 官方支援。

是以我們需要為 J-Link 增加 i.MXRT600 的支援。将本項目中提供的 i.MXRT600 晶片支援包解壓,将包中的 \JLink_V652\Devices\NXP\iMXRT6xx 檔案夾拷貝到上圖路徑下:
i.MXRT600 晶片支援包:\imxrt-tool-flash-algo\packs\RT600_b0_segger_patch_1210.zip
最後需要将如下代碼添加到 \SEGGER\JLink_Vxxx\JLinkDevices.xml 檔案中,JLinkDevices.xml 檔案主要用于告訴 J-Link 仿真器 i.MXRT600 的 flash 算法檔案位置在哪裡。至此,i.MXRT600 的初步支援已經加到 J-Link 中。
以 i.MXRT600-EVK (Rev.E) 官方開發闆為例,使用 Keil MDK (v5.27及以上) 打開 flash 算法工程,這個工程裡的預設 flash 配置适用于 EVK 上 Flash 型号以及連法(關于 RT600 的 flash 連法可參考文章 《FlexSPI NOR連接配接方式大全(RT600)》 )。
i.MXRT600 算法工程:\imxrt-tool-flash-algo\boards\nxp_evkmimxrt685_rev.e\flash_algo_b0_silicon\Keil_JLink\MIMXRT6XX_EVK_FLEXSPI.uvprojx
如果是其他型号 Flash 或連法,一般隻需要更改 FlashPrg_mx25um51345.c 檔案裡的 CONFIG_OPTION0 和 CONFIG_OPTION1 的值即可。關于這兩個值的定義,參考晶片手冊裡的BootROM章節,因為 i.MXRT600 支援 ROM API,這裡的 flash 算法工程是基于 ROM API 實作的。
工程成功編譯後,會生成 MIMXRT6XX_EVK_FLEXSPI.FLM,這個檔案就是我們要的算法檔案,其實它就是.axf檔案改了個檔案類型。你可以手工地将新生成的 .FLM 改個名字(當然最好在 Keil 工程裡改名)。
有了新生成的 MIMXRT6XX_EVK_FLEXSPI.FLM,将其放到 \SEGGER\JLink_Vxxx\Devices\NXP\iMXRT6xx 目錄下,并且注意修改 \SEGGER\JLink_Vxxx\JLinkDevices.xml 檔案中的 Loader="Devices/NXP/iMXRT6xx/MIMXRT6XX_EVK_FLEXSPI.FLM" 語句(如果你改了.FLM檔案名的話)。
為了讓 i.MXRT600 晶片支援包和新 flash 算法生效,最好輕按兩下運作一下 \SEGGER\JLink_Vxxx\JLinkDLLUpdater.exe。
至此我們就可以在 J-Link 下正常下載下傳 i.MXRT600-EVK 上的 flash 了,以 J-Link 配套的 flash 燒寫工具 J-Flash 為例。打開 \SEGGER\JLink_Vxxx\JFlash.exe 軟體,選擇目标晶片為 MiMXRT685S_M33。
然後,将 i.MXRT600-EVK 設為 Serial ISP 模式(SW5[2:1]設為Off-Off-On)并通電,連接配接上後便可以任意讀寫擦 flash 了。
文章會同時釋出到我的 部落格園首頁、CSDN首頁、微信公衆号 平台上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。