痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(2)- Boot配置(ISP_Pin/OTP)


  你们好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给你们介绍的是恩智浦i.MX RTxxx系列MCU的Boot配置html

  在上一篇文章 Boot简介 里痞子衡为你们介绍了Boot基本原理以及i.MXRTxxx Boot方式简介。今天痞子衡就来重点聊一聊i.MXRTxxx Boot方式具体由哪些配置决定的。编程

  不管是什么芯片里的BootROM,其最核心的功能无非两个:1、从存放Application的存储器中加载执行;2、经过支持的通讯接口接收来自Host的Application数据完成更新或直接跳转执行,因此Boot配置也主要围绕这两个核心功能。工具

1、Boot行为模式选择

  芯片内部OTP memory中的PRIMARY_BOOT_SRC[3:0]位和芯片外部管脚ISP[2:0]状态共同决定了i.MXRTxxx Boot行为的最顶层配置,可是与上一篇文章里介绍的Kinetis/LPC/STM32 Boot Mode配置不一样的是,i.MXRTxxx上电永远是从ROM里开始启动,此处的PRIMARY_BOOT_SRC[3:0]和ISP[2:0]决定的仅是BootROM程序的不一样行为模式(执行代码分支),而Kinetis/LPC/STM32 Boot Mode侧重的是决定CPU从ROM仍是FLASH里启动。设计

1.1 行为模式定义

  i.MXRTxxx的Boot行为模式和接口很是丰富,甚至绝不夸张地说,其Boot行为模式可让你眼花缭乱。在讲具体Boot模式功能前,有必要先看一下各行为模式是怎么肯定的:3d

1.1.1 PRIMARY_BOOT_SRC[3:0]值定义

  PRIMARY_BOOT_SRC[3:0]是最高优先级的行为模式定义,下表是PRIMARY_BOOT_SRC[3:0]相关值定义,可在参考手册的Non-Secure Boot ROM章节中找到。至于PRIMARY_BOOT_SRC具体在OTP memory中的位置(暂且先透露一下吧,其位于BOOT_CFG[0]的低4bit,BOOT_CFG[0]是第97个OTP Word(fuse index=0x60)),痞子衡会在后面的文章细聊。
  i.MXRT600 PRIMARY_BOOT_SRC[3:0] bits:
htm

1.1.2 ISP[2:0]管脚状态定义

  当PRIMARY_BOOT_SRC[3:0] bits未烧写时(即4'b0000),ISP[2:0] pins开始决定行为模式。ISP[2:0]管脚状态是在BootROM里软件采样的,因此每一次系统软复位去从新执行BootROM时,ISP[2:0]状态都会被从新采样。
  i.MXRT600 ISP[2:0] pins:
blog

1.2 行为模式分类

  不论是PRIMARY_BOOT_SRC[3:0]位仍是外部管脚ISP[2:0]状态,他们决定的最终Boot行为模式是类似的,区别只是一个经过烧OTP决定(通常用于量产阶段),另外一个经过切换引脚状态决定(通常用于研发阶段)。Boot行为模式看起来很是多,但归纳而言总共就三大类:接口

1.2.1 Serial ISP模式(UART/SPI/I2C/USB-HID)

  Serial ISP模式顾名思义即串行编程模式,在这种模式下,BootROM经过指定的UART/SPI/I2C/USB-HID口来接收来自Host(恩智浦提供了上位机工具blhost.exe或者MCUBootUtility)的Application数据,并将数据下载到支持启动的外部Device中(Serial NOR/SD/eMMC/1bit Recovery SPI NOR),这种模式其实就是用于代替专用Flash编程器去烧录可执行程序文件的
  关于Serial ISP模式具体如何应用,痞子衡会在下一篇文章里进一步介绍。
get

1.2.2 Serial Boot模式(UART/SPI/I2C/USB-HID/USB-DFU)

  Serial Boot模式即串行启动模式,这种模式看起来与第一种Serial ISP模式有点类似,由于在通讯接口上是共用的(上位机工具也都是blhost.exe),除了多了个USB-DFU方式(上位机工具是开源的dfu-util)。不过二者最大的区别在于Application下载位置,Serial ISP是往外部非易失Device里下载,而Serial Boot是往芯片内部SRAM里下载并当即跳转执行。若是你了解i.MXRTyyyy的Serial Downloader模式(详见 飞思卡尔i.MX RTyyyy系列MCU启动那些事(2)- Boot配置(BOOT Pin/eFUSE) 第1.2.1节),你会发现这种模式从功能上更像i.MXRTyyyy的Serial Downloader模式。
  i.MXRTyyyy里作Serial Downloader模式最主要的缘由是其没有实现ISP模式,BootROM里没法提供外部Device的下载支持,而i.MXRTxxx的BootROM里既然作了ISP模式,为何还要作Serial Boot这种行为模式呢?而且Serial Boot支持的通讯接口竟多达五种,这种模式的应用场景究竟是什么?痞子衡为你解惑:it

  • 快速验证Non-XIP image的执行:Serial Boot模式能够帮助快速验证Non-XIP image的执行,不须要操做外部Device。
  • 做协处理器使用可省外部Device:若是系统设计里有两颗MCU,i.MXRTxxx做为协处理器,在Serial Boot模式下可省去存放Application的外部Device,Application直接由主处理器来加载。

1.2.3 Device Boot模式(Serial NOR/SD/eMMC/1bit Recovery SPI NOR)

  Device Boot模式就是直接从选定的外部非易失Device加载Application启动,这种模式才是i.MXRTxxx最核心的模式,毕竟离线运行Application才是最重要的任务。Device Boot又分为Master Boot(Serial NOR/SD/eMMC)和Recovery Boot(1bit SPI NOR),前者是主动启动设备,后者是备份启动设备。当主动启动设备中的Application失效时,芯片会从备份启动设备中再尝试去启动一次Application,实现双重保障。

2、Boot Device具体配置

  当Boot行为模式选定的是从某一类Boot Device启动,底下就是配置该Device具体属性了。假设咱们选择了Serial NOR FLASH,可是Serial NOR只是一类FLASH的统称,市面上有很是多的Serial NOR芯片,每一个芯片特性可能不彻底同样,那么BootROM怎么知道这些不一样的Serial NOR芯片的特性呢?仍是经过OTP memory来指定。
  OTP是i.MXRTxxx里一块特殊的存储区域,用于存放所有芯片配置信息,其中有一部分区域分配给Boot。参考手册的OTP相关章节中可见全部bit具体定义,这里痞子衡仅贴出一部分用于示例:


  从上表中咱们能够看到i.MXRT600上BOOT_CFG[1],BOOT_CFG[2]共64bit的完整定义,这些定义确实是与具体Boot Device属性相关的。
  这些Boot相关的Fuse定义,在这里逐一解释意义不大,须要结合具体Boot Device一块儿来看,痞子衡后续会在介绍每一个Boot Device启动的文章里再进一步分析。

  至此,恩智浦i.MX RTxxx系列MCU的Boot配置痞子衡便介绍完毕了,掌声在哪里~~~

相关文章
相关标签/搜索