i.MX - RT1052 BOOT启动

写在前面:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。


目录

    • 简述
    • 内部 ROM/RAM内存映射
    • 片上存储
    • 引导设备支持
    • BOOT Mode引脚设置
    • BOOT 选择
    • 启动的相关地址
    • 其他


简述

从参考手册可以知道 i.MX RT1052引导 ROM支持以下引导设备:

i.MX - RT1052 BOOT启动_第1张图片

这些 BOM主要用作以下功能:

i.MX - RT1052 BOOT启动_第2张图片

1、Serial NOR/NAND Flash via FlexSPI

在 BOM引导设备上可以把前两个合在一起,它们都是用 FlexSPI外设接口外接,只不过一种是 NOR Flash,另一种是 NAND Flash;它们的一些介绍可以参考:https://www.cnblogs.com/henjay724/p/12375942.html

那个 EVKB板子上死贵的 HyperFlash就是 NOR Flash,所对接的接口如下(注:FLEXSPI_B_SCLK这里是 GPIO_SD_B1_04引脚):

i.MX - RT1052 BOOT启动_第3张图片

在 boad上还有一个也是 NOR Flash系列的 64M QSPI Flash,利用 FlexSPI NOR Flash - QSPI里的 6根 FLEXSPI_A_xxx信号线连接四线 QSPI Flash

2、Parallel NOR Flash via SEMC

参考:https://www.cnblogs.com/henjay724/p/9188252.html

3、RAWNAND Flash via SEMC

参考:https://www.cnblogs.com/henjay724/p/9173425.html

4、SD/MMC

这个就顾名思义了,用的是 SD card或者 eMMC

5、SPI NOR/EEPROM via LPSPI

参考:https://www.cnblogs.com/henjay724/p/9286385.html


内部 ROM/RAM内存映射

i.MX - RT1052 BOOT启动_第4张图片

从上图可以知道,ROM起始地址是 0x200000,大小为 96KB。


片上存储

1、I - Cache 和 D - Cache

芯片功能架构框图:

i.MX - RT1052 BOOT启动_第5张图片

从上图可以看到在 RT1052芯片中存在着 I - Cache 和 D - Cache各一个,其大小皆为 32KB。

  • I - Cache

    ICache,即指令缓存(Instruction Cache),内核访问该存储器有着极高的速度。它的作用是缓存要执行的指令,即内核根据代码的运行情况,预先从其它存储器(如外部 Flash,外部 SDRAM等)加载可能会被执行的代码存储至 ICache;据官方统计,ICache 指令缓存的命中率能达到98%以上,这就是为什么 i.MX RT 系列芯片代码存储在外部的 FLASH,运行速度依然这么快,而且由于 ICache的存在,程序存储在 SD卡、NAND FLASH 等不支持 XIP 的存储器也成为了可能。

  • D - Cache

    DCache,即数据缓存(Data Cache),它与 ICache的功能类似,起到缓存的作用,区别只是 ICache专用于存储指令,DCache专用于存储数据。

2、FlexRAM

先看 i.MX - RT系列的特点图:

i.MX - RT1052 BOOT启动_第6张图片

从上图可以看到 RT1050系列是配置了 512 kB SRAM的;再看下图:

i.MX - RT1052 BOOT启动_第7张图片

FlexRAM,译为灵活的 RAM,在 RT1052芯片中其大小为 512KB,可以把它理解成传统 MCU的内部 SRAM存储器,只是它附加了可划分功能区域的配置,分别可以把这内部 SRAM分为专用于存储指令的 ITCM,专用于存储数据的 DTCM以及通用功能的 OCRAM。

它的框图如下:

i.MX - RT1052 BOOT启动_第8张图片

下图显示了此 FlexRAM bank的详细配置:

i.MX - RT1052 BOOT启动_第9张图片

  • 首先是 ITCM,ITCM 是 Instruction Tightly-Coupled Memory 的缩写,译为指令紧耦合内存。所谓紧耦合是指该内存与内核连接紧密,有非常高的访问速度,而 ”指令“ 则表示该内存专用于缓存指令。对于那些我们希望有着极高执行速度的代码,我们可以要求内核上电后把相应的代码从外部 FLASH 加载至 ITCM,那么在运行时,代码的执行速度就不会因外部 FLASH 的访问速度而存在瓶颈。
  • DTCM,是 Data Tightly-Coupled Memory 的缩写,译为数据紧耦合内存,它跟 ITCM类似,有着极高的访问速度,不过它是专门用来存储程序数据的,即代码中变量的存储位置。
  • OCRAM,它是 On-chip RAM 的缩写,即片上内存,可以完全把它理解为传统 MCU 的内部 SRAM,它没有像 ITCM和 DTCM的专用限制,可用于存储指令和数据(通用目的)

3、各存储器访问的速度排名

i.MX - RT1052 BOOT启动_第10张图片

其中 ICache 和 DCache 是内核自动使用,用户无法访问的。而 ITCM、DTCM及 OCRAM是用户可根据具体地址进行访问,开发程序时应根据它们的特性加以利用。

例如,把 FlexRAM bank配置如下:

i.MX - RT1052 BOOT启动_第11张图片
i.MX - RT1052 BOOT启动_第12张图片


引导设备支持

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

  • 通过 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 控制:

i.MX - RT1052 BOOT启动_第13张图片
i.MX - RT1052 BOOT启动_第14张图片

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 的串行引导和内部引导。如下图:

i.MX - RT1052 BOOT启动_第15张图片

  • Boot From Fuses 模式 (BOOT_MODE[1:0] = 00b)

    当BOOT_MODE[1:0]寄存器为00b是,选择为从 Fuses 模式下启动。该模式和内部启动模式很相似,只是有一点不同:在此模式下,GPIO启动重载引脚会被忽略。

    Fuse 中存放了一些和 BOOT 相关的信息,可以通过 Fuse 中的有关BOOT 的配置确定从那个外部存储器 BOOT。如果配置为从 Fuses 启动,启动流(boot flow)会受 BT_FUSE_SEL eFUSE 的值控制。

    BT_FUSE_SEL eFUSE 的值确定了该模式下的行为:

    • BT_FUSE_SEL = 0:表明所有外部存储器中均没有 Application,此时 Boot From Fuses 模式等同于 Serial Downloader 模式。

    • BT_FUSE_SEL = 1:表明有外部存储器中存在有效 Application,此时 BootROM 会根据 Fuse 中其他 Boot 配置信息进一步选择指定的外部存储器(Boot Device)去 Boot。

  • Serial Downloader 模式 (BOOT_MODE[1:0] = 01b)

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

  • Internal Boot 模式 (BOOT_MODE[1:0] = 10b)

    BOOT_MODE[1:0]寄存器的值为 10b 时,选择为内部(Serial NOR /NAND、Parallel NOR /NAND、SD /eMMC等支持的所有外部非易失性存储器)启动模式。在这种模式下,处理器将继续从内部引导 ROM 执行引导代码。

    启动代码执行硬件初始化,从选择的启动设备中加载程序镜像,使用 HAB 执行镜像有效性检查,然后跳到程序镜像地址处。如果在内部启动中出项任何错误,启动代码就会跳到串行下载器。在三种模式下,安全启动都可使用 HAB。当使用内部启动模式时,启动流(boot flow)被 eFuse 配置和 GPIO 重载 Fuse 的两者结合所控制。

    Internal Boot 模式其实跟 Boot From Fuses 模式很类似,只是这个模式下 BT_FUSE_SEL 的意义有点不同:

    • BT_FUSE_SEL = 0:可以使用 GPIO 引脚而不是 eFUSE 来设置特定的引导配置参数。在下图的 Boot eFUSE 说明的 GPIO 列中,指示在此模式下可以覆盖的 Fuse。

      i.MX - RT1052 BOOT启动_第16张图片
      在这里插入图片描述

      另外,下图的 GPIO boot overrides 列表提供了 GPIO引脚的详细信息:

      i.MX - RT1052 BOOT启动_第17张图片

    • BT_FUSE_SEL = 1:所有引导选项均由引导 eFUSE 说明中描述的 eFUSE 控制。


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。

i.MX - RT1052 BOOT启动_第18张图片

在 MIMXRT1050 EVKB board 上的 Boot模式选择通过开关 SW7 设定;开关(SW7-3 和 SW7-4)用于选择 MIMXRT1050 EVKB 板上的启动模式。如下图所示:

i.MX - RT1052 BOOT启动_第19张图片

正常启动通常选择内部启动,通过外部 BOOT_CFG GPIO 配置。下图显示了典型的启动模式和启动设备设置。

i.MX - RT1052 BOOT启动_第20张图片
Boot 启动下载实例图:
i.MX - RT1052 BOOT启动_第21张图片
i.MX - RT1052 BOOT启动_第22张图片
i.MX - RT1052 BOOT启动_第23张图片


启动的相关地址

Start Address End Address Size Description
0x80000000 0xDFFFFFFF 1.5GB SEMC 外部存储器接口 (SDRAM,并行NOR Flash,PSRAM,并行NAND Flash)
0x60000000 0x7F7FFFFF 504MB FlexSPI
0x20200000 0x2027FFFF 512KB OCRAM
0x20000000 0x2007FFFF 512KB DTCM
0x00000000 0x0007FFFF 512KB ITCM

其他

除了上面引用的链接作参考外,还有以下参考链接:

https://ebf-imxrt1052-tutorial.readthedocs.io/zh/latest/doc/chapter5/chapter5.html#id5

https://www.cnblogs.com/henjay724/p/9034563.html

https://www.wpgdadatong.com/cn/blog/detail?BID=B0619

https://blog.csdn.net/likeping/article/details/101028117

https://blog.csdn.net/metersun/article/details/52022233

你可能感兴趣的:(NXP)