--
恩智浦半導體從2017年10月開始正式推出業內首款跨界處理器—i.MX RT系列,如今距離該系列第一款i.MXRT1050發布已過去近2年,i.MX RT系列在行業里應用越來越廣泛,i.MX RT系列家族成員也越來越壯大。為了進一步滿足不同行業的需求,恩智浦近期推出了i.MX RT系列又一款新品,主打極致性價比,LQFP80小巧封裝,主頻高達500MHz,售價卻不到1美金,它究竟是何方神聖?不用猜啦,它就是i.MXRT1010。為了配合i.MXRT1010的閃亮登場,痞子衡特地將一站式啟動工具NXP-MCUBootUtility升級到了v2.0,增加了對i.MXRT1010的全面支持。今天痞子衡就跟大家聊一聊NXP-MCUBootUtility v2.0對i.MXRT1010的支持。
一、i.MXRT1010
本文是雙男主陣容,在介紹另一個男主角MCUBootUtility v2.0出場之前,痞子衡先來揭曉第一男主角i.MXRT1010的真容,側重介紹其跟MCUBootUtility工具息息相關的啟動方面的特點。
上圖是i.MXRT1010內部模塊框圖,痞子衡將結合這個框圖對i.MXRT1010啟動方面特點進行簡單剖析:
首先來看Internal Memory部分,i.MXRT1010內部RAM一共128KB,這對於一般單片機應用程序來說已然夠用。其內部ROM是64KB(請注意這個ROM不是給用戶放代碼的,而是用於固化i.MXRT出廠啟動代碼的),如果你對i.MXRT1010的老大哥i.MXRT1050熟悉的話,你應該知道i.MXRT1050的ROM是128KB,那i.MXRT1010的ROM為啥小了呢?下一段就會給你答案。
繼續來看External Memory部分,我們知道老大哥i.MXRT1050支持的啟動設備類型比較豐富(Serial NOR/NAND,Parallel NOR/NAND,SD/eMMC,1-bit SPI NOR/EEPROM,SDRAM),而i.MXRT1010則非常單純,它就只支持Serial NOR這一種啟動設備,因此ROM的代碼被精簡了。
最后看Security部分,老大哥i.MXRT1050支持軟件(HAB)和硬件(BEE)兩種安全加密啟動方式,在這點上小兄弟i.MXRT1010一點也不含糊,甚至有點青出於藍而勝於藍,i.MXRT1010也同時支持軟硬件安全加密啟動,雖然軟件加密方面僅保留了驗簽功能,但是硬件加密模塊卻由BEE升級為了OTFAD,加密選項更豐富,在線解密效率也更高。
二、MCUBootUtility v2.0
是時候揭曉第二男主角MCUBootUtility v2.0的真容了,下圖是v2.0版本主界面,延續了v1.x版本系列的高顏值,並且功能更加全面,它對於i.MXRT1010的支持可不僅僅是簡單地生成unsigned bootable image下載進FlexSPI NOR Flash,而是全方位無死角地支持i.MXRT1010的安全加密啟動,尤其是OTFAD硬件加密啟動。
在i.MXRT1050芯片上使用過MCUBootUtility v1.x的朋友都知道,痞子衡將i.MX RT安全啟動等級分為5級,分別如下:
第一級:不啟用任何安全措施
第二級:啟用HAB簽名認證
第三級:啟用HAB簽名認證與HAB加密
第四級:啟用單引擎BEE加密(唯一SNVS Key)
第五級:啟用雙引擎BEE加密(用戶自定義Key)
從MCUBootUtility v2.0引入i.MXRT1010的支持后,i.MX RT安全啟動等級又增加2級,分別如下:
第六級:啟用單重OTFAD加密(唯一SNVS Key)
第七級:啟用雙重OTFAD加密(用戶自定義Key)
第六級是頂級的安全模式,即用唯一SNVS Key對image進行單重OTFAD級加密,該級別與單引擎BEE加密(唯一SNVS Key)是類似的,只是早期i.MX RT芯片(比如i.MXRT105x)的FlexSPI配套硬件加解密模塊是BEE,而后期i.MX RT芯片(比如i.MXRT1011)的FlexSPI配套硬件加解密模塊升級為OTFAD。相比於BEE模塊,OTFAD模塊在加解密效率上提升了很多,並且提供了更加強大的加解密模式。關於OTFAD強大的加解密模式在雙重OTFAD加密模式中會進一步介紹。
第七級是頂級的安全模式,即用用戶自定義Key對image進行雙重OTFAD級加密,前面講了OTFAD是BEE的升級,那么我們就來比較一下雙重OTFAD加密與雙引擎BEE加密區別:
- 雙引擎BEE加密最多可設3個加密區間,這3個加密區間最多僅能由2組用戶密鑰來保護;而雙重OTFAD加密最多可設4個加密區間,每個加密區間均可設獨立的用戶密鑰,並且所有的用戶密鑰還由一個全局密鑰來保護。
- 雙引擎BEE加密的用戶密鑰是直接存在efuse里的;而雙重OTFAD加密存在efuse里的全局密鑰可引入擾亂算法來保護。
從軟件操作流程上來說,雙重OTFAD加密與雙引擎BEE加密是類似的,只是密鑰配置窗口有差別,我們打開OTFAD的密鑰配置窗口看一下:
kek即全局密鑰,kek是存放在efuse里的;用戶密鑰個數與保護區間一致,所有用戶密鑰均在OTFAD DEK KeyBlob,KeyBlob是存放在外部NOR Flash里的,kek就是用來保護OTFAD DEK KeyBlob的。
至此NXP-MCUBootUtility v2.0對i.MXRT1010的支持,痞子衡就介紹完了。
那么這么好用的工具去哪里下載?其實MCUBootUtility是一個基於Python的開源項目,其項目地址為 https://github.com/JayHeng/NXP-MCUBootUtility, 核心代碼約15000多行,雖然當前版本(v2.0.0)功能已經非常完備,你還是可以在此基礎上再添加自己想要的功能。如此神器,還不快快去下載試用?
歡迎訂閱
文章會同時發布到我的 博客園主頁、CSDN主頁、微信公眾號 平台上。
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。