查看: 2218|回复: 0

[分享] 轻松为i.MXRT设计更新J-Link Flash下载算法

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32003
    最后登录
    2024-4-9
    发表于 2020-7-20 13:09:10 | 显示全部楼层 |阅读模式
    轻松为i.MXRT设计更新J-Link 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下载算法项目:http://github.com/JayHeng/imxrt-tool-flash-algo


    1、安装Segger J-Link驱动
    想正常使用 J-Link 仿真器,首先需要在 Segger 官网下载并安装 J-Link 驱动:


    下载地址:http://www.segger.com/downloads/jlink/
    测试版本:v6.52e
    2、确定MCU型号在J-Link支持列表里
    以 i.MXRT600 芯片为例,进入 J-Link 安装目录,找到 \SEGGER\JLink_Vxxx\Devices\NXP\ 路径查看是否有 i.MXRT600 的支持,很遗憾,没有发现 i.MXRT600 的踪影,因为 i.MXRT600 型号比较新,还没有被 J-Link 官方支持。
    1.png
    所以我们需要为 J-Link 增加 i.MXRT600 的支持。将本项目中提供的 i.MXRT600 芯片支持包解压,将包中的 \JLink_V652\Devices\NXP\iMXRT6xx 文件夹拷贝到上图路径下:


    i.MXRT600 芯片支持包:\imxrt-tool-flash-algo\packs\RT600_b0_segger_patch_1210.zip
    2.png
    最后需要将如下代码添加到 \SEGGER\JLink_Vxxx\JLinkDevices.xml 文件中,JLinkDevices.xml 文件主要用于告诉 J-Link 仿真器 i.MXRT600 的 flash 算法文件位置在哪里。至此,i.MXRT600 的初步支持已经加到 J-Link 中
    1. <Device>
    2.     <ChipInfo Vendor="NXP" Name="MIMXRT685S_M33" WorkRAMAddr="0x00000000" WorkRAMSize="0x00480000" Core="JLINK_CORE_CORTEX_M33" JLinkScriptFile="Devices/NXP/iMXRT6xx/iMXRT6xx_CortexM33.JLinkScript"/>
    3.     <FlashBankInfo Name="FLEXSPI flash" BaseAddr="0x08000000" MaxSize="0x08000000" Loader="Devices/NXP/iMXRT6xx/MIMXRT6XX_EVK_FLEXSPI.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" />
    4.     <FlashBankInfo Name="Secure OSPI flash Secure" BaseAddr="0x18000000" MaxSize="0x08000000" Loader="Devices/NXP/iMXRT6xx/MIMXRT6XX_EVK_FLEXSPI_S.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" />
    5.   </Device>
    6.   <Device>
    7.     <ChipInfo Vendor="NXP" Name="MIMXRT633S" WorkRAMAddr="0x00000000" WorkRAMSize="0x00280000" Core="JLINK_CORE_CORTEX_M33"/>
    8.   </Device>
    复制代码
    3、生成flash算法文件
    以 i.MXRT600-EVK (Rev.E) 官方开发板为例,使用 Keil MDK (v5.27及以上) 打开 flash 算法工程,这个工程里的默认 flash 配置适用于 EVK 上 Flash 型号以及连法(关于 RT600 的 flash 连法可参考文章 《FlexSPI NOR连接方式大全(RT600)》 )。
    1. 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 实现的。
    3.png
    工程成功编译后,会生成 MIMXRT6XX_EVK_FLEXSPI.FLM,这个文件就是我们要的算法文件,其实它就是.axf文件改了个文件类型。你可以手工地将新生成的 .FLM 改个名字(当然最好在 Keil 工程里改名)。
    4.png
    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文件名的话)。
    5.png
    为了让 i.MXRT600 芯片支持包和新 flash 算法生效,最好双击运行一下 \SEGGER\JLink_Vxxx\JLinkDLLUpdater.exe。
    6.png
    5、J-Flash使用示例

    至此我们就可以在 J-Link 下正常下载 i.MXRT600-EVK 上的 flash 了,以 J-Link 配套的 flash 烧写工具 J-Flash 为例。打开 \SEGGER\JLink_Vxxx\JFlash.exe 软件,选择目标芯片为 MiMXRT685S_M33。
    7.png
    然后,将 i.MXRT600-EVK 设为 Serial ISP 模式(SW5[2:1]设为Off-Off-On)并通电,连接上后便可以任意读写擦 flash 了。
    8.png
    文章出处:痞子衡嵌入式

    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-20 09:48 , Processed in 0.119263 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表