截止目前为止 i.MX RTxxx 系列已公布的芯片仅有一款 i.MXRT600(还有几款正在研发测试之中),所以本文的研究对象主要是 i.MXRT600,i.MXRT600 是 i.MXRTxxx 系列的开山之作,功能模块非常全面,其 BootROM 特性基本可以涵盖 i.MXRTxxx 系列特性。
一、Boot 基本原理
关于 Boot 基本原理,痞子衡在 《飞思卡尔 i.MX RTyyyy 系列 MCU 启动那些事(1)- Boot 简介》 文章里介绍得很详细,Boot 原理是个通用的概念,此处不再赘述。
二、i.MXRTxxx Boot
在第一部分里讲了 Boot 基本原理以及各种 Boot 方式,那么 i.MXRTxxx Boot 到底属于哪一种?在回答这个问题之前我们先看一下 i.MXRT600 的 system memory map:
从 memory map 里可以看到,i.MXRTxxx 支持存储类型一共有三种:一是 256KB 的 ROM(即 BootROM)、二是总容量 4.5MB 的 RAM(有两个映射起始地址 0x00000000/0x20000000)、三是分配给外部存储器接口控制器(QSPI)的 128MB 区域。看到这里你应该明白了,i.MXRTxxx Boot 方式主要是借助 BootROM 从外部存储器加载 Application 到内部 SRAM/ 原地 XIP 执行。
那么 i.MXRTxxx 到底支持从哪些外部存储器加载启动呢?翻看 i.MXRTxxx 的参考手册里的 Non-Secure Boot ROM 章节,可以看到 i.MXRT 启动支持以下 3 种外部存储器:
Serial(Multi-IO) NOR Flash via FlexSPI
SD/MMC via uSDHC
Serial(1-bit SPI) NOR via Flexcomm SPI
其中 Serial NOR Device 可以 XIP,其他 2 种 Device 无法 XIP,需要拷贝到内部 RAM 里运行。