加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

i.MXRT三位數(shù)系列Boot配置方式

2019/12/12
139
閱讀需 10 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

無(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ì)聊。
  

i.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ì)被重新采樣。
  

i.MXRT600 ISP[2:0] pins:

1.2 行為模式分類(lèi)

不管是 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)非常多,但概括而言總共就三大類(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 或者 MCUBootUtility)的 Application 數(shù)據(jù),并將數(shù)據(jù)下載到支持啟動(dòng)的外部 Device 中(Serial NOR/SD/eMMC/1bit Recovery SPI NOR),這種模式其實(shí)就是用于代替專(zhuān)用 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 模式。
  

i.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 行為模式選定的是從某一類(lèi) Boot Device 啟動(dòng),底下就是配置該 Device 具體屬性了。假設(shè)我們選擇了 Serial NOR FLASH,但是 Serial NOR 只是一類(lèi) FLASH 的統(tǒng)稱,市面上有非常多的 Serial NOR 芯片,每個(gè)芯片特性可能不完全一樣,那么 BootROM 怎么知道這些不同的 Serial NOR 芯片的特性呢?還是通過(guò) OTP memory 來(lái)指定。
  

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)一步分析。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

碩士畢業(yè)于蘇州大學(xué)電子信息學(xué)院,目前就職于恩智浦(NXP)半導(dǎo)體MCU系統(tǒng)部門(mén),擔(dān)任嵌入式系統(tǒng)應(yīng)用工程師。痞子衡會(huì)定期分享嵌入式相關(guān)文章