大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Boot配置

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

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

一、Boot行为模式选择

  BOOT_MODE[1:0] pin是决定i.MXRT Boot行为的最顶层配置,但是与上一篇文章里介绍的Kinetis/LPC/STM32 Boot Mode配置不同的是,i.MXRT上电永远是从ROM里开始启动,此处的BOOT_MODE[1:0]决定的仅是BootROM程序的不同行为模式(执行代码分支),而Kinetis/LPC/STM32 Boot Mode侧重的是决定CPU从ROM还是FLASH里启动。

1.1 BOOT_MODE[1:0] Pinout

  下表是BOOT_MODE相关pinout信息,可在参考手册的External Signals and Pin Multiplexing章节中找到。
  i.MXRT105x / i.MXRT106x pinout:

  i.MXRT102x pinout:


1.2 BMOD[1:0]三种模式

  BOOT_MODE[1:0] pin状态是在POR_B pin上沿时被自动采样存储在芯片内部的寄存器SRC->SBMR2[25:24]中的,这两个bit也叫BMOD[1:0],BootROM其实是根据BMOD[1:0]的值来决定Boot行为的。(注意:如果改变了BOOT_MODE[1:0] pins的输入状态而使用ONOFF pin(RESET_B)去软复位,Boot行为并不会改变,因为BMOD[1:0]值并未改变)。

  从上述Boot MODE pin settings表中我们可以知道,除了BMOD[1:0]=2'b11这种情况是reserved之外,其余三种情况对应三种Boot行为,痞子衡为大家逐一分析,先从最简单的行为模式(Serial Downloader)说起。

1.2.1 Serial Downloader模式

  Serial Downloader模式顾名思义即串行下载模式,在这种模式下,BootROM通过指定的USB或者UART口来接收来自Host(恩智浦提供了上位机工具sdphost.exe或者mfgtool)的Application数据,并将数据存储在SRAM中执行,这种模式其实就是从SRAM启动,但是如果用这种模式去Boot Application缺点很明显,每次上电都需要将Application重新下载进SRAM,无法做到脱机自动Boot,所以显然这种模式的主要目的并不是从SRAM启动Application,那它到底有什么用?
  其实Serial Downloader模式主要是用来从SRAM中启动Flashloader,恩智浦官方提供了Flashloader程序,Flashloader程序可以用来将你的Application下载进i.MXRT支持的所有外部非易失性存储器中,为后续从外部存储器启动做准备。除此以外Serial Downloader模式还可以用来查看Fuse值。
  关于Serial Downloader模式以及Flashloader具体如何应用,痞子衡会在下一篇文章里进一步介绍。

1.2.2 Boot From Fuses模式

  Boot From Fuses模式从名字来看其实会让人误解,这个模式并不是从Fuse里加载Application启动的意思,而是根据Fuse里的一些Boot配置值来决定从哪个外部存储器Boot。Fuse是i.MXRT里一块特殊的存储区域,用于存放全部芯片配置信息,其中有一部分配置信息和Boot相关。
  在参考手册Fusemap这一章节,可以看到完整的Fuse Map表,其中偏移0x460处的32bit配置数据的bit4是BT_FUSE_SEL,这个bit至关重要,决定了Boot From Fuses模式的主要行为,具体表现如下:

  • BT_FUSE_SEL=0:表明所有外部存储器中均没有Application,此时Boot From Fuses模式等同于Serial Downloader模式。
  • BT_FUSE_SEL=1:表明有外部存储器中存在有效Application,此时BootROM会根据Fuse中其他Boot配置信息进一步选择指定的外部存储器(Boot Device)去Boot。

  关于Fuse中其他Boot配置信息,文章后面痞子衡会继续讲。

1.2.3 Internal Boot模式

  Internal Boot模式其实跟Boot From Fuses模式(BT_FUSE_SEL=1时)很类似,只是这个模式下BT_FUSE_SEL的意义有点不同,具体表现如下:

  • BT_FUSE_SEL=0:BootROM根据BOOT_CFG[x:0] pins和Fuse中Boot配置综合决定Boot Device,其中BOOT_CFG[x:0] pins的配置会覆盖Fuse中意义相同的Boot配置信息。
  • BT_FUSE_SEL=1:BootROM完全根据Fuse中Boot配置信息选择指定的Boot Device去Boot。

  我们可以通过更改BOOT_CFG[x:0] pins输入状态来切换Boot配置,这部分Boot配置在Fuse里也同样存在,但是使用BOOT_CFG[x:0]来更改Boot配置显然比烧写Fuse更方便快捷(也可以认为BOOT_CFG[x:0]主要用于产品开发过程中,待产品开发结束后,应直接用Fuse来锁定Boot配置)。关于BOOT_CFG[x:0] pin具体提供哪些Boot配置,文章后面痞子衡会继续讲。

二、Boot Device类型选择

  前面痞子衡讲了,无论是Boot From Fuses模式还是Internal Boot模式,最终目的都是为了选择合适的Boot Device加载启动,那么Boot Device到底如何确定?主要取决于BOOT_CFG[x:0] pin以及Fuse里的BOOT_CFG1位。
  BOOT_CFG[x:0] pin(在RT105x/RT106x上是12bit,在RT102x上是10bit)跟Boot Device选择相关的是BOOT_CFG[7:4]这4个bit,对应Fuse里是偏移0x450处32bit配置数据里的bit4-7(也叫BOOT_CFG1[7:4]),本小节主要介绍的是BOOT_CFG1[7:4]。

2.1 BOOT_CFG[x:0] Pinout

  下表是BOOT_CFG相关pinout信息,可在参考手册的External Signals and Pin Multiplexing章节中找到。
  i.MXRT105x / i.MXRT106x pinout:

  i.MXRT102x pinout:


2.2 BOOT_CFG1[7:4]六种Device

  BOOT_CFG1[7:4]用于选择具体Boot Device,无论是RT105x/RT106x还是RT102x,它们支持的外部存储器种类是一样的,但是这里的具体配置值两个芯片上稍稍有些区别(主要是SD和SEMC NAND不一样)。
  下表是BOOT_CFG1[7:4]具体配置值信息,可在参考手册的Fusemap章节中找到。
  i.MXRT105x / i.MXRT106x device selection:

  i.MXRT102x device selection:

三、Boot Device具体配置

  当Boot Device已经确定之后,底下就是配置该Device具体属性了。假设我们选择了Serial NOR FLASH,但是Serial NOR只是一类FLASH的统称,市面上有非常多的Serial NOR芯片,每个芯片特性可能不完全一样,那么BootROM怎么知道这些不同的Serial NOR芯片的特性呢?还是通过BOOT_CFG[x:0] pin和Fuse来指定。

3.1 BOOT_CFG[x:0]

  BOOT_CFG[x:0] pin其实是跟Fuse里是偏移0x450处32bit配置数据里的bit0-x是对应的。

  • BOOT_CFG[7:0] pin对应的是Fuse BOOT_CFG1[7:0]
  • BOOT_CFG[x:8] pin对应的是Fuse BOOT_CFG2[x-8:0]

  前面讲过BOOT_CFG1[7:4]是用来确定Boot Device类型的,其余bit就是用来配置当前选择的Boot Device的具体信息,因此不同的Boot Device,这些bit的意义是不一样的。具体在Fuse里统一介绍。

3.2 eFUSE map

  前面讲过,Fuse是i.MXRT里一块特殊的存储区域,用于存放全部芯片配置信息,其中有一部分区域分配给Boot。参考手册的Fusemap章节中可见所有bit具体定义,这里痞子衡仅贴出一部分用于示例:

  从上表中我们可以看到i.MXRT105x上BOOT_CFG1,BOOT_CFG2共16bit的完整定义,除了BOOT_CFG1[7:4]前面已经介绍过之外,从其余bit的定义来看,确实是与具体Boot Device属性相关的。
  这些Boot相关的Fuse定义,在这里逐一解释意义不大,需要结合具体Boot Device一起来看,痞子衡后续会在介绍每个Boot Device启动的文章里再进一步分析。

  至此,飞思卡尔i.MX RT系列MCU的Boot配置痞子衡便介绍完毕了,掌声在哪里~~~

痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(2)- Boot配置(BOOT Pin/eFUSE)的更多相关文章

  1. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(1)- Boot简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的BootROM功能简介. 截止目前为止i.MX RTxxx系列已公布的芯片仅有一款i.MXRT60 ...

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

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的Boot配置. 在上一篇文章 Boot简介 里痞子衡为大家介绍了Boot基本原理以及i.MXRTx ...

  3. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(1)- Boot简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的BootROM功能简介. 截止目前为止i.MX RT系列已公布的芯片有三款i.MXRT105x, i. ...

  4. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(5)- 再聊eFUSE及其烧写方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的eFUSE. 在i.MXRT启动系列第二篇文章 Boot配置(BOOT Pin, eFUSE) 里痞子 ...

  5. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(4)- OTP及其烧写方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的OTP. 在i.MXRTxxx启动系列第二篇文章 Boot配置(ISP Pin, OTP) 里痞子 ...

  6. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU启动那些事(1)- Boot简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的BootROM功能简介. 截止目前为止i.MX RTyyyy系列已公布的芯片有三款i.MXRT ...

  7. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU启动那些事(2)- Boot配置(BOOT Pin/eFUSE)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的Boot配置. 在上一篇文章 Boot简介 里痞子衡为大家介绍了Boot基本原理以及i.MXR ...

  8. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(13.A)- LPSPI NOR启动时间(RT1170)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 1bit SPI NOR恢复启动时间. 本篇是i.MXRT1170启动时间评测第三弹了,前两篇分别给大家评 ...

  9. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(3)- Serial Downloader模式(sdphost/MfgTool)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial Downloader模式. 在上一篇文章 Boot配置(BOOT Pin, eFUSE) ...

随机推荐

  1. 解析时间parse time

    下面是一个解析时间的一个类 <?php /** * @purpose : 解析时间 * author: 袋鼠 * date: 2019/3/1 * time: 19:43 */ class Pa ...

  2. AES加密算法详解

    AES 是一个对称密码分组算法,分组长度为128bit,密钥长度为128.192 和 256 bit. 整个加密过程如下图所示. 1.密钥生成算法 密钥扩展过程: 1)  将种子密钥按下图所示的格式排 ...

  3. Firefox 的兼容问题

    Firefox (火狐) 坑 一, css 文本溢出省略号 单行 :  overflow:hidden; text-overflow:ellipsis; white-space:nowrap 多行 : ...

  4. [LeetCode] Smallest Subtree with all the Deepest Nodes 包含最深结点的最小子树

    Given a binary tree rooted at root, the depth of each node is the shortest distance to the root. A n ...

  5. Java后期拓展(一)之Redis

    1.NoSQL数据库简介 2.Redis的介绍及安装启动 3.Redis的五大数据类型 4.Redis的相关配置 5.Redis的Java客户端Jedis 6.Redis的事务 7.Redis的持久化 ...

  6. Web发展史

    Web 万维网常称为WWW(World Wide Web)发展至今仅30年,英国计算机科学家,蒂姆 伯纳斯 李爵士 提出了 World Wide Web的设计方案,1990年李爵士完成了Web 所有的 ...

  7. Where is the Marble? (寻找大理石上的数字)

    (先上题目) (题目描述)Raju and Meena love to play with Marbles. They have got a lot of marbles with numbers w ...

  8. 3-1.Hadoop单机模式安装

    Hadoop单机模式安装 一.实验介绍 1.1 实验内容 hadoop三种安装模式介绍 hadoop单机模式安装 测试安装 1.2 实验知识点 下载解压/环境变量配置 Linux/shell 测试Wo ...

  9. Android程序员必知必会的网络通信传输层协议——UDP和TCP

    1.点评 互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯技术这一块)的开发者来说,网络编程是基础中的基础,只有更好地理解相关基础知识,对于应用层的开发才能做到游刃有余. 对于Android ...

  10. PHP零基础入门

    字符函数库: 函数库基础 安装字符串函数库 字符串函数库列表 函数是可以实现特定功能,可以重复执行的代码段. 函数分 内置函数 和 用户函数. 内置函数是指PHP本身提供的各类库函数. 字符串函数库, ...