RT600 BootROM RM解析 (1)
RT600 RM CH41:RT6xx 非安全BootROM (1)
41.1 如何阅读本章
本章适用于所有 RT6xx 器件。
41.1.1 RT6xx 上的BootROM 有什么作用
RT6xx 是一种无内部闪存的 MCU,因此在 MCU 启动前,启动镜像需要存储在外部非易失性启动介质中。读取启动镜像时,需要BootROM 支持访问外部非易失性存储。RT6xx BootROM 支持从外部非易失性存储器(如串行 NOR FLASH、SD 卡、eMMC 设备)启动。
BootROM 固定了 FlexSPI 模块(串行 NOR 闪存)/ uSDHC 模块(SD/eMMC 存储器)与 MCU 器件之间的外部存储设备引脚连接。因此,设计应用板时,必须为启动接口提供正确的引脚连接。有关引脚连接和其他细节,请参考 41.5 节 “主启动模式”。
由于 RT6xx 支持三种不同的启动设备,ROM 需要一种方式来决定从哪个设备启动。在 RT6xx ROM 中,通过 ISP 引脚(PIO1_17(ISP2)、PIO1_16(ISP1)、PIO1_15(ISP0))或 OTP 熔丝字 0x60 配置选择启动设备。
基于 ISP 引脚的启动模式 和 ISP 下载器模式的详细信息见表 995 “基于 ISP 引脚的启动模式和 ISP 下载器模式”,基于 BOOT_CFG [0] 中 PRIMARY_BOOT_SRC
位的 OTP 详细启动设备选择见表 994“基于 BOOT_CFG [0] 中 PRIMARY_BOOT_SRC 位的主启动源”。
RT6xx BootROM 支持在 ISP 模式(系统编程模式)下通过 ROM ISP 命令擦除 / 编程 / 读取外部非易失性存储器,以将启动镜像放置到外部非易失性存储器中。更多细节,请参考 41.8.16 节 “外部存储器支持”。
41.1.2 RT6xx 如何启动
RT6xx 通过BootROM 实现支持三种启动设备。
对于 FlexSPI 串行 NOR 闪存启动,有两种可能:
加载到 RAM 启动和 XIP 启动。
- 对于加载到 RAM 启动,BootROM 运行后,会根据连接到 MCU 器件的外部 NOR 闪存类型初始化 FlexSPI 模块。ROM 从 NOR 闪存设备的偏移地址
0x1000
将启动镜像加载到 MCU 内部 SRAM 中,然后跳转到 SRAM 运行启动镜像。 - 对于 XIP 启动,BootROM 仅从 NOR 闪存设备引导镜像。启动镜像内部的镜像头会告诉 ROM 该启动镜像是加载到 RAM 的镜像还是 XIP 镜像。有关启动镜像头的更多细节,请参考 表 997 “镜像头格式”。
FlexSPI 启动还支持双镜像启动。如果选择 FlexSPI 作为启动设备,默认支持根据镜像版本选择引导哪个镜像,这称为乒乓启动。
在 FlexSPI 启动期间,ROM 始终尝试引导最新版本的镜像,如果最新启动镜像引导失败,ROM 会尝试引导旧版本的镜像。如果两个镜像引导都失败,ROM 将进入 ISP 模式。
有关乒乓启动的更多细节,请参考 41.5.1.4 节 “FlexSPI 双镜像乒乓启动”。
SD/eMMC 存储设备不支持 XIP 访问,因此BootROM 仅支持加载到 RAM 启动。与 FlexSPI NOR 闪存启动一样,ROM 在上电后初始化 uSDHC 接口,将启动镜像从设备偏移地址 0x1000
复制到内部 SRAM,然后跳转到 SRAM 运行启动镜像。
有关 FlexSPI NOR 闪存和 SD/eMMC 启动的更多细节,请参考 41.3 节 “概述”。
- 当 LDO_ENABLE 外部接地为低电平时,用户必须在 VDDCORE=1.0V 或更高(低功耗 / 正常时钟模式)或 VDDCORE=1.13V(高速时钟)下启动。此后,VDDCORE 可以调整到所需电平。
- 此外,当执行任何 OTP 读 / 写功能时,无论 LDO_ENABLE 外部接地为高电平还是低电平,VDDCORE 电压必须设置为 1.0V 或更高。
- 对于 LDO_ENABLE=1,可以使用
POWER_SetLdoVoltageForFreq
API 函数在内部将片上稳压器电压配置为 VDDCORE。
41.1.2.1 启动时的时钟速度
设备启动时使用的时钟速率由 OTP 配置决定。OTP 字 BOOT_CFG [0] 的位 7 包含 BOOT_CLK_SPEED
控制位,见表 990。
表 990. 启动时钟速率
模式 | 描述 | ROM 支持的性能 [1] |
---|---|---|
低功耗 / 正常时钟(BOOT_CLK_SPEED=0) | 在此模式下,当 LDO_ENABLE 外部接高电平时,PMC 中连接到 VDDCORE 内核电压的片上稳压器设置为默认值 1.05 V。当 LDO_ENABLE 外部接低电平时,VDDCORE 必须设置为 1.0V 或更高。 内核时钟(CPU + 系统时钟): - 频率:48 MHz - 时钟源:48/60m_irc UART、I2C、SPI: - 时钟源:48/60m_irc USB: - USB IP 时钟源:来自晶体振荡器的 clk_in(24 MHz) |
- 频率:48 MHz UART:最高 1 Mbaud I2C:最高 200 kHz SPI:最高 12 Mbps USB:2 Mbytes/s |
高速时钟(OTP 熔丝决定时钟速度,BOOT_CLK_SPEED=1) | 在此模式下,当 LDO_ENABLE 接高电平时,PMC 中连接到 VDDCORE 内核电压的片上稳压器设置为默认值 1.13V 。当 LDO_ENABLE 外部接低电平时,VDDCORE 必须设置为 1.13V 。 内核时钟(CPU + 系统时钟): - 频率:198 MHz - 时钟源:main_clk(以 48/60m_irc 为 PLL 时钟源的 main_pll_clk ) USB: - USB IP 时钟源:来自晶体振荡器的 clk_in(24 MHz) FlexSPI: - 时钟源:aux0_pll_clk - 频率: - SDR:30/50/60/80/100/120/133/166/200 MHz - DDR:30/50/60/80/100/120/133/166/200 MHz eMMC/SD: - 时钟源:主时钟( main_pll_clk ) |
- USB:2 Mbytes/s FlexSPI:最高 166 MHz uSDHC0=198 MHz uSDHC1=99 MHz |
[1] 标注的速率为典型值。
41.1.3 分步启动 RT6xx 器件
本节介绍如何通过 FlexSPI、uSDHC 和 SPI 接口启动 RT6xx 器件。
41.1.3.1 FlexSPI NOR 启动的基本说明
本例将使用 FlexSPI NOR 闪存启动。如以上章节所述,用户需要准备一个可启动的镜像来启动设备。我们暂时称之为 image.bin 文件。
由于启动镜像需要放置在外部存储器中,ROM 支持将启动镜像编程到外部存储器中。要对外部存储器进行编程,用户首先需要获取 Bootloader 主机应用程序(https://www.nxp.com/webapp/sps/download/preDownload.jsp),该工具称为 blhost 工具,用于与BootROM 通信。blhost 工具用户指南也可以在上述链接中找到。
在使用该工具向BootROM 发送 ISP 命令之前,首先应将BootROM 配置为进入串行 ISP(系统编程)模式。在开发周期中,我们建议通过以下 ISP 引脚选择来使用 ISP 引脚将BootROM 选择为进入串行 ISP 模式,更多信息请参考表 995 “基于 ISP 引脚的启动模式和 ISP 下载器模式”。 表 991. 选择串行 ISP 模式
启动模式 | ISP2 PIO1_17 | ISP1 PIO1_16 | ISP0 PIO1_15 | 描述 |
---|---|---|---|---|
串行 ISP(UART、SPI、I2C、USB-HID) | 高 | 高 | 低 | 使用串行接口(UART、SPI、I2C、USB-HID)对 OTP、外部 Flash、SD 或 eMMC 设备进行编程。 |
进入 ISP 模式的步骤:首先,关闭电源;其次,将 ISP 引脚的跳线设置为下表所列状态;第三,给开发板上电。完成所有这些步骤后,BootROM 进入串行 ISP 模式。
当BootROM 处于 ISP 模式时,即可通过 blhost 工具与BootROM 进行 ISP 通信。
ROM 支持通过 UART、I2C、SPI、HID 四种接口与 blhost 工具通信。表 996 “ISP 引脚分配” 显示了这些接口的引脚分配。ROM 定义了用于命令和数据传输的通信协议。有关系统编程协议的更多细节,请参考 41.8 节 “RT6xx ISP 和 IAP”。
表 992. UART 的串行 ISP 引脚
启动接口 | 引脚 | 功能 / 注释 |
---|---|---|
UART | PIO0_1 | FC0_TXD_SCL_MISO_WS |
UART | PIO0_2 | FC0_RXD_SDA_MOSI_DATA |
在本例中,我们将使用 UART。有关其他接口的使用,请参考 blhost 工具用户指南。 在将 UART 用作通信接口之前,PC 的 COM 端口应将 TXD/RXD 引脚连接到BootROM 的 RXD/TXD 引脚。下表显示了BootROM 使用的 UART 引脚。
当引脚连接准备就绪,且BootROM 也处于 ISP 模式时,主机(blhost)与BootROM 之间的通信即可开始。在对串行 NOR 闪存设备进行编程之前,我们需要使用 blhost 工具告诉BootROM 配置 FlexSPI 接口,然后可以通过 blhost 工具向BootROM 发送其他 ISP 命令(如读 / 写 / 擦除)来访问连接在 MCU 的 FlexSPI 接口上的串行 NOR 闪存。以闪存 MX25UM51345G 为例,以下命令显示了配置、擦除和将启动镜像编程到连接到 FlexSPI 接口端口 A 的外部 NOR 闪存的步骤。
1 | blhost -p <COM XX> - fill-memory 0x1c000 0x04 0xc0403001 |
以下是 blhost 工具命令用法的一些细节:
blhost -p <COM XX> - fill-memory 0x1c000 0x04 0xc0403001
这会将闪存配置参数
填充到 SRAM 中,0x1c000 是设备上可用的 SRAM 地址,0x4 是参数长度,0xc0403001 是闪存配置参数。不同的闪存设备和不同的闪存工作模式(如四线、八线、SDR、DDR)可能有不同的配置参数。有关参数的详细信息,请参考表 1008 “Option0 定义” 和表 1009 “Option1 定义”。更多细节请参考 41.8.16 节 “外部存储器支持”。blhost -p <COM XX> - configure-memory 0x09 0x1c000
这是使用写入 RAM 地址 0x1c000 的参数来配置 FlexSPI 接口。发送此命令后,FlexSPI 完成配置,即可访问外部闪存。更多细节请参考 41.8.16 节 “外部存储器支持” 或 blhost 用户指南。blhost -p<COM X X> - flash-erase-region 0x08000000 0x10000
此命令从地址 0x08000000 开始擦除外部 NOR 闪存,擦除大小为 0x10000。blhost -p <COM XX> - fill-memory 0x1c004 0x04 0xf000000f
blhost -p <COM XX> - configure-memory 0x09 0x1c004
此步骤用于填充为外部闪存生成闪存配置块(FCB)的参数,并触发生成 FCB 并将 FCB 编程到闪存偏移地址0x400
处。FCB 用于在启动过程中配置 FlexSPI 接口。当 FlexSPI 启动开始时,ROM 首先使用默认的 1 位模式在
0x400
处设置 FCB,然后使用 FCB 配置 FlexSPI 以访问 NOR 闪存。更多细节,请参考 41.5 节 “主启动模式”。更多细节可参考 41.8.16 节 “外部存储器支持” 或 41.5.1.5.3 节 “NOR 闪存配置、擦除和编程”。blhost -p <COM XX> - write-memory 0x08001000 image.bin
此步骤用于将启动镜像编程到外部 NOR 闪存地址0x08001000
处。确保将启动镜像编程到外部闪存偏移地址0x1000
处(参考表 1000 “不同启动介质上的镜像偏移”)。由于 0x08000000 是 FlexSPI 内存映射的 AHB 地址,要将其编程到闪存设备的 0x1000 处,blhost 的编程闪存地址为 0x08001000。
FlexSPI 接口有两个端口,端口 A 和端口 B,BootROM 均支持从这两个端口启动。闪存配置参数存在一些差异。对于端口 B,闪存数据采样没有 DQS 引脚,因此我们在 SDR 模式下使用内部环回采样时钟源,这需要设置Dummy Cycle。请参考 NOR 闪存设备数据表来设置伪周期。 如果使用 DDR 模式,用户需要手动准备 FCB。ROM 不支持为 FlexSPI PORT B 的 DDR 模式自动生成 FCB。有关启用 DDR 模式的信息,请参考 41.5.1.6 节 “为连接在 PORT B 上的闪存启用八线 DDR 模式”。 对于以下所示的配置参数 0xc1503051、0x20000014 的用法,请参考 41.5.1.5.2 节 “FlexSPI NOR 闪存配置参数”。
1 | blhost -p <COM XX> - fill-memory 0x1c000 0x04 0xc1503051 |
完成所有这些步骤后,启动镜像将成功编程到外部存储器的偏移地址 0x1000 处,FlexSPI 启动 FCB 也将编程到偏移地址 0x400 处,然后即可启动设备。 ROM 支持 FlexSPI 端口 A 和端口 B 启动。关闭开发板电源,通过以下 ISP 引脚设置启动模式,然后给开发板上电,设备将引导之前编程的启动镜像。
表 993. 从 FlexSPI 端口 A 和端口 B 启动
启动模式 | ISP2 PIO1_17 | ISP1 PIO1_16 | ISP0 PIO1_15 | 描述 |
---|---|---|---|---|
从端口 A 启动 FlexSPI | 低 | 高 | 高 | 从连接到 FlexSPI 接口 0 端口 A 的四线 / 八线 SPI 闪存设备启动。RT6xx 将在外部四线 / 八线 SPI 闪存设备中查找有效镜像。如果未找到有效镜像,RT6xx 将进入恢复启动或 ISP 启动模式。 |
从端口 B 启动 FlexSPI | 低 | 高 | 低 | 从连接到 FlexSPI 接口 0 端口 B 的四线或八线 SPI 闪存设备启动。RT6xx 将在外部四线 / 八线 SPI 闪存设备中查找有效镜像。如果未找到有效镜像,RT6xx 将进入恢复启动或 ISP 启动模式。 |
41.1.3.2 SD/eMMC 启动的基本说明
对于 SD/eMMC 启动,其过程与 FlexSPI 加载到 RAM 启动基本相同。以下是启动过程的主要步骤。有关SD/eMMC 启动的更多细节,请参考 41.5 节 “主启动模式” 中关于 SD/eMMC 启动的内容。 通过 ISP 引脚将BootROM 设置为 ISP 模式。 使用以下 blhost 命令将启动镜像写入 SD 卡:
1 | blhost -p <COM XX> - fill-memory 0x1c000 0x4 0xd0082100 |
使用以下 blhost 命令将启动镜像写入 eMMC 设备:
1 | blhost -p <COM XX> – fill-memory 0x1c000 0x4 0xC0721625 |
有关 SD/eMMC 配置参数的更多细节,请参考 41.8.16 节 “外部存储器支持”。 将镜像编程到 SD/eMMC 设备后,设置引导 ISP 引脚(表 995 “基于 ISP 引脚的启动模式和 ISP 下载器模式”)以选择 SD/eMMC 引导模式,给开发板上电,设备将从 SD/eMMC 设备启动。
41.1.3.3 1 位串行 NOR SPI 启动的基本说明
对于 1 位 SPI NOR 闪存启动,其过程与 FlexSPI 加载到 RAM 启动基本相同。选择 SPI NOR 启动时,ROM 尝试从连接到 SPI 接口的 NOR 闪存设备获取启动镜像。ROM 通过 SPI 模块使用主 1 位模式访问 NOR 闪存设备,将启动镜像复制到 SRAM,然后跳转到 SRAM 引导镜像。引导操作与 41.6 节 “恢复启动模式” 相同。不同之处在于,ROM 可以通过引导配置熔丝 BOOT_CFG [0] 的位 [3:0] 设置为 b’0111’ 直接选择 SPI 1 位启动。更多细节,请参考表 994“基于 BOOT_CFG [0] 中 PRIMARY_BOOT_SRC 位的主启动源”。
将BootROM 设置为 ISP 模式,用户可以使用以下 blhost 命令将镜像编程到连接到 SPI 接口的串行 NOR 闪存存储器中:
1 | blhost -p <COM XX> - fill-memory 0x1c000 0x04 0xc010000 |
SPI 实例由熔丝字 0x60(BOOT_CFG [0] 的位 17 至位 19)选择。更多细节,请参考 41.9 节 “OTP 驱动 API”。SPI NOR 闪存配置参数 0xc010000
的定义可在 41.8.16 节 “外部存储器支持” 中找到。
将启动镜像编程到 SPI NOR 闪存存储器后,将设备启动模式设置为 SPI NOR 启动,关闭并重新给开发板上电,设备将通过 SPI 从 1 位 NOR 闪存启动。
41.2 功能
256KB 片上BootROM,带引导程序,支持各种启动选项和 API。
- 支持基于 ISP 引脚或 OTP 设置(PRIMARY_BOOT_SRC),从应用处理器通过串行接口(UART、SPI、USB-HID)启动,或从串行 NOR(四线或八线 SPI 闪存、HyperFlash)、SD 卡或 eMMC 设备自动启动。
- 支持从串行 NOR 闪存(单线、双线、四线或八线模式,
带 / 不带 OTFAD
)就地执行(XIP)。 - 提供用于 OTP 存储器编程的 OTP API,更多细节请参考 41.9 节 “OTP 驱动 API”。
- 提供访问串行闪存设备的外部闪存 API。
RT600 BootROM RM解析 (1)
https://dustofstars.github.io/NXP/RT600/BootROM/rt600-bootrom-rm解析-1/