痞子衡嵌入式:如果i.MX RT是一匹悍馬,征服它時別忘了用馬鐙MCUBootUtility
--
跨界之風吹滿地,先鋒當屬NXP;
微控制器誰獨騷?當仁不讓看RT!
恩智浦半導體2017年10月正式發布了業內首款跨界處理器—i.MX RT系列,這是MCU界的汗血寶馬,更是一匹桀驁不馴的悍馬。一年多來,眾多騎士(MCU開發者)紛紛想去征服這匹悍馬,然而想要馴服這匹悍馬沒并非易事,除了需要騎士自身馬術(嵌入式功底)精湛,還需要善于利用恩智浦提供的一整套馬具(工具鏈軟件開發包),方可成功駕馭這匹悍馬。今天痞子衡為大家介紹的這款工具名叫NXP-MCUBootUtility,其功能堪比馬鐙,有了馬鐙騎士可以輕松上馬。
一、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即各種各樣的啟動設備,啟動設備到底有多豐富?且看下圖:
從上圖可以看出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到底有哪些呢?繼續看下表:
上表中IVT和Boot Data是最必不可少的Component,也是用于支持眾多特性各異的啟動設備的關鍵,IVT與Boot Data合稱Bootable header,包含Bootable header的Application即稱為Bootable Application,啟動設備中僅當存儲的是Bootable Application才能夠被i.MX RT BootROM正確識別和啟動。
二、MCUBootUtility
上一節講完了i.MX RT啟動背景,都是理論的東西,該是進入實戰環節的時候了。到底如何制作一個Bootable Application?到底怎么將Bootable Application下載到指定類型啟動設備中?
其實恩智浦早為大家已經準備好一整套工具,BD file、elftosb.exe、MfgTool2.exe等,這些工具都在Flashloader包里,下面是這些工具的聯合使用流程:
首先在自己喜歡的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是一個專為恩智浦MCU安全啟動而設計的工具,其特性與MCU里的BootROM功能相對應,目前主要支持i.MX RT系列MCU芯片,與NXP官方的標準安全啟動配套工具集(OpenSSL, CST, sdphost, blhost, elftosb, BD, MfgTool2)相比,NXP-MCUBootUtility是一個真正的一站式工具,一個工具包含NXP官方所有配套啟動工具的功能,并且是全圖形用戶界面操作。借助于NXP-MCUBootUtility,你可以輕松上手NXP MCU安全啟動。
NXP-MCUBootUtility主要功能如下:
- 支持i.MXRT全系列MCU,包含i.MXRT1015、i.MXRT1021、i.MXRT1051/1052、i.MXRT1061/1062、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)功能已經非常完備,你還是可以在此基礎上再添加自己想要的功能。如此神器,還不快快去下載試用?
最后歡迎關注痞子衡個人微信公眾號【痞子衡嵌入式】,一個專注嵌入式技術的公眾號,跟著痞子衡一起玩轉嵌入式。
衡杰(痞子衡),目前就職于恩智浦(NXP)半導體MCU系統應用部門,擔任高級嵌入式系統應用工程師。
專欄內所有文章的轉載請注明出處:http://www.rzrgm.cn/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 hengjie1989@foxmail.com
可以關注痞子衡的Github主頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在博客下面留言,痞子衡會及時回復免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。
浙公網安備 33010602011771號