Infineon Aurix TC397启动过程学习

一、概览

TC397整个启动过程如下图所示:
启动过程概览
首先由某个复位事件开始,必要情况下经历上电过程,然后执行芯片的引导固件进而跳转到用户启动代码,最后执行用户程序,因此整个过程可总结为”复位上电引导启动”八个字。

二、复位

2.1 复位类型

2.1.1 Cold(initial) power-on reset

冷复位,芯片供电从无到有时产生的复位事件,整个芯片会回到初始状态。

2.1.2 System reset

产生系统复位的复位源根据来源可以分为三类:
1.来自片内外设——如看门狗定时器超时产生复位
2.来自片外外设——连接外设的引脚被设为触发源,外设改变引脚状态时产生复位
3.来自软件设置——软件写相关寄存器控制位产生复位
对于大多数复位源来讲,是否产生系统复位可以由软件进行配置。
和冷复位相反,系统复位属于暖复位(warm power-on reset),即整个过程芯片不断电。发生系统复位后,芯片内部除了供电模块、调试模块和复位寄存器外其它部分会回到初始状态。

2.1.3 Application reset

应用复位和系统复位类似,复位源一样分为三类,是否产生应用复位一样可以通过软件设置,主要区别是应用复位后芯片的所有外设、CPU和部分SCU寄存器会回到初始状态,其他部分(如时钟)状态维持不变,影响范围比系统复位要小,也因此应用复位耗时最短。

2.1.4 CPU module reset

CPU复位只影响CPU自身,CPU外围设备不受影响,从核复位会进入halt状态,主核(CPU0)复位会跳转到程序入口地址。

三、引导固件

Boot firmware存储在Boot ROM内,TC397 Boot ROM区间定义如下:

Segment Address Range Size Description
8(cached) 8FFF 0000H – 8FFF FFFFH 64KB Boot ROM(BROM)
10(non-cached) AFFF 0000H – AFFF FFFFH 64KB Boot ROM(BROM)

芯片复位后最先由CPU0执行Boot firmware代码,其他CPU处于halt状态。Boot firmware会对启动模式进行评估,并根据评估结果执行相应启动流程,此外还会进行一些初始化配置操作(如准备Flash、配置芯片寄存器、初始化RAM等),其执行流程如下图所示:
引导固件执行主流程

3.1 BMHD

Boot firmware根据BMHD(Boot Mode Header)来评估启动模式,BMHD有四个(BMHDx for x=0~3)存储在UCB区域内,为了以防数据损坏,每个BMHD又包含一个备份(COPY),每组BMHD(BMHD_ORIG和BMHD_COPY)需要同时设置,不能只设置其中一个。
BMHD在UCB中的地址定义如下:

Address range Size BMHD block
0xAF400000 512 Bytes UCB_BMHD0_ORIG
0xAF400200 512 Bytes UCB_BMHD1_ORIG
0xAF400400 512 Bytes UCB_BMHD2_ORIG
0xAF400600 512 Bytes UCB_BMHD3_ORIG
0xAF401000 512 Bytes UCB_BMHD0_COPY
0xAF401200 512 Bytes UCB_BMHD1_COPY
0xAF401400 512 Bytes UCB_BMHD2_COPY
0xAF401600 512 Bytes UCB_BMHD3_COPY

每个BMHD结构定义如下:
BMHD结构定义

<>PINDIS

该位和引脚P14.3(HWCFG[3])一起用来控制是否通过MCU引脚P10.5(HWCFG[4])和P10.6(HWCFG[5])选择启动模式。

<> HWCFG

该位域决定启动模式,作用时机见上表。

<> LSENA0~LSENA3

CPU0~CPU3的lockstep功能设置,TC397有六个核,其中只有四个核具有锁步核。

<> LBISTENA

控制是否使能LBIST自检功能。

<> BMHDID

只能为0xB359,取其他值时无效。

<> STAD

指定程序起始地址,配合启动模式使用,当选择ABM模式时为ABMH(Alternate Boot Mode Header)的地址,当选择内部Flash启动时为用户启动代码入口地址。

<> CRCBMHD

BMHD前八个字节(BMI、BMHDID、STAD)的CRC校验值,CRC参数如下:

CRC算法名称 多项式 初始值 结果异或值 输入反转 输出反转
CRC-32 04C11DB7 FFFFFFFF FFFFFFFF true true
<> CRCBMHD_N

为CRCBMHD值取反。

四、启动代码

启动代码的流程示意如下:

启动代码分为六个阶段:

Phase1

初始化PSW寄存器,评估复位类型是application reset、power-on reset还是CPU0 reset。
由SW、STMx、SMU、ESRx和CB3(Cerberus 3)触发的复位属于application reset,其他的复位源属于system reset。

Phase2

该阶段只在冷复位(Cold power-on reset)情况下才会执行,包含三部分:

  1. 根据使用情况初始化并校验EVR寄存器;
  2. 评估LBIST测试结果;
  3. 执行MONBIST测试;
Phase3

第三阶段会设置CSA,初始化栈指针(A10),因此在该阶段结束后才可以使用函数调用,但不能使用全局变量。

Phase4

该阶段只在power-on reset情况下才会执行,包含三部分:

  1. MMIC时钟检查(for ADAS);
  2. 初始化时钟和flash,喂狗;
  3. 执行MBIST测试;
Phase5

该阶段可选,主要针对功能安全方面,处理SMU各种alarm。

Phase6

最后阶段处理多核启动,具体包括:

  1. 通过设置CPU的PCON和DCON寄存器使能PCACHE和DCACHE功能;
  2. 初始化BIV和BTV,支持中断和TRAP机制;
  3. 初始化全局变量;
  4. 启动从核,多核启动按照菊花链的方式,即由CPU0启动CPU1,CPU1启动CPU2,直到CPU4启动CPU5。
物联沃分享整理
物联沃-IOTWORD物联网 » Infineon Aurix TC397启动过程学习

发表评论