当前位置: 首页 > news >正文

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

https://www.cnblogs.com/henjay724/p/13770137.html

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

  在i.MXRT硬件那些事系列之《在串行NOR Flash XIP调试原理》一文中,痞子衡简单提了一下串行NOR Flash下载算法的概念,并没有介绍具体设计细节,关于NOR Flash下载算法每个IDE/工具都有自己的一套设计,虽然基本设计理念是一样的,但是细节方面还是有区别,今天痞子衡就来细聊J-Link下的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.842020-09-04i.MXRT1024
V6.642020-03-13i.MXRT1170
V6.602019-12-16i.MXRT1010
V6.462019-05-23i.MXRT500、i.MXRT600
V6.442019-03-01i.MXRT1015
V6.402018-10-26i.MXRT1064
V6.342018-08-07i.MXRT1060
V6.322018-04-20i.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 型号为例:

<Device><ChipInfo Vendor="NXP"Name="MIMXRT1062xxx6A"WorkRAMAddr="0x20000000"WorkRAMSize="0x00080000"Core="JLINK_CORE_CORTEX_M7"JLinkScriptFile="Devices/NXP/iMXRT106x/NXP_iMXRT106x.pex"Aliases="MIMXRT1062DVL6A" /><FlashBankInfo Name="QSPI Flash"BaseAddr="0x60000000"MaxSize="0x04000000"Loader="Devices/NXP/iMXRT106x/NXP_iMXRT106x_QSPI.elf"LoaderType="FLASH_ALGO_TYPE_OPEN" />
</Device>

  模板代码中参数主要分两类: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.80dDLL 3.NXP RT106x: Flash programming >= 8 MB failed. Fixed.Version V6.80cDLL 1.NXP RT106x: QSPI programming failed under specific circumstances. Fixed.Version V6.70DLL 19.NXP RT106x: QSPI programming did not work for some already supported flashes. Fixed.Version V6.62bDLL 9.NXP iMXRT106x: (Q)SPI flash programming did not work when using Adesto ATXP064 as external flash. Fixed.Version V6.60DLL 1.Added flash programming support for NXP MIMXRT1062DVJ6A (QSPI flash).Version V6.40bDLL 4.Fixed clock restore settings within programming algorithms for iMXRT105x and iMXRT106x QSPI-FLASH and HyperFLASH series devices.Version V6.34DLL 8.Added QSPI-Flash programming support for NXP i.MX RT106x series devices.

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

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

相关文章:

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

https://www.cnblogs.com/henjay724/p/13770137.html 大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计。 在i.MXRT硬件那些事系列之《在串行NOR Flash XIP调试原理》一文中&#xff0c;痞…...

多目标应用:基于多目标向日葵优化算法(MOSFO)的微电网多目标优化调度MATLAB

一、微网系统运行优化模型 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标向日葵优化算法 多目标向日葵优化算法&#xff08;Multi-objective sunflower optimization&#xff0c;MOS…...

智能安全科技,Vatee万腾为您服务

在智能科技的引领下&#xff0c;Vatee万腾将为您点亮投资之路&#xff0c;助您在金融市场中抓住机遇&#xff0c;实现财务目标。作为一家融合科技与投资的先锋平台&#xff0c;Vatee万腾致力于为投资者提供智能化的投资方案和支持。 Vatee万腾以其先进的智能科技为基础&#xf…...

Scala中的类型检查和转换,以及泛型,scala泛型的协变和逆变

Scala中的类型检查和转换&#xff0c;以及泛型 类型检查和转换 说明 &#xff08;1&#xff09; obj.isInstanceOf[T]&#xff1a;判断 obj 是不是T 类型。 &#xff08;2&#xff09; obj.asInstanceOf[T]&#xff1a;将 obj 强转成 T 类型。 &#xff08;3&#xff09; cla…...

【数据结构】C语言队列(详解)

前言: &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&#x1f4a5; ✨✨专栏:http://t.csdn.cn/oXkBa ⛳⛳本篇内容:c语言数据结构--C语言实现队列 目录 一.队列概念及结构 1.1队列的概念 1.2队列的结构 二.队列的实现 2.1头文…...

【数据结构初阶】一. 复杂度讲解

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十四天【程序环境和预处理】_高高的胖子的博客-CSDN博客 1 . 算法效率 &#xff08;1&#xff09;. 什么是数据结构&#xff1a; 数据结构(Data Structure)是计算机存储、…...

Jmete+Grafana+Prometheus+Influxdb+Nginx+Docker架构搭建压测体系/监控体系/实时压测数据展示平台+遇到问题总结

背景 需要大批量压测时&#xff0c;单机发出的压力能力有限&#xff0c;需要多台jmeter来同时进行压测&#xff1b;发压机资源不够&#xff0c;被压测系统没到瓶颈之前&#xff0c;发压机难免先发生资源不足的情形&#xff1b;反复压测时候也需要在不同机器中启动压测脚本&…...

php提交表单将html相互字符转化的封装函数

在 PHP 中&#xff0c;您可以使用 htmlspecialchars() 函数将 HTML 字符转换为文本。该函数将把 <、>、" 和 等特殊字符转换为对应的 HTML 实体&#xff0c;从而避免跨站点脚本&#xff08;XSS&#xff09;攻击。 例如&#xff0c;如果您有一个表单输入字段的值&a…...

7 Series FPGAs GTX/GTH Transceivers

目录 1. Overview2. Block Diagram3. Transmitter4. Receiver5. Physical Coding Sublayer(PCS)6. Physical Medium Attachment(PMA)本博客为Xilinx 7系列FPGA的千兆比特高速收发器(Gigabit Transceiver, GT)介绍 ug476 - 7 Series FPGAs GTX GTH TransceiversUser Guide…...

iOS系统下轻松构建自动化数据收集流程

在当今信息爆炸的时代&#xff0c;我们经常需要从各种渠道获取大量的数据。然而&#xff0c;手动收集这些数据不仅耗费时间和精力&#xff0c;还容易出错。幸运的是&#xff0c;在现代科技发展中有两个强大工具可以帮助我们解决这一问题——Python编程语言和iOS设备上预装的Sho…...

Android基础之Activity生命周期

Activity是Android四大组件之一、称为之首也恰如其分。 Activity直接翻译为中文叫活动。在Android系统中Activity就是我看到的一个完整的界面。 界面中看到的TextView(文字&#xff09;、Button(按钮)、ImageView&#xff08;图片&#xff09;都是需要Activity来承载的。 总…...

Golang 程序漏洞检测利器 govulncheck(一):安装和使用方法

govulncheck 是什么&#xff1f; govulncheck 是一个命令行工具&#xff0c;可以帮助 Golang 开发者快速找到项目代码和依赖的模块中的安全漏洞。该工具可以分析源代码和二进制文件&#xff0c;识别代码中对这些漏洞的任何直接或间接调用。 默认情况下&#xff0c;govulnchec…...

强化学习算法总结 2

强化学习算法总结 2 4.动态规划 待解决问题分解成若干个子问题&#xff0c;先求解子问题&#xff0c;然后得到目标问题的解 需要知道整个状态转移函数和价值函数&#xff0c;状态空间离散且有限 策略迭代&#xff1a; 策略评估:贝尔曼期望方程来得到一个策略的 V ( s ) V(s…...

修改node_modules避免更新覆盖 patch-package

说明&#xff1a;直接修改第三方库的代码&#xff0c;会带来团队协作的问题&#xff0c;使用patch-package生成补丁包 什么是 patch-package&#xff1f; patch-package 是一个基于 Git 的工具&#xff0c;它可以帮助我们对依赖包进行修复补丁。通过创建一个与问题相关的补丁文…...

Elasticsearch安装,Springboot整合Elasticsearch详细教程

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够实现近乎实时的搜索。 Elasticsearch官网https://www.elastic.co/cn/ 这篇文章主要简单介绍一下Elasticsearch&#xff0c;Elasticsearch的java API博主也在学习中&#xff0c;文章会持续更新~ …...

OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理

前言&#xff1a;在部分大厂笔试时经常会使用OJ题目&#xff0c;这里对《华为机试》和《剑指offer》中的部分题目进行思路分析和讲解&#xff0c;希望对各位读者有所帮助。 题目来自牛客网&#xff0c;欢迎各位积极挑战&#xff1a; HJ73:计算日期到天数转换_牛客网 JZ17:打印…...

混合动力汽车耐久测试

一 背景 整车厂可通过发动机和电机驱动的结合为多款车型提供混合动力驱动技术。汽车集成电机驱动可大大减少二氧化碳的排放&#xff0c;不仅如此&#xff0c;全电动驱动或混合动力驱动的汽车还将使用户体验到更好的驾驶感受&#xff0c;且这种汽车可通过电动机来实现更快的加速…...

useRef 定义的 ref 在控制台可以打印但是页面不生效?

useRef 是一个 React Hook&#xff0c;它能让你引用一个不需要渲染的值。 点击计时器 点击按钮后在控制台可以打印但是页面不生效。 useRef 返回的值在函数组件中不会自动触发重新渲染&#xff0c;所以控制台可以显示变化而按钮上无法显示 ref.current的变化。 import { use…...

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,动态数组(重点推荐))七(129)

需求&#xff1a;前端根据后端的返回数据&#xff1a;画统计图&#xff1b; 说明&#xff1a; 1.X轴为地域&#xff0c;Y轴为地域出现的次数&#xff1b; 2. 动态展示&#xff08;有地域展示&#xff0c;没有不展示&#xff0c;且高低排序&#xff09; Demo案例&#xff1a; …...

Cell Reports | 揭开METTL14在介导m6A修饰中的神秘面纱

m6A被认为是最丰富的mRNA修饰&#xff0c;广泛分布在大多数真核生物中&#xff0c;包括哺乳动物、植物、昆虫、酵母和某些病毒。m6A修饰的沉积和去除之间的动态平衡对于正常的生物过程和发育至关重要&#xff0c;如失调通常与癌症等疾病有关。m6A修饰由m6A甲基转移酶复合物&…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...