IMXRT 的Boot模式


IMXRT 的Boot模式

原文链接:https://blog.csdn.net/weixin_42378319/article/details/104278245

本篇文章参考NXP技术博客整理总结,为个人学习笔记,如有错误欢迎在评论区指正,谢谢。

NXP的IMXRT系列单片机,血统来自i.mx处理器系列,除RT1064外,均没有内置flash,因此启动的boot配置相比一般单片机来说稍微复杂。

IMXRT内部有96KB的ROM,用于存储官方的BOOTROM(这部分是出厂固化好的,用户无法操作),单片机上电后,会执行官方的BOOTROM程序,官方BOOTROM程序中支持串口、USB下载程序、从指定存储器中运行程序等功能。那么单片机的BOOTROM如何判断用户想要使用哪种功能呢?

BOOTROM通过芯片内部的寄存器SRC->SBMR2[25:24]来确定程序分支。而寄存器SRC->SBMR2[25:24]来自POR_B pin上沿时被自动采样的BOOT_MODE[1:0] pin状态。(注意:如果改变了BOOT_MODE[1:0] pins的输入状态而使用RESET_B pin去软复位,Boot行为并不会改变,因为SRC->SBMR2[25:24]值并未改变)。

下表是BOOT_MODE相关pinout信息,可在参考手册的External Signals and Pin Multiplexing章节中找到。
在这里插入图片描述
关于这四种模式分别的作用,引用NXP的技术痞子衡的博文

  • Serial Downloader模式(UART/USB-HID)

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

  • Boot From Fuses模式

Boot From Fuses模式从名字来看其实会让人误解,这个模式并不是从Fuse里加载Application启动的意思,而是根据Fuse里的一些Boot配置值来决定从哪个外部存储器Boot。Fuse是i.MXRT1xxx里一块特殊的存储区域,用于存放全部芯片配置信息,其中有一部分配置信息和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。

  • Internal Boot模式(Serial NOR/NAND、Parallel NOR/NAND、SD/eMMC、1bit
    Recovery SPI NOR)

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模式后,如果我们boot模式选择从外部存储器中启动(IMXRT没有用户可用的内部ROM,只可以从内部RAM启动或者外部存储器启动)那么外部存储器用哪种外部存储器呢?我们可以通过更改BOOT_CFG[x:0] pins输入状态来选择外部存储器,这部分BOOT_CFG配置在Fuse里也同样存在,但是使用BOOT_CFG[x:0]来更改Boot配置更加灵活,因为Fuse是OTP,只可以烧录一次。(也可以认为BOOT_CFG[x:0]主要用于产品开发过程中,待产品开发结束后,应直接用Fuse来锁定Boot配置)。

IMXRT支持的外部存储器表

在这里插入图片描述
下表是BOOT_CFG相关pinout信息,可在参考手册的External Signals and Pin Multiplexing章节中找到。

i.MXRT117x pinout:

在这里插入图片描述

i.MXRT105x / i.MXRT106x / i.MXRT1064 pinout:

在这里插入图片描述

i.MXRT102x device selection:

在这里插入图片描述

i.MXRT1015 device selection:

在这里插入图片描述
确定完外部存储区类型后,我们要配置外部存储器属性,假设我们选择了Serial NOR FLASH,但是Serial NOR只是一类FLASH的统称,市面上有非常多的Serial NOR芯片,每个芯片特性可能不完全一样,那么BootROM怎么知道这些不同的Serial NOR芯片的特性呢?还是通过BOOT_CFG[x:0] pin和Fuse来指定。

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的意义是不一样的,这里不再具体介绍,有需要请自行参考参考手册的Fusemap章节中可见所有bit具体定义。

参考博客 https://www.cnblogs.com/henjay724/


i.MX - RT1052 BOOT启动


https://blog.csdn.net/qq_42992084/article/details/107965928

引导设备支持

该芯片支持以下引导闪存设备(在开篇有简述,但这里再巩固一下):

  • 通过 FlexSPI接口的串行 NOR闪存
  • 通过 FlexSPI接口的串行 NAND闪存
  • 带有智能外部存储器控制器(SEMC)的并行 NOR闪存,位于 16位总线宽度的 CS0上。
  • 具有 SEMC接口的 NAND闪存,位于 CS0上,总线宽度为 8位/ 16位。
  • 通过 uSDHC接口的 SD / MMC / eSD / SDXC / eMMC4.4,支持大容量卡
  • 通过 LPSPI进行串行 NOR / EEPROM引导
  • 外部引导设备类型的选择由 BOOT_CFG1 [7:4] eFUSE 控制:

在这里插入图片描述
在这里插入图片描述

BOOT Mode引脚设置

该设备具有四种引导模式(一种保留给 NXP 使用)。 根据内部 BOOT_MODE 寄存器中存储的二进制值选择引导模式。
 通过在 POR_B 的上升沿上对 BOOT_MODE0 和 BOOT_MODE1 输入进行采样来初始化 BOOT_MODE。 在对这些输入进行采样之后,它们的后续状态不会影响 BOOT_MODE 内部寄存器的内容。 内部 BOOT_MODE 寄存器的状态可以从 SRC 引导模式寄存器(SRC_SBMR2)的 BMOD [1:0] 字段中读取。 可用的引导模式为:从 Fuses 引导,通过 USB 的串行引导和内部引导。如下图:
在这里插入图片描述
另外,下图的 GPIO boot overrides 列表提供了 GPIO引脚的详细信息:
在这里插入图片描述

BOOT 选择

i.MX RT 系列 MCU 的 Flash,除了 i.MX RT 1064 具备内部的 NOR Flash,其他型号都没有内部 Flash,这也就意味着需要外扩 Flash 才可以存储 Application,根据外扩的 Flash 类 型不同,分为 NOR Flash 以及非 NOR Flash,NOR Flash 可以 XIP,非 NOR Flash 不可 XIP。
在这里插入图片描述

启动的相关地址

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值