AURIX TC3xx单片机介绍-启动过程介绍1

从各个域控制器硬件解决方案来看,MPU可能来自多个供应商,有瑞萨,有NXP等,但对于MCU来说,基本都采用英飞凌TC3xx。

今天我们就来看一下TC3xx的启动过程,主要包含如下内容:

  1. uC上电过程中,会经过一个上电时序,从复位状态“脱离”出来;
  2. Boot Firmware是复位后第一个执行的指令时序,该固件会进行一些基本的硬件初始化,之后执行权限会交给用户启动软件;
  3. 用户启动软件会根据特殊应用会进一步初始化硬件与软件;
  4. 之后CPU执行权限交接给应用程序;
    在这里插入图片描述
    图表 1 启动时序概览

基本缩略语介绍:
在这里插入图片描述
Reset:

启动时序是由不同的复位事件触发的,基于上一次触发事件,相应的启动时序会被执行。主要的复位事件有:

Cold(Initial) Power on

该复位事件是微控制器初始上电过程所产生,其会初始化微控制器所有的系统;

System Reset

该复位事件由多个复位源引起的,如上电、内部信号(软硬件信号)或外部信号触发。Boot固件将System Reset当作Warm Power on reset来处理;

Application Reset

该复位事件可由多个复位源引起的,如上电、内部信号(软硬件信号)或外部信号触发,该种复位类型会引起所有的外设、CPU、部分SCU的复位。

当然,一个复位源是System Reset还是Application Reset,是可以通过软件配置的。

CPU Module Reset

该复位事件是针对每个CPU的,可以让CPU进入Halt状态。如果是针对CPU0的复位,程序会跳转到用户程序的开始位置。该种复位仅初始化受影响的CPU,对于受影响的CPU之外的不受此影响。

Boot Firmware:

Boot Firmware是保存在BOOT ROM里的(BOOT ROM也是一块FLASH),是芯片启动后CPU最开始执行的代码。对AURIX第2代微处理器,Boot Firmware由CPU0执行,在启动阶段,其他CPU处在Halt状态,等待CPU0启动。

Boot Firmware是在芯片生产过程中烧录到BROM里的。Boot Firmware在上电后、System reset,application reset, CPU0 Kernel reset后会被执行,基于Reset类型和用户配置,Boot Firmware会执行不同的启动时序。

Boot Firmware基于如下配置的不同初始化不同内容:

  • UCB配置;
  • HWCFG[5:3] Pin;
  • Reset类型;

Boot Firmware执行大致步骤:

1,启动Flash ramp-up

FLASH模块被启动,会进入一个可以被读取、擦除、编写等操作的状态;

2,RAM Initialization

RAM初始化过程会将选定的RAM区域初始化为零,ECC值也会被自动初始化。RAM初始化行为可以在UCB里配置:

在Cold或Warm Power-on reset时Enable或者Disable RAM初始化,通过配置PROCONRAM寄存器里的RAMIN可实现。默认情况下,在Power on Reset是,RAM会被初始化;

对每个CPU特定RAM初始化Enable或Disable,通过配置PROCONRAM寄存器里的RAMINSEL可实现。默认情况下,所有CPU的Local RAM都会被初始化;

LMU和AMU RAM初始化的Enable和Disable,通过配置PROCONRAM寄存器里的LMUINSEL可实现。默认情况下,所有LMU都会被初始化;

3,选择和执行启动模式

评估Boot Mode Headers(BMHDx, x=0……3)。如果BMHD有效,相应的启动模式会被执行,启动模式可以通过BMHD里的值决定;也可以通过HWCFG(5:3)硬件PIN来决定(如果BMHD里的Pin-configuration使能了)。如果BMHD无效,可能会去检查其他的启动模式:

如果没有有效的BMHD,且HSM Boot和Boot Mode Lock被Disbale了:
这种情况是没有可用的用户代码被启动,需要检查是否接收到了Halt after Reset请求(CBS_OSTATE.HARR):

如果有,则从Flash Mode启动,即可从Flash的首地址启动;

如果没有,则进入Generic BSL模式;将CPU0 Program scratched RAM(CPU0_PSPR)的首地址作为启动地址;

如果BMHD无效,同时HSM Boot或Boot Mode Lock是使能的:
在这种情况下,SSW(启动软件)是不能选择任何启动模式的,意味着不能从SSW退出。Boot Firmware会检查是否有Debug接口,如果Debug Access是使能的,SSW会使能Debug接口并进入死循环。

4,HSM使能情况下的启动

HSM(Hardware Security Module)CPU是一个基于arm指令集的32位CPU,所有的指令、内部测试使用的功能、启动行为等都保存在BOOT ROM里的HSM区域;

当DMU_SP_PROCONHSMCFG.HSMBOOTEN 置位,Boot Firmware会启动HSM模块,基于PROCONHSMCFG.SSWWAIT的值,Boot Firmware会决定是否要经过HSM的认可,让PC指针从Boot ROM跳转到用户程序里;

HSM可以将调试接口锁止,CPU也可以将调试接口锁止。但是CPU只能解锁自己锁住的调试接口,不能解锁通过HSM锁止的调试接口,HSM可以解锁任何加锁的调试接口。

5,Lockstep Configuration

Boot Firmware可以配置Lockstep。在启动模式评估过程中,如果有效的BMI(BMHD的一部分)可以被找到,会将BMI.LSEAn的值加载到SCU_LCLCON0/1的LSENn里,以控制是否使能Lockstep。如果找不到有效的BMI,CPU0的Lockstep会被Disbale。

6, Debug System handling

如果Debug Access是使能的,Boot Firmware会解锁Debug接口。

Boot Firmware在如下几种情况会立即停止(意味着芯片不能启动):

  • Flash Ramp up阶段出现错误;
  • Flash配置Sector损坏(不可恢复的数据错误);
  • UCBs(User Configuration Blocks)处于错误状态或含有不可恢复的数据错误;

启动选项

1,根据BMI(Boot Mode index)配置来决定启动方式
根据特定Flash位置的配置值

用于的起始地址在BMHDx.STAD(Boot Mode Header)里配置;

1,根据硬件配置来决定启动方式
该种模式只有在BMI里使能了且HWCFG[3]的PIN被拉低才有效;

根据HWCFG的配置PIN电平状态来决定启动方式;

Boot Mode Header

Boot Mode Header的数据结构可以被Boot Firmware参考,以确定启动行为(如上所说)。在AURIX 2代,总共有4个Boot Mode Header(BMHDx, x=0-3),他们都是定义在UCB里的,为了防止数据的损坏,每个Boot Mode Header都有其一个备份,即有原始的Boot Mode Header,,UCB_BMHDx_ORIG,也有其备份的UCB_BMHDx_COPY,为了保证正常启动,在UCB里至少有一个存在。

Boot Mode Headers是存放在UCB固定地址区域的,用户只能遵守,不能改变:
在这里插入图片描述
对于每个Boot Mode Header,其结构如下:
在这里插入图片描述
在这里插入图片描述
Hardware Configuration pins

对于启动来说,Boot mode的选择很重要,这个主要是通过Boot Mode Index(BMI,如上)来配置的,这个可以通过Boot Mode Header来配置实现,也可以通过Hardware Configuration(HWCFG)Pin脚来实现。总共有6个PIN脚,HWCFG【6-1】决定着Hardware Configuration,同时HWCFG【5】和HWCFG【4】对Boot Mode的选择很重要:

默认情况下,Hardware Configuration的PIN脚是上拉的,如果外部电路没有连接时,默认的启动模式时Internal start from flash.

Alternate Boot Mode

ABM模式的处理是通过ABM Header来控制的,在该模式下,启动程序是可以由用户定义的,同时也会检查程序和数据的完整性,Boot Firmware是通过对指定的区域进行CRC校验实现的。

在ABM模式下,如果检查到最后一个BMHD,即BMHD3,会进入Bootstrap Loader模式(该模式后面会详细介绍);

如果有有效的BMHD和ABM Header,会跳到由ABMHDn.STADABM指定的地址处。ABM的数据结构如下:
在这里插入图片描述
Bootstrap Loader

这个模式可以使用户程序通过选定的接口加载到CPU0 Program Scratchpad RAM(CPU0_PSPR)。加载的代码会在Boot Firmware运行结束就跳转过来执行了。

总共有两种接口,ASC和CAN,基于该协议,用户程序可以加载到指定的内存区域,即上面说的CPU0_PSPR。

Bootstrap Loader的启动过程如下:
在这里插入图片描述

实际应用举例:

我们在设计控制器的启动程序时,主要考虑两个因素:

1, 怎么将我们开发好的功能程序刷写到MCU的Flash里;
2,怎么去设计启动模式;
先来说第一个问题,在工厂生成控制器时,我们的MCU是从供应商那里获取的,Flash是空的,按照上面的说法,我们的BMHD和ABM Header都是空的,即是无效的,那么会进入Bootstrap Loader模式,在该模式下,MCU的Boot Firmware可以与外界进行通信,基于该通信,可以将我们用户开发好的用于刷新的Boot Loader加载到MCU的RAM里,加载完成后,PC指针会从Boot Firmware跳转到该RAM里,执行用户开发的Boot Loader,然后可以与上位机通信,实现数据的刷新;这个就是在工厂生产时用到的刷新,我们称之为“初次刷新”,该刷新方式会比JTAG便捷、高效。

对于第二个问题,从Security的角度来说,是不建议用HWCFG的方式来决定启动模式的,防止被暴力刷新;建议使用ABM的模式。对于TC3xx来说,要配置启动模式要设置两个内容:1,配置UCB的BMHD区域,这里可以定义启动模式,如果是ABM模式,可以定义存放ABM Header的地址;2,定义ABM Header的内容。相比较于TC2xx来说,TC3xx主要是多了UCB里的BMHD区域,这样设计的主要目的是考虑到AB SWAP,实现OTA。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值