恩智浦半导体从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)功能已经非常完备,你还是可以在此基础上再添加自己想要的功能。如此神器,还不快快去下载试用?