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

来源:https://www.cnblogs.com/henjay724/archive/2019/12/05/11990219.html
-Advertisement-
Play Games

無論是什麼晶元里的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配置也主要圍繞這兩個核心功能。

一、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模式功能前,有必要先看一下各行為模式是怎麼確定的:

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:

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:

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

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支持的通信介面竟多達五種,這種模式的應用場景到底是什麼?痞子衡為你解惑:

  • 快速驗證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,實現雙重保障。

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 國內優秀的WPF開源控制項庫,Panuon.UI的優化版本。一個漂亮的、使用樣式與附加屬性的WPF UI控制項庫,值得向大家推薦使用與學習。 今天站長(Dotnet9,站長網址:https://dotnet9.com, 微信公眾號:dotnet9_com)推薦另一款開源的WPF控制項庫(PanuonUI. ...
  • 前言 上一篇文章主要介紹了ObjectPool的理論知識,再來介紹一下Microsoft.Extensions.ObjectPool是如何實現的. 核心組件 ObjectPool ObjectPool 是一個泛型抽象介面,他抽象了兩個方法Get和Return Get方法用於從對象池獲取到可用對象,如 ...
  • 註冊表位置: HKEY_CURRENT_USER/ Software/ Microsoft/ Terminal Server client/ servers/ 刪除不需要的IP地址即可。 ...
  • 視頻地址:【黑客基礎】Windows PowerShell 腳本學習 2019.12.05 學習筆記 1、$PSVersionTable :查看PowerShell的版本信息。 2、PowerShell 界面: 開始界面搜索 “PowerShell” ,點擊 “PowerShell.exe” 或者 ...
  • i.MXRTxxx Boot有三類行為模式:Serial ISP、Serial Boot、Device Boot,後兩種都是跟App啟動執行相關的行為模式,而Serial ISP模式則是相對獨立的Flash下載功能,有了Serial ISP,便可省去專用Flash編程器,今天痞子衡就來詳細聊一聊Se... ...
  • 一、Quartus II 12.1 (32-Bit)進行硬體設計 1.所需要的系統元器件組成 2.系統電路圖 二、Nios II 12.1 Software Build Tools for Eclipse進行軟體學號及流水燈設計 1.程式代碼 /* * "Hello World" example. ...
  • SSH連接樹莓派後是這樣的視窗,那麼新創建的系統肯定沒有太多軟體, 如何使用這個安裝軟體呢? 好廢話不多說,安裝軟體是通過apt-get 命令來安裝它 由於使用樹莓派的時候通常情況下都是普通用戶許可權$,但是安裝的話需要使用ROOT許可權# 因此,需要在命令前面加上sudo 來告訴操作系統安裝作為roo ...
  • 添加MySQL Yum存儲庫 從官網下載最新的mysql源 官網地址:https://dev.mysql.com/downloads/repo/yum/ 選擇並下載適用於平臺的發行包。 然後,在Linux上打開終端並輸入命令進行下載: wget https://dev.mysql.com/get/m ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...