痞子衡嵌入式:輕鬆為i.MXRT設計更新Segger J-Link Flash下載演算法檔案

痞子衡發表於2020-07-04

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是為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

1、安裝Segger J-Link驅動

  想正常使用 J-Link 模擬器,首先需要在 Segger 官網下載並安裝 J-Link 驅動:

2、確定MCU型號在J-Link支援列表裡

  以 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 資料夾拷貝到上圖路徑下:

  最後需要將如下程式碼新增到 \SEGGER\JLink_Vxxx\JLinkDevices.xml 檔案中,JLinkDevices.xml 檔案主要用於告訴 J-Link 模擬器 i.MXRT600 的 flash 演算法檔案位置在哪裡。至此,i.MXRT600 的初步支援已經加到 J-Link 中。

  <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>

3、生成flash演算法檔案

  以 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 工程裡改名)。

4、使用新生成的flash演算法檔案

  有了新生成的 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。

5、J-Flash使用示例

  至此我們就可以在 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主頁微信公眾號 平臺上。

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

相關文章