痞子衡嵌入式:若是i.MX RT是一匹悍馬,征服它時別忘了用馬鐙MCUBootUtility

--
  跨界之風吹滿地,先鋒當屬NXP;
  微控制器誰獨騷?當仁不讓看RT!git

  恩智浦半導體2017年10月正式發佈了業內首款跨界處理器—i.MX RT系列,這是MCU界的汗血寶馬,更是一匹桀驁不馴的悍馬。一年多來,衆多騎士(MCU開發者)紛紛想去征服這匹悍馬,然而想要馴服這匹悍馬沒並不是易事,除了須要騎士自身馬術(嵌入式功底)精湛,還須要善於利用恩智浦提供的一整套馬具(工具鏈軟件開發包),方可成功駕馭這匹悍馬。今天痞子衡爲你們介紹的這款工具名叫NXP-MCUBootUtility,其功能堪比馬鐙,有了馬鐙騎士能夠輕鬆上馬。github

1、i.MX RT啓動背景

  在介紹MCUBootUtility出場以前,我們先來聊聊i.MX RT的啓動背景。衆所周知,i.MX RT源自經典的i.MX6ULL平臺,同i.MX處理器同樣,i.MX RT也是flashless的芯片,其內部沒有可供用戶存儲代碼的非易失性存儲器,所以在i.MX RT系統設計裏須要爲其配置一塊非易失性存儲器(在i.MX RT世界裏,咱們更喜歡稱其爲啓動設備)。
  有了外置啓動設備,代碼存儲的問題解決了,但隨之引入了啓動問題。要想從啓動設備中訪問代碼數據,首先須要對其進行必要的配置,配置正確以後還須要從中找到正確的應用程序位置來加載啓動,那麼問題來了,誰負責幹這些事?固然是BootROM,BootROM實際上是固化在i.MX RT內部一段程序,其功能就相似於PC上的BIOS,i.MX RT上電首先運行的就是BootROM,由BootROM爲i.MX RT作好啓動的全部準備工做。
  翻看i.MX RT的BootROM章節,能夠看到BootROM核心功能歸納起來主要以下6條:編程

  • Support for booting from various boot devices
  • Serial downloader support (USB OTG and UART)
  • Device Configuration Data (DCD) and plugin
  • Digital signature and encryption based High-Assurance Boot (HAB)
  • Wake-up from the low-power modes
  • Encrypted XIP on Serial NOR via FlexSPI interface powered by BEE and DCP
    controller

  BootROM核心功能看起來有6條,其實主要是第1條,後面5條都是爲第1條服務的,various boot devices即各類各樣的啓動設備,啓動設備到底有多豐富?且看下圖:安全

NXP-MCUBootUtility_boot_device

  從上圖能夠看出i.MX RT BootROM支持的啓動設備真的很豐富,有經過FlexSPI接口支持的高速串行NOR、NAND Flash,有經過uSDHC接口支持的SD Card、eMMC,有經過SEMC接口支持的並行NOR、NAND Flash,甚至還有經過LPSPI接口支持的低速EEPROM、NOR Flash,真是應有盡有。
  啓動設備類型這麼多,是好事但也是麻煩事,BootROM爲了可以同時支持這麼多特性各異的啓動設備,必須制定一個通用規則,這個規則就是i.MX RT Boot Data Component,即放在啓動設備中的用戶Application除了自身image數據外,還必須包含額外的Boot Data以供BootROM識別,那麼Boot Data Component到底有哪些呢?繼續看下錶:less

NXP-MCUBootUtility_boot_data

  上表中IVT和Boot Data是最必不可少的Component,也是用於支持衆多特性各異的啓動設備的關鍵,IVT與Boot Data合稱Bootable header,包含Bootable header的Application即稱爲Bootable Application,啓動設備中僅當存儲的是Bootable Application纔可以被i.MX RT BootROM正確識別和啓動。工具

2、MCUBootUtility

  上一節講完了i.MX RT啓動背景,都是理論的東西,該是進入實戰環節的時候了。到底如何製做一個Bootable Application?到底怎麼將Bootable Application下載到指定類型啓動設備中?
  其實恩智浦早爲你們已經準備好一整套工具,BD file、elftosb.exe、MfgTool2.exe等,這些工具都在Flashloader包裏,下面是這些工具的聯合使用流程:加密

NXP-MCUBootUtility_tool_flow

  首先在本身喜歡的IDE裏(好比恩智浦免費提供的MCUXpresso)開發Application,開發結束以後生成可執行文件(.elf/.srec都可),將該可執行文件通過elftosb.exe轉換成.sb文件(須要兩次轉換,第一次生成Bootable Application,第二次生成.sb文件,兩次轉換須要兩個不一樣BD file),最後使用MfgTool2經過USB口將.sb文件內容下載到啓動設備裏。
  上述整個過程雖然涉及多個命令多步操做,但總算可以順利完成。若是須要進一步使能HAB簽名或者加密,那麼須要再聯合CST工具,步驟再增長一些。若是是使能BEE加密,那麼得注意選對合適的BD file,一些特殊的fuse須要燒錄正確,無論怎樣,事情總能解決。
  但這就夠了麼?你有沒有曾指望過有一個工具可以把上面這些事情所有包進去而且仍是一個優雅的GUI?別覺得這是妄想,這樣的工具早已存在了,它就叫NXP-MCUBootUtility,下圖是它的廬山真面目,清爽的界面,強大的功能,有了它,啓動i.MX RT從未如此簡單。設計

NXP-MCUBootUtility_v1.1.0

  NXP-MCUBootUtility是一個專爲恩智浦MCU安全啓動而設計的工具,其特性與MCU裏的BootROM功能相對應,目前主要支持i.MX RT系列MCU芯片,與NXP官方的標準安全啓動配套工具集(OpenSSL, CST, sdphost, blhost, elftosb, BD, MfgTool2)相比,NXP-MCUBootUtility是一個真正的一站式工具,一個工具包含NXP官方全部配套啓動工具的功能,而且是全圖形用戶界面操做。藉助於NXP-MCUBootUtility,你能夠輕鬆上手NXP MCU安全啓動。
  NXP-MCUBootUtility主要功能以下:blog

  • 支持i.MXRT全系列MCU,包含i.MXRT101五、i.MXRT102一、i.MXRT1051/105二、i.MXRT1061/106二、i.MXRT1064 SIP
  • 支持UART和USB-HID兩種串行下載方式(COM端口/USB設備自動識別)
  • 支持五種經常使用格式(elf/axf/srec/hex/bin)源image文件輸入並檢查其連接地址的合法性
  • 源image文件既能夠是裸源image文件,也能夠是含啓動文件頭的bootable image文件
  • 支持將裸源image文件自動轉換成i.MXRT能啓動的Bootable image
  • 支持下載Bootable image進主動啓動設備 - FlexSPI NOR、SEMC NAND接口Flash
  • 支持下載Bootable image進備份啓動設備 - LPSPI接口NOR/EEPROM Flash
  • 支持DCD配置功能,可用於加載image進SDRAM執行
  • 支持用於開發階段的非安全加密啓動(未簽名加密)
  • 支持基於HAB實現的安全加密啓動(單簽名,簽名和加密),證書自動備份
  • 支持基於BEE實現的安全加密啓動(惟一SNVS key,用戶自定義key)
  • 支持MCU芯片內部eFuse的回讀和燒寫操做(即專用eFuse燒寫器)
  • 支持外部啓動設備的任意讀寫擦操做(即通用Flash編程器)
  • 支持從外部啓動設備回讀Bootable image,並對其組成部分(NFCB/DBBT/FDCB/EKIB/EPRDB/IVT/Boot Data/DCD/Image/CSF/DEK KeyBlob)進行標註

  這麼好用的工具去哪裏下載?其實MCUBootUtility是一個基於Python的開源項目,其項目地址爲 https://github.com/JayHeng/NXP-MCUBootUtility, 核心代碼只有9000多行,雖然當前版本(v1.1.0)功能已經很是完備,你仍是能夠在此基礎上再添加本身想要的功能。如此神器,還不快快去下載試用?接口

相關文章
相關標籤/搜索