加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

i.MXRT三位数系列Boot配置方式

2019/12/12
136
阅读需 10 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

无论是什么芯片里的 BootROM,其最核心的功能无非两个:一、从存放 Application 的存储器中加载执行;二、通过支持的通信接口接收来自 Host 的 Application 数据完成更新或直接跳转执行,所以 Boot 配置也主要围绕这两个核心功能。

一、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 模式功能前,有必要先看一下各行为模式是怎么确定的:

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:

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:

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 模式具体如何应用,痞子衡会在下一篇文章里进一步介绍。

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 支持的通信接口竟多达五种,这种模式的应用场景到底是什么?痞子衡为你解惑:

快速验证 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,实现双重保障。

二、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 启动的文章里再进一步分析。

相关推荐

电子产业图谱

硕士毕业于苏州大学电子信息学院,目前就职于恩智浦(NXP)半导体MCU系统部门,担任嵌入式系统应用工程师。痞子衡会定期分享嵌入式相关文章