截止目前為止 i.MX RTxxx 系列已公布的芯片僅有一款 i.MXRT600(還有幾款正在研發(fā)測試之中),所以本文的研究對象主要是 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)、二是總?cè)萘?4.5MB 的 RAM(有兩個映射起始地址 0x00000000/0x20000000)、三是分配給外部存儲器接口控制器(QSPI)的 128MB 區(qū)域??吹竭@里你應該明白了,i.MXRTxxx Boot 方式主要是借助 BootROM 從外部存儲器加載 Application 到內(nèi)部 SRAM/ 原地 XIP 執(zhí)行。
那么 i.MXRTxxx 到底支持從哪些外部存儲器加載啟動呢?翻看 i.MXRTxxx 的參考手冊里的 Non-Secure Boot ROM 章節(jié),可以看到 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,需要拷貝到內(nèi)部 RAM 里運行。