你們好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給你們分享的是爲i.MXRT設計更新Segger J-Link Flash下載算法文件。html
想要在Flash中調試,基本是離不開Flash下載算法的,畢竟要先將代碼燒寫進Flash,而後才能調試。主流MCU開發環境(MCUX / IAR / Keil)以及調試工具(J-Link)的Flash下載算法設計思路基本都差很少,簡單的說,就是把Flash擦寫操做的底層驅動代碼可執行文件經過JTAG/SWD預先加載到MCU內部RAM裏,而後繼續從JTAG/SWD接收應用程序代碼數據並調用預加載的Flash擦寫操做代碼實現下載。git
痞子衡前段時間爲你們介紹過 《利用i.MXRT系列ROM提供的FlexSPI driver API可輕鬆IAP》,其實MCU開發環境和調試工具裏的Flash下載算法也在某種程度上算是一種IAP,目前最新版本的開發環境和工具基本上都是基於ROM API來實現i.MXRT的Flash下載算法的。github
在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 官方支持。.net
因此咱們須要爲 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 中。3d
<Device> <ChipInfo Vendor="NXP" Name="MIMXRT685S_M33" WorkRAMAddr="0x00000000" WorkRAMSize="0x00480000" Core="JLINK_CORE_CORTEX_M33" JLinkScriptFile="Devices/NXP/iMXRT6xx/iMXRT6xx_CortexM33.JLinkScript"/> <FlashBankInfo Name="FLEXSPI flash" BaseAddr="0x08000000" MaxSize="0x08000000" Loader="Devices/NXP/iMXRT6xx/MIMXRT6XX_EVK_FLEXSPI.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" /> <FlashBankInfo Name="Secure OSPI flash Secure" BaseAddr="0x18000000" MaxSize="0x08000000" Loader="Devices/NXP/iMXRT6xx/MIMXRT6XX_EVK_FLEXSPI_S.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" /> </Device> <Device> <ChipInfo Vendor="NXP" Name="MIMXRT633S" WorkRAMAddr="0x00000000" WorkRAMSize="0x00280000" Core="JLINK_CORE_CORTEX_M33"/> </Device>
以 i.MXRT600-EVK (Rev.E) 官方開發板爲例,使用 Keil MDK (v5.27及以上) 打開 flash 算法工程,這個工程裏的默認 flash 配置適用於 EVK 上 Flash 型號以及連法(關於 RT600 的 flash 連法可參考文章 《FlexSPI NOR鏈接方式大全(RT600)》 )。
若是是其餘型號 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主頁、微信公衆號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就能夠在手機上第一時間看了哦。