分享

英飞凌TC27X芯片的启动学习笔记

 Kuai2012 2022-07-06 发布于北京

启动软件是芯片复位后执行的第一个软件。

SSW在CPU0上执行 - 所有其他CPU在引导期间保持Halt状态,由用户软件启动,而:

  • BootROM中的SSW起始地址是CPU0的程序计数器寄存器中的复位值。从该位置获取指令,这是在任何设备启动之后执行的第一条指令。在此入口点之后,固件立即检查testmode,如果选择了testmode,则执行跳转到测试固件

  • 最后一条SSW指令跳转到第一条用户代码指令。取决于用户选择的启动配置,可以从不同位置获取该第一用户指令。

启动软件包含根据以下一项或多项初始化设备的过程:

  • 以前存储在专用Flash位置的信息

  • 专用寄存器/存储器位置中的特殊位/字段的当前状态

  • 触发SSW执行的事件类型(最后一次重置事件),SSW执行可以由不同的事件触发,包括上电、系统复位、应用复位。

  • 应用于外部(配置)引脚的值(可选)SSW还会调用 - 以防 - 其他固件模块。

启动时的时钟系统

上电或是系统复位后,时钟模块处于初始化状态,各个总线的时钟频率如下:

而应用程序复位后,时钟系统不会改变其状态,因此器件以与复位事件之前相同的频率和时钟源运行。

有个注意的点是上电启动过程和系统复位会重写从CPU0 DSPR起的8 KByte空间。因此,应用软件不应使用该区域保存数据。不同复位的影响如下图所示。

启动模式

其中HWCFG[0:2]用于配置MCU的供电模式,HWCFG[3]是BMI的选择引脚,它决定启动配置从引脚HWCFG[4:5]选择,还是从Flash中BMI选择。为了节省引脚资源和避免安全漏洞,通常启动模式选择用Flash中的BMI,芯片的判断流程如下图所示。

BMI信息存放在BMHD寄存器中,共由9个字段组成,如下图所示,Flash中的BMHD寄存器总共有4个,如图2所示,其目的是为了做冗余设计,保证在一个或多个损坏时,芯片仍能正常启动。

其中:

1、STADABM存放的是用户代码的入口地址;

2、BMI用于配置用户的启动模式,BMI.PINDIS用于配置是否屏蔽硬件HWCFG[3:5]引脚功能,如果该位置位,那么BMI.HWCFG用作启动配置;

3、LCL0LSEN、LCL1LSEN用于配置是否使能core0、core1的锁步功能;

4、BMHDID为固定值0xB359;

5、ChkStart、ChkEnd用于存放计算CRC的起始地址和末尾地址,CRCrange、CCRCrange分别是按照IEEE802.3中的CRC算法计算的CRC值和其取反的值;

6、CRChead、CRChead是计算BMHD的00H~17H的CRC值和其取反的值。

启动流程

如下图所示,主要的初始化过程在CPU0上执行,如果初始化阶段要求锁步核校验,也可以切换至CPU1。其中Firmware固化在BootROM中的启动程序。对于冷复位,可以通过配置PROCOND寄存器选择性地初始化内存区。下面结合图3介绍启动的主要步骤:

1、调用Cstart()函数初始化C运行环境;初始化堆栈指针和程序状态字(PSW)寄存器,A10寄存器用作堆栈指针,用户堆栈指针基地址和堆栈大小通过连接文件设置,启动代码应该测试和初始化用于堆栈的存储区,对齐堆栈边界;上下文存储区(CSA)初始化,PSW(CDC )寄存器中表示连续上下文切换的调用深度内容应该被重置,通过PCXI、LCX、FCX寄存器初始化CSA链表,通过连接文件配置CSA的大小;中断及陷阱向量表的基地址初始化,也就是BIV和BTV寄存器;初始化PCON和DCON寄存器使能程序缓存、数据缓存,该寄存器的配置能有效缩短程序的运行时间;清除bss段的内存,复制data段的数据至内存中。

2、确认已发生的复位时间类型,并测试是否有电源故障和内存数据是否一致。如果复位类型为应用复位,且内存数据没有破坏,则不需要初始化内存、时钟、Flash模块,从而进入快速启动过程。

3、初始化驱动和外设至默认状态。例如将端口引脚初始化为所需要的初始电气状态。

4、进行安全测试和初始化。包括CPU测试、RAM测试、SMU警告检测和其他重要的安全启动测试。另外可以调用safeTlib程序。

5、完成安全测试之后,对应用需要的硬件模块驱动进行初始化,时钟初始化,Flash配置,GTM初始化等。

6、在驱动程序初始化后,此时硬件只启动了CPU0,其他核仍保持Halt状态,软件通过调用Startcore()、Cstart()函数启动和初始化相应的核,最后把控制权交给操作系统。



    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多