Build tool (IAR, Keil, J-Link) flash algo for i.MXRT | 收集i.MXRT主流开发工具的flash算法源工程
- IAR EWARM v8.40.2
- Keil MDK v5.27
- J-Link v6.52e、v6.72b、v6.87e
- MCUXpresso IDE v11.0.0_2495_alpha
RT | IDE | Board | Flash | Port | Status |
---|---|---|---|---|---|
i.MXRT500 A0 |
IAR | / | / | / | / |
Keil J-Link |
NXP EVK_Rev.A-B | U38 MX25UM51345 |
PIO1[27:20] FLEXSPI0_PortA |
Done Not for J-Flash |
|
HMI xProject_V1 | GD25LE128 | PIO1[23:20] FLEXSPI0_PortA |
|||
MCUX | / | / | / | / | |
i.MXRT500 B0/B1 |
IAR | NXP EVK_Rev.C | U38 MX25UM51345 |
PIO1[27:20] FLEXSPI0_PortA |
Done |
Keil J-Link |
NXP EVK_Rev.C | U38 MX25UM51345 |
PIO1[27:20] FLEXSPI0_PortA |
Done Not for J-Flash |
|
HMI xProject_V2 | GD25LE128 | PIO1[23:20] FLEXSPI0_PortA |
|||
MCUX | / | / | / | / | |
i.MXRT600 A0 |
IAR | / | / | / | / |
Keil J-Link |
NXP EVB_Rev.0 | U8 W25Q64FW |
PIO1[23:20] QSPI_PortA |
Done | |
NXP EVK_Rev.B | U19 MX25UM51345 |
PIO1[27:20] QSPI_PortA |
/ | ||
MSFT xProject_V1 | W25Q16FW (no SFDP) |
PIO1[23:20] QSPI_PortA |
Done | ||
MCUX | / | / | / | / | |
i.MXRT600 B0 |
IAR | / | / | / | / |
Keil J-Link |
NXP EVB_Rev.C | / | / | / | |
NXP EVK_Rev.E | U19 MX25UM51345 |
PIO1[14:11],PIO2[23:22,18:17] FLEXSPI_PortB |
Done | ||
HUAQIN xProject_V2 | GD25LQ64E | PIO1[23:20] FLEXSPI_PortA |
Done | ||
MSFT xProject_V2 | W25Q16FW (no SFDP) |
PIO1[23:20] FLEXSPI_PortA |
Done | ||
MCUX | / | / | / | / | |
i.MXRT1010 | IAR | / | / | / | / |
Keil J-Link |
NXP EVK_Rev.C | U1E AT25SF128A |
GPIO_SD[11:06] FLEXSPI_PortA |
Done | |
MCUX | / | / | / | / | |
i.MXRT1020 | IAR | / | / | / | / |
Keil J-Link |
NXP EVK_Rev.B | U13 IS25LP064A |
GPIO_SD_B1[11:06] FLEXSPI_PortA |
Done | |
MCUX | / | / | / | / | |
i.MXRT1024 | IAR | / | / | / | / |
Keil J-Link |
NXP EVK_Rev.B1 | Internal Flash | / | Done | |
MCUX | / | / | / | / | |
i.MXRT1050 B0 |
IAR | / | / | / | / |
Keil J-Link |
NXP EVKB_Rev.A1 | U19 S26KS512S |
GPIO_SD_B1[11:08,03:00] FLEXSPI_PortA&B |
Done | |
HON zProject_V1 | IS25LP064 | GPIO_SD_B1[11:08] FLEXSPI_PortA |
Done | ||
MCUX | / | / | / | / | |
i.MXRT1060 | IAR | / | / | / | / |
Keil J-Link |
NXP EVK_Rev.A1 | U33 IS25WP064 |
GPIO_SD_B1[11:08] FLEXSPI_PortA |
Done | |
HON xProject_V1 HON xProject_V2 |
IS25WP512 IS25LP256 |
GPIO_SD_B1[11:08] FLEXSPI_PortA |
Done | ||
HON yProject_V1 | IS25LP064 | GPIO_AD_B1[13:10] FLEXSPI_PortA |
Done | ||
MCUX | / | / | / | / | |
i.MXRT1064 | IAR | / | / | / | / |
Keil J-Link |
NXP EVK_Rev.A | Internal Flash | / | Done | |
MCUX | / | / | / | / | |
i.MXRT1170 A0 |
IAR | / | / | / | / |
Keil J-Link |
NXP EVK_Rev.A-B | U23 IS25WP128 |
GPIO_SD_B2[11:08] FLEXSPI0_PortA |
Done | |
NXP DC_Rev.A | U16 MX25UW51345 |
GPIO_SD_B2[11:08,03:00] FLEXSPI0_PortA&B |
Done | ||
MCUX | / | / | / | / |
想正常使用 J-Link 仿真器,首先需要在 Segger 官网下载并安装 J-Link 驱动:
- 下载地址:https://www.segger.com/downloads/jlink/
- 正常工作版本: v6.52e
- 异常工作版本: v6.71a(不确定新版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 文件夹拷贝到上图路径下:
- 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 中。
<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 了。