英飞凌 AURIX 系列单片机的HSM详解(3)——开发方法

本系列的其它几篇文章:

《英飞凌 AURIX 系列单片机的HSM详解(1)——何为HSM》

《英飞凌 AURIX 系列单片机的HSM详解(2)——与HSM相关的UCB和寄存器》
《英飞凌 AURIX 系列单片机的HSM详解(3)——开发方法》
《英飞凌 AURIX 系列单片机的HSM详解(4)——Tricore核与HSM核之间的通信方法》
《英飞凌 AURIX 系列单片机的HSM详解(5)——HSM硬件加速模块的使用》

本文以TC397为例,来介绍一下HSM的开发方法。

1. 编译器


HSM开发时分两类工程,一类工程是编译Tricore内核代码的,用到的编译器是Tasking for Tricore;
另一类工程是编译HSM的ARM Cortex-M3内核的,用的是Tasking ARM for HSM。

各个版本可以在下面Tasking的官网上找到,需要试用的话要联系Tasking的销售:
https://www.tasking.com/support/tricore-and-aurix-toolset-support#4.3

英飞凌 AURIX 系列单片机的HSM详解(3)——开发方法_第1张图片
2. 调试器


英飞凌的Miniwiggler支持Tricore和HSM核的调试,可以使用Tasking内嵌的Debugger。

高端一点的调试器可以用Lauterbach,配合软件Trace32,需要有Tricore和ARM的license。用Trace32软件结合Lauterbach硬件调试器可以实现HSM核和Tricore核程序的烧写和调试。此外还有iSYSTEM等不太常用的调试器。

3. PFlash地址划分


HSM核的程序代码可以存放于PFlash0的S0-S39这40个16K的PFlash块中,手册中对该区域的定义如下,我们暂时先考虑右侧“HSM only”的情况,先不管TP:

英飞凌 AURIX 系列单片机的HSM详解(3)——开发方法_第2张图片 我们此次将该区域划分成如下三部分:

英飞凌 AURIX 系列单片机的HSM详解(3)——开发方法_第3张图片

PF0的起始地址0x80000000处的S0-S1用于存放Tricore APP的部分代码,Tricore上电后从0x80000000处开始执行。

HSM代码分为BootLoader和APP两部分,此次将HSM的BootLoader起始地址放在S2 - 0x80008000处,HSM的APP起始地址放在S24 - 0x80060000处,将S2-S39共38个Sector都预留给HSM使用,其中BootLoader分配352K空间,APP分配256K空间。

预留给HSM的这38个Sector要被保护起来,是通过寄存器SP_PROCONHSMCX0/1两个寄存器设置的,HSM的BootLoader启动地址由寄存器SP_PROCONHSMCBS设置,这三个寄存器又都由UBC中的UCB_HSMCOTP0/1_ORIG和UCB_HSMCOTP0/1_COPY定义,详细定义见上一篇文章。这三个寄存器的设置值如图中所示。

MCU上电时,SSW代码先判断UCB中的内容,如有效则将其复制到响应的寄存器中,然后查找SP_PROCONHSMCBS获取HSM核的启动代码地址,启动HSM核。

Flash地址分配可以用链接脚本来控制,代码共分为三个部分,Tricore的APP,HSM的BootLoader和HSM的APP,三个工程的链接脚本要相互配合好,保证编译出来的代码不会互相覆盖。

例如,HSM BootLoader工程中的链接脚本中,PFlash起始地址定义如下:

#define HSM_FLASH                    0x80008000

HSM APP工程链接脚本中的PFlash起始地址定义如下:

#define HSM_FLASH                    0x80060000

Tricore APP工程链接脚本中,应将PF0中用于HSM的一段剔除,例如:
原链接脚本:

英飞凌 AURIX 系列单片机的HSM详解(3)——开发方法_第4张图片

 修改为:

英飞凌 AURIX 系列单片机的HSM详解(3)——开发方法_第5张图片

(这里pfls01的大小为了方便就写了2M,实际剩余空间>2M)。

将原来放在pfls0的代码段都改为pfls01,只有启动代码放在pfls00中,要修改的地方比较多就不一一列举了:

英飞凌 AURIX 系列单片机的HSM详解(3)——开发方法_第6张图片

编译后的Hex文件地址如下图所示:

英飞凌 AURIX 系列单片机的HSM详解(3)——开发方法_第7张图片

我们可以看到0x80008000-0x8009FFFF这一段已经没有代码了,被预留出来烧写HSM的代码。

4. 程序烧写步骤


根据上文所述,共有三个工程,分别编译得到三个elf或hex文件。程序烧写步骤如下:

(1)烧写BMHD
首先确保BMHD区域的值正确,保证Tricore可以正常启动。

(2)禁用HSM
在烧写HSM程序前,要保证HSM处于禁用的状态,即UCB_HSMCOTP0/1_ORIGUCB_HSMCOTP0/1_COPY两个UCB中 PROCONHSMCFG 中的HSMBOOTEN值为0。

(3)烧写程序
向PFlash中烧写HSM的BootLoader程序、APP程序和Tricore的APP程序。

(4)程序校验
查看PFlash相应地址处的程序,确保三个程序烧写完整,彼此没有覆盖。

(5)配置HSM BootLoader启动地址
在PROCONHSMCBS寄存器中配置正确的HSM BootLoader启动地址,依据前文所述,向UCB_HSMCOTP0/1_ORIGUCB_HSMCOTP0/1_COPY两个UCB中的PROCONHSMCBS中的BOOTSELx填入0x02(暂定,待验证)。

(6)启用HSM
以上准备工作完成后,就可以启用HSM配置了,即向UCB_HSMCOTP0/1_ORIGUCB_HSMCOTP0/1_COPY两个UCB中 PROCONHSMCFG 中的HSMBOOTEN写入1.

以上配置都完成且正确后,再次给MCU上电,MCU即可启动Tricore核和HSM核。

你可能感兴趣的:(Cyber,Security,HSM,编译器)