痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU啓動那些事(2)- Boot配置(ISP_Pin/OTP)


  你們好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給你們介紹的是恩智浦i.MX RTxxx系列MCU的Boot配置html

  在上一篇文章 Boot簡介 裏痞子衡爲你們介紹了Boot基本原理以及i.MXRTxxx Boot方式簡介。今天痞子衡就來重點聊一聊i.MXRTxxx Boot方式具體由哪些配置決定的。編程

  不管是什麼芯片裏的BootROM,其最核心的功能無非兩個:1、從存放Application的存儲器中加載執行;2、經過支持的通訊接口接收來自Host的Application數據完成更新或直接跳轉執行,因此Boot配置也主要圍繞這兩個核心功能。工具

1、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裏啓動。設計

1.1 行爲模式定義

  i.MXRTxxx的Boot行爲模式和接口很是豐富,甚至絕不誇張地說,其Boot行爲模式可讓你眼花繚亂。在講具體Boot模式功能前,有必要先看一下各行爲模式是怎麼肯定的:3d

1.1.1 PRIMARY_BOOT_SRC[3:0]值定義

  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:
htm

1.1.2 ISP[2:0]管腳狀態定義

  當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:
blog

1.2 行爲模式分類

  不論是PRIMARY_BOOT_SRC[3:0]位仍是外部管腳ISP[2:0]狀態,他們決定的最終Boot行爲模式是類似的,區別只是一個經過燒OTP決定(通常用於量產階段),另外一個經過切換引腳狀態決定(通常用於研發階段)。Boot行爲模式看起來很是多,但歸納而言總共就三大類:接口

1.2.1 Serial ISP模式(UART/SPI/I2C/USB-HID)

  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模式具體如何應用,痞子衡會在下一篇文章裏進一步介紹。
get

1.2.2 Serial Boot模式(UART/SPI/I2C/USB-HID/USB-DFU)

  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支持的通訊接口竟多達五種,這種模式的應用場景究竟是什麼?痞子衡爲你解惑:it

  • 快速驗證Non-XIP image的執行:Serial Boot模式能夠幫助快速驗證Non-XIP image的執行,不須要操做外部Device。
  • 做協處理器使用可省外部Device:若是系統設計裏有兩顆MCU,i.MXRTxxx做爲協處理器,在Serial Boot模式下可省去存放Application的外部Device,Application直接由主處理器來加載。

1.2.3 Device Boot模式(Serial NOR/SD/eMMC/1bit Recovery SPI NOR)

  Device Boot模式就是直接從選定的外部非易失Device加載Application啓動,這種模式纔是i.MXRTxxx最核心的模式,畢竟離線運行Application纔是最重要的任務。Device Boot又分爲Master Boot(Serial NOR/SD/eMMC)和Recovery Boot(1bit SPI NOR),前者是主動啓動設備,後者是備份啓動設備。當主動啓動設備中的Application失效時,芯片會從備份啓動設備中再嘗試去啓動一次Application,實現雙重保障。

2、Boot Device具體配置

  當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配置痞子衡便介紹完畢了,掌聲在哪裏~~~

相關文章
相關標籤/搜索