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

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

  无论是什么芯片里的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模式。

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

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

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

  1. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(3)- Serial ISP模式(blhost)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的Serial ISP模式. 在上一篇文章 Boot配置(ISP Pin, OTP) 里痞子衡为大家 ...

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

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

  3. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(8)- 从Serial(1-bit SPI) NOR恢复启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的1-bit SPI NOR恢复启动. 在前几篇里痞子衡介绍的Boot Device都属于主动启动的 ...

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

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

  5. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(6.1)- FlexSPI NOR连接方式大全(RT600)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT600的FlexSPI NOR启动的连接方式. 痞子衡前段时间一鼓作气写完了三篇关于i.MXRT1xxx系列Flex ...

  6. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(6.B)- FlexSPI NOR连接方式大全(RT500)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT500的FlexSPI NOR启动的连接方式. 这个i.MXRT FlexSPI NOR启动连接方式系列文章,痞子衡 ...

  7. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(7)- 从SD/eMMC启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MXRTxxx系列MCU的SD/eMMC卡启动. 关于 i.MXRT 启动设备,痞子衡之前写过很多篇文章,都是关于串并行 NO ...

  8. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(1)- KBOOT架构

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT架构. Bootloader是嵌入式MCU开发里很常见的一种专用的应用程序,在一个没有Boo ...

  9. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(9)- KBOOT特性(IntegrityCheck)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之完整性检测(Integrity Check)特性. Application完整性检测是非常 ...

随机推荐

  1. .NET如何写正确的“抽奖”——打乱数组算法

    .NET如何写正确的"抽奖"--数组乱序算法 数组乱序算法常用于抽奖等生成临时数据操作.就拿年会抽奖来说,如果你的算法有任何瑕疵,造成了任何不公平,在年会现场code review ...

  2. centos 7 防火墙firewall 与iptables 的一些常用命令

    CentOS 7的防火墙配置跟以前版本有很大区别,CentOS7这个版本的防火墙默认使用的是firewall,与之前的版本使用iptables不一样. firewall常用命令 service fir ...

  3. 关于php注释那些事

    代码注释的作用  --- 为自己,也为别人. 永远不要过于相信自己的理解力!当你思路通畅,思如泉涌,进入编程境界,你可以很流畅的实现某个功能,但这种一泻千里的流畅可能只停留在了当时的状态.当你几个月, ...

  4. (大模拟紫题) Luogu P1953 易语言

    原题链接:P1953 易语言 (我最近怎么总在做大模拟大搜索题) 分别处理两种情况. 如果只有一个1或0 直接设一个cnt为这个值,每次输入一个新名字之后把数字替换成cnt,最后cnt++即可. 注意 ...

  5. CSPS模拟 94

    以后干脆不要在准备提交的代码里放调试信息. 再也不忘删printf可是memset还是看不见... T1 玄学错误,不想研究.skyh帮我研究出来了.HACKDATA:1 1 T2 傻逼做法. 发现一 ...

  6. GitHub_Hexo_Next 搭建博客

    利用最新版本的 hexo+next 重构了个人博客,下面简单记录了搭建博客的完整过程: 一.环境准备 1.安装 Node.js 2.安装 Git 3.注册 Github 账号 二.在GitHub上创建 ...

  7. P3106 [USACO14OPEN]GPS的决斗(最短路)

    化简:够简的了.....但是!翻译绝对有锅. 这个最短路是从n到每个点的单源最短路,也就是最短路径树. 那么,思路就很明确了.建两个图,然后跑两边SPFA,记录下最短路径. 然后,对于两点之间的边,如 ...

  8. P3521 [POI2011]ROT-Tree Rotations(线段树合并)

    一句话题意(不用我改了.....):给一棵n(1≤n≤200000个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. ......这题输入很神烦呐... 给你一棵二叉树的dfs序 ...

  9. 零基础Linux入门之《Linux就该这么学》

    本书是由全国多名红帽架构师(RHCA)基于最新Linux系统共同编写的高质量Linux技术自学教程,极其适合用于Linux技术入门教程或讲课辅助教材,目前是国内最值得去读的Linux教材,也是最有价值 ...

  10. 一个帮助理清思路的神奇工具--debug

    今天在回顾复习之前的知识的时候,对嵌套循环犯了迷糊,于是我使用了debug这个方法,不仅让我弄清楚嵌套循环输出结果是如何得来,也让我明白了具体流程. 在这里,IDE我使用的是PyCharm,自然用它自 ...