写在前面:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
从参考手册可以知道 i.MX RT1052引导 ROM支持以下引导设备:
这些 BOM主要用作以下功能:
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引脚):
在 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起始地址是 0x200000,大小为 96KB。
1、I - Cache 和 D - Cache
芯片功能架构框图:
从上图可以看到在 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系列的特点图:
从上图可以看到 RT1050系列是配置了 512 kB SRAM的;再看下图:
FlexRAM,译为灵活的 RAM,在 RT1052芯片中其大小为 512KB,可以把它理解成传统 MCU的内部 SRAM存储器,只是它附加了可划分功能区域的配置,分别可以把这内部 SRAM分为专用于存储指令的 ITCM,专用于存储数据的 DTCM以及通用功能的 OCRAM。
它的框图如下:
下图显示了此 FlexRAM bank的详细配置:
3、各存储器访问的速度排名
其中 ICache 和 DCache 是内核自动使用,用户无法访问的。而 ITCM、DTCM及 OCRAM是用户可根据具体地址进行访问,开发程序时应根据它们的特性加以利用。
例如,把 FlexRAM bank配置如下:
该芯片支持以下引导闪存设备(在开篇有简述,但这里再巩固一下):
外部引导设备类型的选择由 BOOT_CFG1 [7:4] eFUSE 控制:
该设备具有四种引导模式(一种保留给 NXP 使用)。 根据内部 BOOT_MODE 寄存器中存储的二进制值选择引导模式。
通过在 POR_B 的上升沿上对 BOOT_MODE0 和 BOOT_MODE1 输入进行采样来初始化 BOOT_MODE。 在对这些输入进行采样之后,它们的后续状态不会影响 BOOT_MODE 内部寄存器的内容。 内部 BOOT_MODE 寄存器的状态可以从 SRC 引导模式寄存器(SRC_SBMR2)的 BMOD [1:0] 字段中读取。 可用的引导模式为:从 Fuses 引导,通过 USB 的串行引导和内部引导。如下图:
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 的意义有点不同:
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。
在 MIMXRT1050 EVKB board 上的 Boot模式选择通过开关 SW7 设定;开关(SW7-3 和 SW7-4)用于选择 MIMXRT1050 EVKB 板上的启动模式。如下图所示:
正常启动通常选择内部启动,通过外部 BOOT_CFG GPIO 配置。下图显示了典型的启动模式和启动设备设置。
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