大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RTxxx系列MCU的Boot配置。
在上一篇文章 Boot簡(jiǎn)介 里痞子衡為大家介紹了Boot基本原理以及i.MXRTxxx Boot方式簡(jiǎn)介。今天痞子衡就來(lái)重點(diǎn)聊一聊i.MXRTxxx Boot方式具體由哪些配置決定的。
無(wú)論是什么芯片里的BootROM,其最核心的功能無(wú)非兩個(gè):一、從存放Application的存儲(chǔ)器中加載執(zhí)行;二、通過(guò)支持的通信接口接收來(lái)自Host的Application數(shù)據(jù)完成更新或直接跳轉(zhuǎn)執(zhí)行,所以Boot配置也主要圍繞這兩個(gè)核心功能。
一、Boot行為模式選擇
芯片內(nèi)部OTP memory中的PRIMARY_BOOT_SRC[3:0]位和芯片外部管腳ISP[2:0]狀態(tài)共同決定了i.MXRTxxx Boot行為的最頂層配置,但是與上一篇文章里介紹的Kinetis/LPC/STM32 Boot Mode配置不同的是,i.MXRTxxx上電永遠(yuǎn)是從ROM里開(kāi)始啟動(dòng),此處的PRIMARY_BOOT_SRC[3:0]和ISP[2:0]決定的僅是BootROM程序的不同行為模式(執(zhí)行代碼分支),而Kinetis/LPC/STM32 Boot Mode側(cè)重的是決定CPU從ROM還是FLASH里啟動(dòng)。
1.1 行為模式定義
i.MXRTxxx的Boot行為模式和接口非常豐富,甚至毫不夸張地說(shuō),其Boot行為模式可以讓你眼花繚亂。在講具體Boot模式功能前,有必要先看一下各行為模式是怎么確定的:
1.1.1 PRIMARY_BOOT_SRC[3:0]值定義
PRIMARY_BOOT_SRC[3:0]是最高優(yōu)先級(jí)的行為模式定義,下表是PRIMARY_BOOT_SRC[3:0]相關(guān)值定義,可在參考手冊(cè)的Non-Secure Boot ROM章節(jié)中找到。至于PRIMARY_BOOT_SRC具體在OTP memory中的位置(暫且先透露一下吧,其位于BOOT_CFG[0]的低4bit,BOOT_CFG[0]是第97個(gè)OTP Word(fuse index=0x60)),痞子衡會(huì)在后面的文章細(xì)聊?! .MXRT600 PRIMARY_BOOT_SRC[3:0] bits:
1.1.2 ISP[2:0]管腳狀態(tài)定義
當(dāng)PRIMARY_BOOT_SRC[3:0] bits未燒寫(xiě)時(shí)(即4'b0000),ISP[2:0] pins開(kāi)始決定行為模式。ISP[2:0]管腳狀態(tài)是在BootROM里軟件采樣的,所以每一次系統(tǒng)軟復(fù)位去重新執(zhí)行BootROM時(shí),ISP[2:0]狀態(tài)都會(huì)被重新采樣?! .MXRT600 ISP[2:0] pins:
1.2 行為模式分類
不管是PRIMARY_BOOT_SRC[3:0]位還是外部管腳ISP[2:0]狀態(tài),他們決定的最終Boot行為模式是相似的,區(qū)別只是一個(gè)通過(guò)燒OTP決定(一般用于量產(chǎn)階段),另一個(gè)通過(guò)切換引腳狀態(tài)決定(一般用于研發(fā)階段)。Boot行為模式看起來(lái)非常多,但概括而言總共就三大類:
1.2.1 Serial ISP模式(UART/SPI/I2C/USB-HID)
Serial ISP模式顧名思義即串行編程模式,在這種模式下,BootROM通過(guò)指定的UART/SPI/I2C/USB-HID口來(lái)接收來(lái)自Host(恩智浦提供了上位機(jī)工具blhost.exe或者M(jìn)CUBootUtility)的Application數(shù)據(jù),并將數(shù)據(jù)下載到支持啟動(dòng)的外部Device中(Serial NOR/SD/eMMC/1bit Recovery SPI NOR),這種模式其實(shí)就是用于代替專用Flash編程器去燒錄可執(zhí)行程序文件的 。
關(guān)于Serial ISP模式具體如何應(yīng)用,痞子衡會(huì)在下一篇文章里進(jìn)一步介紹。
1.2.2 Serial Boot模式(UART/SPI/I2C/USB-HID/USB-DFU)
Serial Boot模式即串行啟動(dòng)模式,這種模式看起來(lái)與第一種Serial ISP模式有點(diǎn)相似,因?yàn)樵谕ㄐ沤涌谏鲜枪灿玫模ㄉ衔粰C(jī)工具也都是blhost.exe),除了多了個(gè)USB-DFU方式(上位機(jī)工具是開(kāi)源的dfu-util)。不過(guò)兩者最大的區(qū)別在于Application下載位置,Serial ISP是往外部非易失Device里下載,而Serial Boot是往芯片內(nèi)部SRAM里下載并立即跳轉(zhuǎn)執(zhí)行。如果你了解i.MXRTyyyy的Serial Downloader模式(詳見(jiàn) 飛思卡爾i.MX RTyyyy系列MCU啟動(dòng)那些事(2)- Boot配置(BOOT Pin/eFUSE) 第1.2.1節(jié)),你會(huì)發(fā)現(xiàn)這種模式從功能上更像i.MXRTyyyy的Serial Downloader模式?! .MXRTyyyy里做Serial Downloader模式最主要的原因是其沒(méi)有實(shí)現(xiàn)ISP模式,BootROM里無(wú)法提供外部Device的下載支持,而i.MXRTxxx的BootROM里既然做了ISP模式,為什么還要做Serial Boot這種行為模式呢?并且Serial Boot支持的通信接口竟多達(dá)五種,這種模式的應(yīng)用場(chǎng)景到底是什么?痞子衡為你解惑:
快速驗(yàn)證Non-XIP image的執(zhí)行:Serial Boot模式可以幫助快速驗(yàn)證Non-XIP image的執(zhí)行,不需要操作外部Device。
作協(xié)處理器使用可省外部Device:如果系統(tǒng)設(shè)計(jì)里有兩顆MCU,i.MXRTxxx作為協(xié)處理器,在Serial Boot模式下可省去存放Application的外部Device,Application直接由主處理器來(lái)加載。
1.2.3 Device Boot模式(Serial NOR/SD/eMMC/1bit Recovery SPI NOR)
Device Boot模式就是直接從選定的外部非易失Device加載Application啟動(dòng),這種模式才是i.MXRTxxx最核心的模式,畢竟離線運(yùn)行Application才是最重要的任務(wù)。Device Boot又分為Master Boot(Serial NOR/SD/eMMC)和Recovery Boot(1bit SPI NOR),前者是主動(dòng)啟動(dòng)設(shè)備,后者是備份啟動(dòng)設(shè)備。當(dāng)主動(dòng)啟動(dòng)設(shè)備中的Application失效時(shí),芯片會(huì)從備份啟動(dòng)設(shè)備中再嘗試去啟動(dòng)一次Application,實(shí)現(xiàn)雙重保障。
二、Boot Device具體配置
當(dāng)Boot行為模式選定的是從某一類Boot Device啟動(dòng),底下就是配置該Device具體屬性了。假設(shè)我們選擇了Serial NOR FLASH,但是Serial NOR只是一類FLASH的統(tǒng)稱,市面上有非常多的Serial NOR芯片,每個(gè)芯片特性可能不完全一樣,那么BootROM怎么知道這些不同的Serial NOR芯片的特性呢?還是通過(guò)OTP memory來(lái)指定?! ?/p>
OTP是i.MXRTxxx里一塊特殊的存儲(chǔ)區(qū)域,用于存放全部芯片配置信息,其中有一部分區(qū)域分配給Boot。參考手冊(cè)的OTP相關(guān)章節(jié)中可見(jiàn)所有bit具體定義,這里痞子衡僅貼出一部分用于示例:
從上表中我們可以看到i.MXRT600上BOOT_CFG[1],BOOT_CFG[2]共64bit的完整定義,這些定義確實(shí)是與具體Boot Device屬性相關(guān)的?! ∵@些Boot相關(guān)的Fuse定義,在這里逐一解釋意義不大,需要結(jié)合具體Boot Device一起來(lái)看,痞子衡后續(xù)會(huì)在介紹每個(gè)Boot Device啟動(dòng)的文章里再進(jìn)一步分析。
至此,恩智浦i.MX RTxxx系列MCU的Boot配置痞子衡便介紹完畢了,掌聲在哪里~~~