0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

J-Link工具下i.MXRT的串行NOR Flash下载算法设计

454398 来源:alpha007 作者:alpha007 2022-12-08 10:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 J-Link 工具下 i.MXRT 的串行 NOR Flash 下载算法设计。

一、J-Link 各版本对 i.MXRT 的支持

从 Segger 官网上看,目前最新的 J-Link 驱动版本是 V6.86b,其能够支持目前所有已量产的 i.MXRT 系列,而痞子衡 PC 上安装的是 V6.52e,从 J-Link 历史各版本 Release Note 上看,痞子衡目前的 J-Link 版本不支持全部 i.MXRT 型号,那么如果想要支持新芯片(比如 i.MXRT1170),是不是一定要重新安装最新 J-Link 呢?其实未必!

版本 发布时间 支持芯片
V6.84 2020-09-04 i.MXRT1024
V6.64 2020-03-13 i.MXRT1170
V6.60 2019-12-16 i.MXRT1010
V6.46 2019-05-23 i.MXRT500、i.MXRT600
V6.44 2019-03-01 i.MXRT1015
V6.40 2018-10-26 i.MXRT1064
V6.34 2018-08-07 i.MXRT1060
V6.32 2018-04-20 i.MXRT1050、i.MXRT1020

J-Link 对新 MCU 型号的下载支持并不是与自身版本严格绑定的,其增加新芯片的方式很灵活,只需要按要求添加相应的算法文件即可,这样我们可以不必等待 Segger 的正式发布。

二、为当前 J-Link 增加新 i.MXRT 型号支持

关于增加 i.MXRT 新型号的支持,痞子衡之前写过一篇文章《轻松为 i.MXRT 设计更新 Segger J-Link Flash 下载算法文件》,简介了如何为 v.6.52e 版本新增 i.MXRT600 的支持(那篇文章其实有点疏忽,v6.52 版本已经开始支持 i.MXRT600,直接集成进 JLinkARM.dll 中了,没有显式地放在 JLinkDevices.xml 文件中)。

为当前 J-Link 驱动增加新 i.MXRT 型号支持,其实就是在 /SEGGER/JLink_V652e/JLinkDevices.xml 文件中按模板添加一些代码,至于那些代码是什么含义,在 /SEGGER/JLink_V652e/Doc/Manuals/UM08001_JLink.pdf 文档的Chapter 12 Open Flashloader有详细解释。

让我们试着分析 JLinkDevices.xml 文件中那些模板代码的含义,且以最常见的 i.MXRT1060 型号为例:


  
  

模板代码中参数主要分两类:ChipInfo 和 FlashBankInfo,前者描述算法适用的 MCU 芯片相关信息,后者描述在该 MCU 上适用的 Flash 操作相关信息。

先说 ChipInfo 下的参数:Vendor 和 Name 主要是创建 J-Flash 工程或者在 IDE 里在线下载时弹出 J-Link 选项框时用于确定选择这个下载算法文件的标识。Core 用于指定 MCU 芯片内核类型。JLinkScriptFile 指定开始启用下载算法前需预加载的 Jlink 脚本(可以根据 MCU 特性做一些特殊的初始化工作,比如 RT600 的 Debug Mailbox 激活,RT1170 的双核切换等)。Aliases 就是 Name 的详细展开。

ChipInfo 下最重要的两个参数其实是 WorkRAMAddr 和 WorkRAMSize,它们指明了下载算法(某种 elf 格式文件)被加载进 MCU 内部 SRAM 执行的区域,这两个参数值与 MCU 型号息息相关,必须是合法有效的,但可以不唯一。后面的文章里痞子衡会介绍下载算法设计原理,其最重要的特性是 Read-Only Position Independent 和 Read-Write Position Independent,即下载算法本身不是固定地址链接,而是位置无关链接,算法代码机器码是可以被放到任意地址去执行的。

再说 FlashBankInfo 下的参数:Name 标明下载算法适用的 Flash 类型(FlashBankInfo 可以有多个,对应不同 Flash 的下载算法)。BaseAddr 和 MaxSize 标明该 Flash 在 MCU 系统内存映射中的地址范围,主要用于后续 XIP 调试,跟下载关系不大。Loader 和 LoaderType 则指明下载算法文件位置和类型,这是核心,对于新 i.MXRT 型号的下载支持,大部分工作其实就是提供合适的 Loader。

三、NOR Flash 下载算法设计

前面讲了 J-Link 对于新 i.MXRT 型号的下载支持,其实就是提供合适的 Loader 文件,Loader 文件的设计是核心,那么 J-Link 的 Loader 到底是怎么设计的呢?这得先从理解 LoaderType 这个参数说起。

搜遍整个 UM08001_JLink 文档,LoaderType 仅有一个值,即 FLASH_ALGO_TYPE_OPEN,文档里的解释是使用公开的 Flashloader 算法设计,这个公开的 Flashloader 指的是 ARM 官方的基于 CMSIS 的 Flashloader。

ARM 开源的 Flashloader 算法属于 CMSIS-Pack 中的 Device Family Pack (DFP) 里的一个组成部分,它本来是专用于 Keil MDK 下的,但是 Segger 为了保持其 J-Link 工具链的通用性,选择了与 ARM Flashloader 的 API 接口保持一致,这意味着 Keil MDK 与 J-Link 两者的下载算法文件基本是可以交换使用的(当然设计上有一点小区别,后面文章会介绍)。

鉴于 Segger 并没有开源其下载算法源码,因此我们无法得知其 J-Link 自带的下载算法文件具体是怎么实现(例如 Devices/NXP/iMXRT106x/NXP_iMXRT106x_QSPI.elf),虽然我们可以根据每次的 J-Link 驱动版本更新时的记录得知其动态,但总觉得是个黑盒子。

Version V6.80d
  DLL 3.NXP RT106x: Flash programming >= 8 MB failed. Fixed.

Version V6.80c
  DLL 1.NXP RT106x: QSPI programming failed under specific circumstances. Fixed.

Version V6.70
  DLL 19.NXP RT106x: QSPI programming did not work for some already supported flashes. Fixed.

Version V6.62b
  DLL 9.NXP iMXRT106x: (Q)SPI flash programming did not work when using Adesto ATXP064 as external flash. Fixed.

Version V6.60
  DLL 1.Added flash programming support for NXP MIMXRT1062DVJ6A (QSPI flash).

Version V6.40b
  DLL 4.Fixed clock restore settings within programming algorithms for iMXRT105x and iMXRT106x QSPI-FLASH and HyperFLASH series devices.

Version V6.34
  DLL 8.Added QSPI-Flash programming support for NXP i.MX RT106x series devices.

下一篇文章,痞子衡将带大家深入探究 Keil MDK 下的下载算法设计,了解了这个 MDK 下载算法,我们便可以自己为 J-Link 设计下载算法,从此再也不用担心黑盒子。

至此,J-Link 工具下 i.MXRT 的串行 NOR Flash 下载算法设计痞子衡便介绍完毕了,掌声在哪里~~~

审核编辑黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法设计
    +关注

    关注

    0

    文章

    24

    浏览量

    9130
  • J-Link
    +关注

    关注

    0

    文章

    89

    浏览量

    23251
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CWDAPLINK与J-link下载有什么区别?哪一款比较好?

    CWDAPLINK与J-link下载有什么区别?哪一款比较好?
    发表于 12-02 06:06

    恩智浦i.MXRT1180的FlexSPI NOR启动连接方式

    最近属于i.MXRT11xx阵营的第二代旗舰i.MXRT1180正式发布了,今天咱们就来介绍它的FlexSPI NOR启动连接方式,在阅读本文前最好把FlexSPI NOR启动连接方式
    的头像 发表于 11-08 10:20 5676次阅读
    恩智浦<b class='flag-5'>i.MXRT</b>1180的FlexSPI <b class='flag-5'>NOR</b>启动连接方式

    生态芯进阶 | SEGGER J-Link/Flasher深度适配极海G32R50x系列实时控制MCU!

    ,全栈提速 广大用户可通过J-Link调试器和Flasher编程器自动识别G32R50x系列实时控制MCU,零门槛启用专业级调试功能,轻松实现高效精准的下载、调试与固件烧录,从而助力工程师降低开发时间
    的头像 发表于 09-22 14:23 807次阅读
    生态芯进阶 | SEGGER <b class='flag-5'>J-Link</b>/Flasher深度适配极海G32R50x系列实时控制MCU!

    【RA4E2开发板测评】MDK程序开发+J-LINK下载-&gt;RA4M2配置方法

    习惯STM32开发转RA4M2开发的童鞋可能更习惯MDK和采用J-LINK实现开发和调试。 1.使用配置工具配置端口(类似于STM32CUBEMX) 型号选型和开发环境选择设置 2配置GPIO口
    发表于 08-31 13:55

    SEGGER J-Link调试器支持Allegro微控制器

    SEGGER领先的J-Link调试器现在可用于Allegro MicroSystems MCU的程序下载和在线调试。有了J-Link的支持,结合Ozone多平台调试器,以及Flasher系列的专业在线编程器,技术人员可以实现A8
    的头像 发表于 06-10 09:29 900次阅读

    多个i.MXRT共享一颗Flash启动的方法与实践()

    在 《多个i.MXRT共享一颗Flash启动的方法与实践(上)》 一文里痞子衡给大家从理论上介绍一种多 i.MXRT 共享 Flash 启动的方法,但是理论虽好,如果没有经过实践验证切
    的头像 发表于 06-05 10:04 1033次阅读
    多个<b class='flag-5'>i.MXRT</b>共享一颗<b class='flag-5'>Flash</b>启动的方法与实践(<b class='flag-5'>下</b>)

    多个i.MXRT共享一颗Flash启动的方法与实践(上)

    有些客户应用会采用多颗 i.MXRT 芯片设计一主多从的硬件架构(目的不一,或仿多核 MCU 系统、或拓展 GPIO 数量),因为 i.MXRT 片内无非易失性存储器,这时候为整个系统配置合适的启动设备保证每个 i.MXRT
    的头像 发表于 06-05 10:01 1004次阅读
    多个<b class='flag-5'>i.MXRT</b>共享一颗<b class='flag-5'>Flash</b>启动的方法与实践(上)

    可以使用J-link对CYPD3171进行编程吗?

    我可以使用 J-link 对 CYPD3171 进行编程吗?
    发表于 04-30 07:04

    如何使用带有i.MX 93处理器的Segger J-link在VSCode中进行调试?

    我已经阅读了有关在 i.MX 8 处理器上使用 j-link 进行调试的指南。我已经尝试了本指南,但使用的是 iMX93。当我想连接到 J-link GDB 服务器应用程序时,我遇到了一个问题。“MIMX9352_M33”处理器
    发表于 04-04 08:21

    如何将MCUXpresso和MCU LINK_PRO置于J-Link仿真模式?

    我想知道是否有人可以帮助我将 MCUXpresso 和 MCU LINK_PRO置于 J-Link 仿真模式,以刷新和调试我的 CoM 板。 几年前我肯定有这个工作,但记不清 MCUXpresso
    发表于 04-02 06:41

    如何通过J-Link实现STM32H5控制调试端口

    基于J-Link实现STM32H5安全编程介绍了在禁用TrustZone时,如何通过J-Link实现STM32H5控制调试端口的安全锁定或回归打开。
    的头像 发表于 03-17 10:25 1061次阅读
    如何通过<b class='flag-5'>J-Link</b>实现STM32H5控制调试端口

    SEGGER J-Link和Flasher工具支持意法半导体汽车微控制器

    2025年2月,SEGGER宣布其J-Link调试器和Flasher在线编程器全面支持意法半导体针对汽车应用的Stellar P&G系列微控制器。
    的头像 发表于 02-14 11:37 1133次阅读

    如何通过J-Link向目标系统供电

        J-Link能够通过JTAG接口的Pin-19引脚向目标系统输出5V电压,电流不超过300mA。 默认情况J-Link供电功能是关闭的。用户可以通过命令或相应的工具配置启动
    的头像 发表于 12-21 14:29 1771次阅读
    如何通过<b class='flag-5'>J-Link</b>向目标系统供电

    【敏矽微ME32G070开发板免费体验】之开箱与demo体验并j-link

    接上面的帖子: https://bbs.elecfans.com/jishu_2468789_1_1.html 终于找到了合适的下载器 ,调试器 j-link 多谢之前参加的活动送出的这个调试器
    发表于 12-15 12:42

    RISC-V 使用J-Link调试RV-STAR

    使用J-Link调试RV-STAR 前提: 此文档是面向已经有一定使用基础的用户,在此省略了Nuclei Studio IDE下载安装、编译和调试运行等流程的详细介绍,主要指导用户如何连接
    发表于 12-14 17:47