1. Aurix引入HSM的问题思考
(1)TC3xx使能HSM后,HSM的代码应该存放在哪里?
在UserMannul Part6中,明确定义了Host、HSM Code在PFlash的位置,如下图:
当有HSM后,PFlash0的S0-S39均给HSM使用,当然如果有TP数据需求,HSM从S8开始。注意哦,这里面肯定没有HSM的bootrom,
因为BootRom在芯片出厂时就已经掩模在ROM介质里,所以PF0里面存放的是HSM的firmware,也即HSM User Code。
此外,当我们要使用硬件A\B SWAP,需要特别注意,对应Backup的Flash区域是否也有相应的HSM预留呢?答案是肯定的,原文如下:
因此,这个带HSM的A\B SWAP方案可如下图所示:
(2)HSM如何实现安全启动?安全启动通常是基于信任链的启动,因此,Host需要等待HSM把该校验的程序、数据段验证完毕、形成一个安全的运行环境后,再跳转至应用程序启动。所以,这里是否需要考虑在哪里等待?英飞凌会提供这种机制吗?
该问题在Tricore的SSW可以得到解决,SSW中会判断一个标志SSWWAIT用于决定是否等待HSM的通知就跳转至User Code。因此,我们可以利用这个机制来实现顺序、并行、混合的安全启动机制。做过的人肯定知道我在说什么。
(3)HSM引入后,对于HSM的debug是如何进行的?
HSM的debug接口在什么情况打开?软件要控制吗?
带着这个问题,我们来看HSM的UCB能否找到答案。
好,有了上述思考之后(注意上述思考没有加入FuSa和TARA的分析哦)。
第一步,先给HSM找个家。自然而然,我们就要去NVM章节找寄存器。
寄存器手册中,HSM Code相关的如上图,可以看到,这里每个bit都是rh的,这就奇怪了,不能配,那咋办?没办法,去UCB看看吧。
在UCB20中,PROCONHSMCX0/1均是对HSM code sector的配置。那么具体是如何配置的呢?
直接对照寄存器填1即可,这里对寄存器bit HSMxX,我曾经产生过疑问,大写的X具体指啥?开始我认为是对应PFlash的Bank序号,因为在做SWAP时,假设PF0/1 和PF2/3做SWAP,那么PF0和PF2的前40个sector都要给HSM使用。但后来再仔细想想,对于AB SWAP,CPU只会访问活动区的地址,使用者会操作CPU去刷写Host 的非活动区地址(一般HSM很少升级),并且对于上述寄存器,只有一个偏移地址,没有对应bank的i*offset那种。所以这里就有点疑惑了,难道对于SWAP只需要配一个PF0,对PF2的HSM保护由硬件自己实现?
给HSM code找到家之后,现在要做的就是告诉Host,我要用HSM了。因此,沿用找家的思路,继续查看UCB20里面有没有配置项。
选择DF1的模式,默认是单端模式,注意这里DF1和DF0必须是一样的模式。
这里就奇怪了,为啥要设置DF1?难道说HSM独占了DF1?在芯片手册搜HSM
好家伙,新大陆来了,看寄存器HSMDX这一bit,明确说明了DF1由HSM独占。
因此寄存器SP_PROCONHSMCFG看来很重要啊。
HSMBOOTEN:
启动使能标志
SSWWAIT:
SSW软件是否等待HSM通知后才跳至用户代码)
HSMDX:
独占DF1
HSMRAMKEEP:
根据复位源来清除HSM SRAM
(说明HSM内部有独立RAM)
HSMENPINS:
HSM是否可以强制接口pins HSM1/2
HSMENRES:
HSM是否可以触发app/system reset
DESTDBG:
Debug调试接口是否为可破坏性(问题又来了,host还是hsm debug)
BLKFLAN:
flash指令序列verify erased page等是否在HSM code上支持
配置完上述UCB后,接下来,我们要考虑,HSM虽然是放在了PF0前40sector,但是最重要的中断向量表放在哪里的呢?想必也是有UCB可以搞定吧。
在这里我们可以看到,总共可以配置4个HSM BootSector。再结合HSM User Code的大小一般在200-300K左右,我们可以初步断定4个启动地址是为了增加系统鲁棒性,例如在预研HSM时,可以放两个相同的HSM User Code,并配置BOOTSEL,保证冗余。毕竟SSW里看到如果HSM使能了,稍有不慎就要锁板子。
妥了,HSM在UCB的配置已经七七八八了。但还有一个 UCB19
对应寄存器为SP_PROCONHSM,如下:
HSMDBGDIS
:
HSM debug使能
DBGIFLCK
:芯片的debug是否lock
TSTIFLCK
:芯片的测试接口是否lock
HSMTSTDIS:
HSM测试使能
HSMTRDIS:
HSM的trace功能使能
HSMTRTYPE:
HSM trace地址和数据
需要特别注意的是,一定要保证HSM Sector里已经刷好相关代码后再去进行这些配置,复位前反复确认。特别是如果使能了SSWWAIT,一定得搞明白HSM是用什么方式去通知Host的,这在SSW里固化好的流程。当然,如果不清楚建议不配置SSWWAIT。
往期回顾: