本文主要介绍了NXP S32K3平台的HSE固件的安装,以及安装过程中可能出现的坑。希望可以帮助到大家!
HSE简介
• HSE = Hardware Security Engine;
NXP S32K3芯片的硬件安全引擎(HSE)模块是一个关键组件,旨在增强汽车电子系统的信息安全。以下是对HSE模块的介绍、主要功能、工作原理和用途的概述。
HSE(Hardware Security Engine)是NXP S32K3系列微控制器中的一个安全模块,提供了一系列安全特性,如加密、安全启动和密钥存储。
主要功能加密:支持多种加密算法,包括对称和非对称加密,用于保护数据传输和存储的安全。安全启动:确保系统启动时的完整性和真实性,防止未经授权的代码执行。密钥管理:安全存储和管理加密密钥,防止密钥泄露。硬件加速:通过硬件加速加密和解密操作,提高系统性能。
HSE组成
对于S32K3系列,我们使用的是HSE_B,其他芯片平台的对应关系:
HSE Interface
HSE 子系统的通信接口是通过MU来实现的,具体的通信过程如下:
Host Core通过Application Space中的Tx寄存器向Hse Core发送数据,Hse拿到数据处理完毕后再通过HSE Space的Tx寄存器返回响应给Host Core,这就是一个简单的通信方式。
MU模块
在实际的HSE FW安装以及block切换过程中,参与通信的MU模块通常是MU0,host发送切换命令或者其他服务的时候,通常使用的是TR[0-1]和RR[0-1];针对HSE的使用来说,MU通信模块的介绍如下文所述
MU的主要是用在不同内核之间的通信,分为A,B两面,分别有不同的用途,具体如下图:
在实际项目中,只有MUB的操作对我们来说是可见的。例如在使用SID
“HSE_SRV_ID_ACTIVATE_PASSIVE_BLOCK”的时候,我们操作的是MUB的MU0 CH1通道:
HSE FW的安装
HSE FW的安装主要参考官方文档[HSE FW install for S32K3xx],该文档详细介绍了关于full
memory和ab swap的模式下安装的具体步骤。
HSE FW下载
可以从官网获取:
需要注意的是:我们要获取最新的版本,目前为止最新版本为
[HSE_FW_S32K312_0_2_40_0] ;另外,原廠的K3芯片内有最新的Sbaf,因此不需要在官网下载sbaf固件,暂时也不要去更新sbaf,以免变砖!
HSE 安装过程
一.安装方式
NXP官网文档,给出了三种安装方式:
二.内存布局
在介绍具体的方式之前,现讲解一下,AB SWAP时的内存分配情况,方便后续的内存变化过程的理解。
三种安装方式讲解:
1.Method1
所有的image通过JTAG烧录到内部flash之中,同时将IVT放在特定的地址处,对于S32K312来讲的话,只能放在0x00400000处,参照HSE RM,如下:
注意:其他的imag,实际存放地址要和IVT的指向地址保持一致!
如果secure NVM内部还没有安装HSE时,在reset之后,会有以下的操作:
在安装完成以后,FW_IMG就可以被擦除或者覆盖掉了。操作流程示意图,如下:
安装AB SWAP需要经过两次reset,此时内部NVM发生了变化:
2.Method2
无IVT用于指向HSE-FW的地址以及app运行地址,此方式下需要将FW-IMG放在IVT_START的位置或者也可以放在0x0050000(k312)的位置。安装过程如下:
两次reset之后,安装完成,同method1,FW-IMG可以被覆盖或者擦除,此时Sbaf会将FWIMG放在HSE专用NVM之中:
注意:这种方法因为将FW-IMG放在IVT-START,程序在脱离调试器之后,无法自主启动,无法满足项目需求,因此没有采纳此种方法。
3.Method3
第三种方法,网上资料很少,没有完整的demo可供参考,我们也没有采用这种方式来进行。在HSE RM中,给出了该种方法的流程图,以及在HSE RM P50给出了安装的步骤说明,可以参考:
项目使用安装方法
一.安装工程结构
二.内存划分
三.具体安装过程
总体的安装流程,在AN744810文档中给出,如下:
1.写入OTP
在UTEST区域地址0x1B000000UL处写入0xAABBCCDDDDCCBBAA,该过程为Enable OTA feature。
注意:写不成功的原因,可能因为未将flash驱动放在ram中运行,
2.内存分配
实现满足需求的安装工程,最主要的地方就是合理分配内存。我们工程的内存划分如上图,将IVT放置在pflash的起始地址处,而IVT内包含了程序的地洞地址,这样的话,就可以实现在上电之后,没有挂调试器的时候,仍然可以重启,实现HSE的离线安装的目的。以下为IVT的内容:
四.验证HSE的安装
1.程序中有读取版本号的函数接口;在安装成功的条件下,会获取FW的版本信息:
如果安装不成功,程序会卡在获取HSE状态信息的地方,此时可能的情况是:HSE_FW被意外擦除或者破坏。解决的方法,可以参照MU RM,使用MU通信来实现HSE FW的recovery!
2.查看寄存器
潜在安装失败原因
HSE RM中也有类似表述:
因此,与HSE相关的输入输出变量,我们在工程中放在no-cable的内存区域中:
本文主要介绍了HSE FW的安装方法。个人拙见,多多指教!麻烦各位多多关注我的账号,后续会陆续推出NXP S32K3的一些使用技巧以及实际开发过程中遇到的问题。
另外,已将安装工程放在资源共享里了,欢迎下载!!!
扫一扫,关注我的公众号哦!多关注,不迷路!