查看原文
其他

闲聊Host和HSM通信方式--英飞凌、瑞萨MCU

快乐的肌肉 汽车MCU软件设计 2024-03-08

1.概要

  在Evita Full等级下的HSM通常包含了一个独立cpu,因此在这个背景下讨论Host与Hsm的通信,其实也就是讨论核间通信机制。

  常见的通信方式有mailbox、共享内存;AUTOSAR OS提供了IOC的实现。这里我们用不到IOC,为啥?因为本身给HSM的Flash空间就小,再加上任务单一,如果再裁剪一个OS上去,反而成本增加并且有点大材小用。所以,今天就讲讲mailbox和共享内存的方式。

  Host和Hsm的核间通信机制需要数据的安全、完整,因此在做软件设计时,我们要充分运用芯片本身的特性做好顶层设计。

2.共享内存(Tricore 和 Renesas)

  英飞凌TC3xx系列和瑞萨的RH850-F1KM系列的HSM算是座舱域、智驾域的老熟人了,所以我们针对这些片子来分享通信方式。

  英飞凌TC3xx,在之前对其深度解析英飞凌TC3xx-TC3xx HSM启动流程、通信机制分析时我们聊过小数据的通信方式,通过Communication Unit之间进行通信,相关寄存器为HT2HSMF、HT2HSMS、HSM2HTF、HSM2HTS等等;其中后缀带F的为标志位通知,用于HSM、Host之间的标志位交流,比如说HSM_Ready\AES_DECRY\TRNG_GEN等等;而带S后缀的则用于表征状态,例如reset类型、内容有效性等,这在手册中有详细定义。

  从上面我们可以看到,寄存器仅仅只有F、S用于通信,且S后缀的有明确定义,reserved的bit位只有20个,根本无法保证例如SecOC报文的待验签数据的传输,以及MAC值的返回。所以它们之间的通信使用的还是共享内存。

  瑞萨的F1KM和英飞凌类似,而且我发现这俩寄存器命名都非常一致,例如ICU2PES、PE2ICUS等等,怀疑这俩货当时应该是同一家客户的定制需求,设计完了之后出来卖的。闲话少扯,既然这俩货差不多,通信机制都是使用共享内存,为啥?手册这么说的。

  使用共享内存,就对一段RAM空间定义一个数据结构,该数据结构包含私有协议的版本号、发送接收通道大小、错误标识等等,Demo如下:

  共享内存有不同实现方式,这里介绍ring buffer的机制,利用writeIdx和ReadIdx完成对发送和接收通道的写和读。具体原理如下:

      Host往发送通道写入数据前,首先检查writeIdx和readIdx的差值,为简单起见,一个通道一次只能放入一个job,因此这个差值如果大于1,则说明当前通道已经满了且HSM还有读取,此时需要等待hsm读取完毕后再进行写入。

  这种方式主要存在的问题在于内存的访问权限设计,必须通过MPU进行权限分配,在逻辑上存在被篡改的信息安全漏洞风险,试想在启动阶段被攻入,现在可能还觉得不可能,但是随着技术的发展,只要有漏洞,个人认为都是可以被攻破的。

3.Mailbox

  Mailbox借鉴英飞凌Communication Unit的寄存器通信方式,为每个寄存器设置各自的权限。示例如下:

      Host侧将待校验或者加解密的数据写入Mailbox的write register,在硬件设计中,mailbox会自动将数据推入对外不可见的FIFO,并通过另一个寄存器表征此时FIFO里有数据;然后mailbox可以通过中断通知HSM CPU,或者HSM CPU一直去轮询标志位;通过这种方式,需要首先定好FIFO里的软件数据结构,例如通讯协议版本号、数据长度、是否为最后一帧数据等等;这种方式由于FIFO对外的透明性,一定程度上可以规避信息安全风险。

4.小结

  以上,我们简单描述了共享内存和mailbox的通信方式,现目前市面上共享内存使用居多,这就需要软件去设计ring buffer或者其他通信机制;mailbox这种方式可以由硬件实现,软件去配置即可。这篇文章讲得比较浅显,应该还有更方便快捷安全的方法,期待大家的讨论。

————————————————

原文链接:https://blog.csdn.net/djkeyzx/article/details/133648023


继续滑动看下一个

闲聊Host和HSM通信方式--英飞凌、瑞萨MCU

快乐的肌肉 汽车MCU软件设计
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存