大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT118x系列MCU的Boot配置。
痞子衡旧文 《RT四位数Boot简介》 里为大家介绍了 Boot 基本原理以及 i.MXRT1xxx Boot 方式,此外也有文章 《RT1xxx Boot配置》 介绍了 i.MXRT10xx/RT1170 Boot 的行为配置,鉴于 RT1180 系列在 Boot 配置上区别于以往,因此今天痞子衡就来专门聊一聊 i.MXRT118x Boot 行为配置的设计差异。
无论是什么芯片里的 BootROM,其最核心的功能无非两个:一、从存放 Application 的存储器中加载执行;二、通过支持的通信接口接收来自 Host 的 Application 数据完成更新,所以 Boot 配置也主要围绕这两个核心功能。
一、Boot行为模式选择
如果你读过痞子衡旧文 《RT三位数Boot配置》,你会发现其实 RT1180 在 Boot 配置设计上更偏向于 RT 三位数系列(相对精简),但是在涉及到的名词术语上还是尽量与 RT 四位数保持了一致。
RT1180 内部 eFuse memory 中的 FORCE_BT_FROM_FUSE 位和芯片外部管脚 BOOT_MODE[2:0] 状态共同决定了 i.MXRT118x Boot 行为的最顶层配置。
1.1 行为模式定义
1.1.1 FORCE_BT_FROM_FUSE等值定义
FORCE_BT_FROM_FUSE 是最高优先级的行为模式定义,其与 BOOT_MODE_FROM_FUSE[2:0] 位是一个组合。当 FORCE_BT_FROM_FUSE 被烧写为 1'b1 时,此时芯片 Boot 行为完全由 BOOT_MODE_FROM_FUSE[2:0] 配置值决定。
1.1.2 BOOT_MODE[2:0]管脚状态定义
当 FORCE_BT_FROM_FUSE bit 未烧写时(即1'b0),BOOT_MODE[2:0] 引脚开始决定行为模式。下表是 BOOT_MODE 相关 pinout 信息,可在参考手册的 External Signals and Pin Multiplexing 章节中找到。
BOOT_MODE[2:0] pin 状态是在 POR_B pin 上沿时被自动采样存储在芯片内部的寄存器 SRC->SBMR2[29:24] 中的,这些 bit 也叫 IPP_BOOT_MODE[5:0],BootROM 其实是根据 IPP_BOOT_MODE 的值来决定 Boot 行为的。
- Note: 如果改变了 BOOT_MODE[2:0] 引脚的输入状态而使用 ONOFF pin(RESET_B)去软复位,Boot 行为并不会改变,因为 IPP_BOOT_MODE 值并未改变)。
当 BOOT_MODE[2:0] 被设置成 3'b000 时即所谓 Boot From Fuses 模式,其有效性还受 BT_FUSE_SEL 位二级控制(默认 1'b0 则仍然是 Serial Downloader 模式,烧写成 1'b1 时才根据 BOOT_MODE_FROM_FUSE[2:0] 决定行为),当然痞子衡认为这里完全多此一举,纯粹是为了与 RT 四位数早期型号里 BootROM 相应代码逻辑作兼容。
1.2 行为模式分类
不管是 FORCE_BT_FROM_FUSE 位还是外部管脚 BOOT_MODE[2:0] 状态,他们决定的最终 Boot 行为模式是相似的,区别只是一个通过烧 eFuse 决定(一般用于量产阶段),另一个通过切换引脚状态决定(一般用于研发阶段)。Boot 行为模式看起来非常多,但概括而言总共就两大类:
1.2.1 Serial Downloader模式(UART/SPI/USB-HID)
Serial Downloader 模式顾名思义即串行下载模式,在这种模式下,BootROM 通过指定的 USB/UART/SPI 口来接收来自 Host(恩智浦提供了上位机工具 blhost.exe 或者 mfgtool 或者 MCUBootUtility)的 Application 数据,并将数据存储在 SRAM 中执行。
- Note: SPI 方式 SDP 虽然很早就被 RT 三位数系列 BootROM 支持,但是在 RT 四位数上首次支持是 RT1180。
这种模式其实就是从 SRAM 启动,但是如果用这种模式去 Boot Application 缺点很明显,每次上电都需要将 Application 重新下载进 SRAM,无法做到脱机自动 Boot,所以显然这种模式的主要目的并不是从 SRAM 启动 Application,那它到底有什么用?
其实 Serial Downloader 模式主要是用来从 SRAM 中启动 Flashloader,恩智浦官方提供了 Flashloader 程序,Flashloader 程序可以用来将你的 Application 下载进 i.MXRT118x 支持的所有外部非易失性存储器中,为后续从外部存储器启动做准备。除此以外 Serial Downloader 模式还可以用来查看 eFuse 值。
1.2.2 Device Boot模式(Serial NOR/Serial NAND/Raw NAND/SD/eMMC/Recovery LPSPI NOR)
Device Boot 模式就是直接从选定的外部非易失 Device 加载 Application 启动,这种模式才是 i.MXRT118x 最核心的模式,毕竟离线运行 Application 才是最重要的任务。Device Boot 又分为 Primary Boot(Serial NOR/Serial NAND/Raw NAND/SD/eMMC)和 Recovery Boot(LPSPI NOR),前者是主动启动设备,后者是备份启动设备。当主动启动设备中的 Application 失效时,芯片会从备份启动设备中再尝试去启动一次 Application,实现双重保障。
- Note: Recovery LPSPI NOR 启动在 RT 四位数早期型号上虽然也被支持,不过仅支持 1bit 模式,而在 RT1180 上可以同时支持 1/2/4bits 模式。
二、Boot Device具体配置
当 Boot 行为模式选定的是从某一类 Boot Device 启动,底下就是配置该 Device 具体属性了。假设我们选择了Serial NOR FLASH,但是 Serial NOR 只是一类 FLASH 的统称,市面上有非常多的 Serial NOR 芯片,每个芯片特性可能不完全一样,那么 BootROM 怎么知道这些不同的 Serial NOR 芯片的特性呢?还是通过 eFuse memory 来指定。
eFuse 是 i.MXRT118x 里一块特殊的存储区域,用于存放全部芯片配置信息,其中有一部分区域分配给 Boot。参考手册的 eFuse 相关章节中可见所有 bit 具体定义,这里痞子衡仅贴出一部分用于示例:
- Note: 在 RT 四位数早期型号 eFuse 里关于 Device 具体属性定义区域存在复用情况,而在 RT1180 上每一类 Device 都独享一片区域。
至此,恩智浦i.MX RT118x系列MCU的Boot配置痞子衡便介绍完毕了,掌声在哪里~~~
欢迎订阅
文章会同时发布到我的 博客园、CSDN、微信公众号、知乎、与非网、电子技术应用AET、电子星球、51CTO 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。