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

    浏览量

    9393
  • J-Link
    +关注

    关注

    0

    文章

    91

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MXRT1041XJM5B MCU 无复位处理程序无法执行

    编程时,代码不会从 Flash 执行。 我也尝试过使用J-Link调试器。采用这种方法时,编程过程是成功的;但一旦我对MCU进行电源循环操作,代码便无法执行一一这表明代码很可能被写入到了RAM而非闪存
    发表于 05-06 06:33

    i.MXRT1173跨界处理器能支持2GB NOR闪存吗?

    does nxp i.MXRT1173 crossover processor can support 2GB NOR flash.If yes what need to be taken
    发表于 04-23 08:25

    用于在FRDM-i.MX93上调试Cortex-M33的推荐J-Link 型号?

    大家好 我正在使用 FRDM-I.MX93 开发板,目标是 Cortex-M33(实时内核)。我已经通过AN14120和一些社区讨论,我知道通过 SWD(P14 标头)上的 J-Link 支持调试
    发表于 04-22 06:56

    昂瑞微OM662X系列MCU正式获得SEGGER J-Link/Flasher支持

    北京昂瑞微电子技术股份有限公司(以下简称为“昂瑞微”)宣布,其OM662X系列实时控制MCU已正式完成与微控制器调试下载与量产编程工具厂商SEGGER旗下J-Link调试器及Flasher 编程器的生态适配。相关型号现已上线至S
    的头像 发表于 04-16 11:38 2290次阅读

    【教程】CW32之使用J-Link烧录.hex文件

    在平时调试时,我们也可以使用DAP-Link、ST-Link等进行烧录和Debug,使用方法和STM32类似。然而当我们手头只有hex文件(或bin文件)时,可以尝试使用J-Link进行烧录。
    的头像 发表于 04-01 16:56 3312次阅读
    【教程】CW32之使用<b class='flag-5'>J-Link</b>烧录.hex文件

    i.MXRT1064无法通过串行连接到MCU Boot Utility怎么解决?

    我有一个使用 i.MXRT1064 的定制板,我正在尝试使用 SDP 串行下载协议连接到程序。MCU Boot Utility 无法连接到启动模式开关 1:0 设置为 01 的芯片。
    发表于 03-10 06:45

    使用 J-LINK 调试时发生错误,是什么原因导致的?如何解决?

    使用J-Link调试时发生错误,如图所示。我应该如何解决这个错误?
    发表于 02-26 10:08

    多多盒子助手 J-link RTT实时助手 串口助手 波形图显示非常好用的工具

    历史记录和快速重发 周期发送 - 可配置自动循环发送 下载链接[多多盒子助手 J-link RTT实时助手 串口助手: 可以显示波形图,还有更多的功能!请关注后续更新。]()
    发表于 12-12 09:26

    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 6579次阅读
    恩智浦<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 1431次阅读
    生态芯进阶 | 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 1572次阅读

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

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