無論是什麼晶片裡的BootROM,其最核心的功能無非兩個:一、從存放Application的存儲器中加載執行;二、通過支援的通信接口接收來自Host的Application資料完成更新或直接跳轉執行,是以Boot配置也主要圍繞這兩個核心功能。今天痞子衡就來重點聊一聊i.MXRTxxx Boot方式具體由哪些配置決定的。
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RTxxx系列MCU的Boot配置。
在上一篇文章 Boot簡介 裡痞子衡為大家介紹了Boot基本原理以及i.MXRTxxx Boot方式簡介。今天痞子衡就來重點聊一聊i.MXRTxxx Boot方式具體由哪些配置決定的。
無論是什麼晶片裡的BootROM,其最核心的功能無非兩個:一、從存放Application的存儲器中加載執行;二、通過支援的通信接口接收來自Host的Application資料完成更新或直接跳轉執行,是以Boot配置也主要圍繞這兩個核心功能。
晶片内部OTP memory中的PRIMARY_BOOT_SRC[3:0]位和晶片外部管腳ISP[2:0]狀态共同決定了i.MXRTxxx Boot行為的最頂層配置,但是與上一篇文章裡介紹的Kinetis/LPC/STM32 Boot Mode配置不同的是,i.MXRTxxx上電永遠是從ROM裡開始啟動,此處的PRIMARY_BOOT_SRC[3:0]和ISP[2:0]決定的僅是BootROM程式的不同行為模式(執行代碼分支),而Kinetis/LPC/STM32 Boot Mode側重的是決定CPU從ROM還是FLASH裡啟動。
i.MXRTxxx的Boot行為模式和接口非常豐富,甚至毫不誇張地說,其Boot行為模式可以讓你眼花缭亂。在講具體Boot模式功能前,有必要先看一下各行為模式是怎麼确定的:
PRIMARY_BOOT_SRC[3:0]是最高優先級的行為模式定義,下表是PRIMARY_BOOT_SRC[3:0]相關值定義,可在參考手冊的Non-Secure Boot ROM章節中找到。至于PRIMARY_BOOT_SRC具體在OTP memory中的位置(暫且先透露一下吧,其位于BOOT_CFG[0]的低4bit,BOOT_CFG[0]是第97個OTP Word(fuse index=0x60)),痞子衡會在後面的文章細聊。
i.MXRT600 PRIMARY_BOOT_SRC[3:0] bits:

當PRIMARY_BOOT_SRC[3:0] bits未燒寫時(即4'b0000),ISP[2:0] pins開始決定行為模式。ISP[2:0]管腳狀态是在BootROM裡軟體采樣的,是以每一次系統軟複位去重新執行BootROM時,ISP[2:0]狀态都會被重新采樣。
i.MXRT600 ISP[2:0] pins:
不管是PRIMARY_BOOT_SRC[3:0]位還是外部管腳ISP[2:0]狀态,他們決定的最終Boot行為模式是相似的,差別隻是一個通過燒OTP決定(一般用于量産階段),另一個通過切換引腳狀态決定(一般用于研發階段)。Boot行為模式看起來非常多,但概括而言總共就三大類:
Serial ISP模式顧名思義即串行程式設計模式,在這種模式下,BootROM通過指定的UART/SPI/I2C/USB-HID口來接收來自Host(恩智浦提供了上位機工具blhost.exe或者MCUBootUtility)的Application資料,并将資料下載下傳到支援啟動的外部Device中(Serial NOR/SD/eMMC/1bit Recovery SPI NOR),這種模式其實就是用于代替專用Flash程式設計器去燒錄可執行程式檔案的 。
關于Serial ISP模式具體如何應用,痞子衡會在下一篇文章裡進一步介紹。
Serial Boot模式即串行啟動模式,這種模式看起來與第一種Serial ISP模式有點相似,因為在通信接口上是共用的(上位機工具也都是blhost.exe),除了多了個USB-DFU方式(上位機工具是開源的dfu-util)。不過兩者最大的差別在于Application下載下傳位置,Serial ISP是往外部非易失Device裡下載下傳,而Serial Boot是往晶片内部SRAM裡下載下傳并立即跳轉執行。如果你了解i.MXRTyyyy的Serial Downloader模式(詳見 飛思卡爾i.MX RTyyyy系列MCU啟動那些事(2)- Boot配置(BOOT Pin/eFUSE) 第1.2.1節),你會發現這種模式從功能上更像i.MXRTyyyy的Serial Downloader模式。
i.MXRTyyyy裡做Serial Downloader模式最主要的原因是其沒有實作ISP模式,BootROM裡無法提供外部Device的下載下傳支援,而i.MXRTxxx的BootROM裡既然做了ISP模式,為什麼還要做Serial Boot這種行為模式呢?并且Serial Boot支援的通信接口竟多達五種,這種模式的應用場景到底是什麼?痞子衡為你解惑:
快速驗證Non-XIP image的執行:Serial Boot模式可以幫助快速驗證Non-XIP image的執行,不需要操作外部Device。 作協處理器使用可省外部Device:如果系統設計裡有兩顆MCU,i.MXRTxxx作為協處理器,在Serial Boot模式下可省去存放Application的外部Device,Application直接由主處理器來加載。
Device Boot模式就是直接從標明的外部非易失Device加載Application啟動,這種模式才是i.MXRTxxx最核心的模式,畢竟離線運作Application才是最重要的任務。Device Boot又分為Master Boot(Serial NOR/SD/eMMC)和Recovery Boot(1bit SPI NOR),前者是主動啟動裝置,後者是備份啟動裝置。當主動啟動裝置中的Application失效時,晶片會從備份啟動裝置中再嘗試去啟動一次Application,實作雙重保障。
當Boot行為模式標明的是從某一類Boot Device啟動,底下就是配置該Device具體屬性了。假設我們選擇了Serial NOR FLASH,但是Serial NOR隻是一類FLASH的統稱,市面上有非常多的Serial NOR晶片,每個晶片特性可能不完全一樣,那麼BootROM怎麼知道這些不同的Serial NOR晶片的特性呢?還是通過OTP memory來指定。
OTP是i.MXRTxxx裡一塊特殊的存儲區域,用于存放全部晶片配置資訊,其中有一部分區域配置設定給Boot。參考手冊的OTP相關章節中可見所有bit具體定義,這裡痞子衡僅貼出一部分用于示例:
從上表中我們可以看到i.MXRT600上BOOT_CFG[1],BOOT_CFG[2]共64bit的完整定義,這些定義确實是與具體Boot Device屬性相關的。
這些Boot相關的Fuse定義,在這裡逐一解釋意義不大,需要結合具體Boot Device一起來看,痞子衡後續會在介紹每個Boot Device啟動的文章裡再進一步分析。
至此,恩智浦i.MX RTxxx系列MCU的Boot配置痞子衡便介紹完畢了,掌聲在哪裡~~~
文章會同時釋出到我的 部落格園首頁、CSDN首頁、微信公衆号 平台上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。