点击回顾之前的文章: 《英飞凌 AURIX 系列单片机的HSM详解(1)——何为HSM》 《英飞凌 AURIX 系列单片机的HSM详解(2)——与HSM相关的UCB和寄存器》
本文以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
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: 我们此次将该区域划分成如下三部分: 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的一段剔除,例如: 原链接脚本: 修改为: (这里pfls01的大小为了方便就写了2M,实际剩余空间>2M)。
将原来放在pfls0的代码段都改为pfls01,只有启动代码放在pfls00中,要修改的地方比较多就不一一列举了: 编译后的Hex文件地址如下图所示: 我们可以看到0x80008000-0x8009FFFF这一段已经没有代码了,被预留出来烧写HSM的代码。
|