TC397整个启动过程如下图所示:
首先由某个复位事件开始,必要情况下经历上电过程,然后执行芯片的引导固件进而跳转到用户启动代码,最后执行用户程序,因此整个过程可总结为”复位、上电、引导、启动”八个字。
冷复位,芯片供电从无到有时产生的复位事件,整个芯片会回到初始状态。
产生系统复位的复位源根据来源可以分为三类:
1.来自片内外设——如看门狗定时器超时产生复位
2.来自片外外设——连接外设的引脚被设为触发源,外设改变引脚状态时产生复位
3.来自软件设置——软件写相关寄存器控制位产生复位
对于大多数复位源来讲,是否产生系统复位可以由软件进行配置。
和冷复位相反,系统复位属于暖复位(warm power-on reset),即整个过程芯片不断电。发生系统复位后,芯片内部除了供电模块、调试模块和复位寄存器外其它部分会回到初始状态。
应用复位和系统复位类似,复位源一样分为三类,是否产生应用复位一样可以通过软件设置,主要区别是应用复位后芯片的所有外设、CPU和部分SCU寄存器会回到初始状态,其他部分(如时钟)状态维持不变,影响范围比系统复位要小,也因此应用复位耗时最短。
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等),其执行流程如下图所示:
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 |
该位和引脚P14.3(HWCFG[3])一起用来控制是否通过MCU引脚P10.5(HWCFG[4])和P10.6(HWCFG[5])选择启动模式。
该位域决定启动模式,作用时机见上表。
CPU0~CPU3的lockstep功能设置,TC397有六个核,其中只有四个核具有锁步核。
控制是否使能LBIST自检功能。
只能为0xB359,取其他值时无效。
指定程序起始地址,配合启动模式使用,当选择ABM模式时为ABMH(Alternate Boot Mode Header)的地址,当选择内部Flash启动时为用户启动代码入口地址。
BMHD前八个字节(BMI、BMHDID、STAD)的CRC校验值,CRC参数如下:
CRC算法名称 | 多项式 | 初始值 | 结果异或值 | 输入反转 | 输出反转 |
---|---|---|---|---|---|
CRC-32 | 04C11DB7 | FFFFFFFF | FFFFFFFF | true | true |
为CRCBMHD值取反。
初始化PSW寄存器,评估复位类型是application reset、power-on reset还是CPU0 reset。
由SW、STMx、SMU、ESRx和CB3(Cerberus 3)触发的复位属于application reset,其他的复位源属于system reset。
该阶段只在冷复位(Cold power-on reset)情况下才会执行,包含三部分:
第三阶段会设置CSA,初始化栈指针(A10),因此在该阶段结束后才可以使用函数调用,但不能使用全局变量。
该阶段只在power-on reset情况下才会执行,包含三部分:
该阶段可选,主要针对功能安全方面,处理SMU各种alarm。
最后阶段处理多核启动,具体包括: