Tricore学习-芯片启动流程

本文以TC36X为例,介绍Tricore芯片从上电到运行到main函数的过程。Tricore有自带的BROM存储启动代码SSW,复位后执行。SSW读取DFLASH UCB区的BMHD内容,根据配置决定启动方式。上电时CPU0默认开启执行SSW,之后多核CPU执行各自的main函数,后续还需研究共享资源访问等问题。

第一次接触Tricore, 学习下从芯片上电到运行到main函数的过程,本文以TC36X为例,具体可参考英飞凌官方的Infineon-AURIX_TC3xx_Part1-UserManual-v02_00-EN
首先Tricore类似三星的MPU,有一段自带的BROM,这段FLASH中存储了一段固化的启动代码,称为Startup Sofrware(SSW), 这个意味着这段代码是英飞凌出厂就烧进去的,且无法覆盖。
在这里插入图片描述
然后SSW什么时候执行呢?当然是RESET的时候,英飞凌把RESET分为三种:

  • Cold (initial) power-on reset 上电复位,一切都处于初始状态
  • System reset 触发源为内部看门狗,软件主动请求,PORST输入脉冲复位等,复位后一切都处于初始状态
  • Application reset 触发源和System reset相同,只是可以通过复位前软件配置,使得复位后时钟,RAM不会跟着复位
    复位后如果一切正常就会自动执行SSW
    先放张图
    在这里插入图片描述
    SSW会去读取DFLASH UCB区的BMHD(Boot Mode Header)内容。
    在这里插入图片描述
    一共四个配置项,从BMHD0开始检测是否有效,如果BMHD0有效则使用它,否则依次检测出第一个有效的BMHD,如果都无效则需要进入BootStrap Loader刷程序,芯片无法正常启动,跳转到用户写的代码去执行
    在这里插入图片描述
    这就是一个UCB-BMHD内容,需要用户自己填写(不确定出厂是否会有默认的内容),编译链接到.section .bmhd_0_orig 并下载到DFLASH.UCB.BMHD对应的地址上去,这样下次芯片上电执行SSW才能读到正确的内容。
    找了一个例程,大家看下配置
#if defined(__HIGHTEC__)
#pragma section
#pragma section ".bmhd_0_orig" a
#endif
#if defined(__TASKING__)
#pragma section farrom "bmhd_0_orig"
#endif
#if defined(__DCC__)
#pragma section CONST ".bmhd_0_orig" far-absolute R
#endif
#if defined(__ghs__)
#pragma ghs section rodata= ".bmhd_0_orig"
#endif
const Ifx_Ssw_Bmhd bmhd_0_orig =
{
   
   
    0x003E,         /* 0x000: .bmi: Boot Mode Index (BMI)     PINDIS                                         */
    0xB359,         /* 0x002: .bmhdid: Boot Mode Header ID (CODE) = B359H                               */
    0xA0000000,     /* 0x004: .stad: User Code start address                                            */
    0xD86CBDAB,     /* 0x008: .crc: Check Result for the BMI Header (offset 000H - 007H)                */
    0x27934254,     /* 0x00C: .crcInv: Inverted Check Result for the BMI Header (offset 000H - 007H)    */
    {
   
   
        0x00000000, 0x00000000, 0x00000000, 0x00000000,        /* 0x010: Reserved (0x010 - 0x01F)       */
        0x00000000, 0x00000000, 0x00000000, 0x00000000,        /* 0x020: Reserved (0x020 - 0x02F)       */
        0x00000000, 0x00000000, 0x00000000, 0x00000000,        /* 0x030: Reserved (0x030 - 0x03F)       */
        0x00000000, 0x00000000, 0x00000000, 0x00000000,        /* 0x040: Reserved (0x040 - 0x04F)       */
        0x00000000, 0x00000000, 0x00000000, 0x00000000,        /* 0x050: Reserved (0x050 - 0x05F)       */
        0x00000000, 0x00000000, 0x00000000, 0x00000000,        
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值