一、概览
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结构定义如下:
<>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)情况下才会执行,包含三部分:
- 根据使用情况初始化并校验EVR寄存器;
- 评估LBIST测试结果;
- 执行MONBIST测试;
Phase3
第三阶段会设置CSA,初始化栈指针(A10),因此在该阶段结束后才可以使用函数调用,但不能使用全局变量。
Phase4
该阶段只在power-on reset情况下才会执行,包含三部分:
- MMIC时钟检查(for ADAS);
- 初始化时钟和flash,喂狗;
- 执行MBIST测试;
Phase5
该阶段可选,主要针对功能安全方面,处理SMU各种alarm。文章来源:https://www.toymoban.com/news/detail-452969.html
Phase6
最后阶段处理多核启动,具体包括:文章来源地址https://www.toymoban.com/news/detail-452969.html
- 通过设置CPU的PCON和DCON寄存器使能PCACHE和DCACHE功能;
- 初始化BIV和BTV,支持中断和TRAP机制;
- 初始化全局变量;
- 启动从核,多核启动按照菊花链的方式,即由CPU0启动CPU1,CPU1启动CPU2,直到CPU4启动CPU5。
到了这里,关于Infineon Aurix TC397启动过程学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!