宁波网站推广软件,wordpress文件默认权限设置,百度怎样做网站并宣传网站,购物平台推荐https://www.cnblogs.com/henjay724/p/13770137.html 大家好#xff0c;我是痞子衡#xff0c;是正经搞技术的痞子。今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计。 在i.MXRT硬件那些事系列之《在串行NOR Flash XIP调试原理》一文中#xff0c;痞…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.MXRT1024V6.642020-03-13i.MXRT1170V6.602019-12-16i.MXRT1010V6.462019-05-23i.MXRT500、i.MXRT600V6.442019-03-01i.MXRT1015V6.402018-10-26i.MXRT1064V6.342018-08-07i.MXRT1060V6.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 型号为例
DeviceChipInfo VendorNXPNameMIMXRT1062xxx6AWorkRAMAddr0x20000000WorkRAMSize0x00080000CoreJLINK_CORE_CORTEX_M7JLinkScriptFileDevices/NXP/iMXRT106x/NXP_iMXRT106x.pexAliasesMIMXRT1062DVL6A /FlashBankInfo NameQSPI FlashBaseAddr0x60000000MaxSize0x04000000LoaderDevices/NXP/iMXRT106x/NXP_iMXRT106x_QSPI.elfLoaderTypeFLASH_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下载算法设计痞子衡便介绍完毕了掌声在哪里~~~