1. 引言

在现代汽车电子和工业控制系统中,微控制器的启动过程至关重要。AURIX TC397 作为英飞凌推出的高性能多核微控制器,其启动机制设计精巧,确保了系统的安全性、可靠性和灵活性。本文将深入解析 AURIX TC397 的启动过程,从 BMHD 结构到 UCB 配置,为开发者提供全面的技术参考。

备注:基于英飞凌的illd的demo,团队学习内容分享,如有错误欢迎大家批评指正。也欢迎大家一起交流学习:support@softor.com.cn

2. 启动过程总览

AURIX TC397 的启动过程是一个精心设计的多阶段流程,确保芯片从复位状态安全过渡到应用程序执行状态。

2.1 启动流程图

┌─────────────────┐
│  硬件复位       │
└────────┬────────┘
         ▼
┌─────────────────┐
│ UCB 读取与验证  │
└────────┬────────┘
         ▼
┌─────────────────┐
│ BMHD 验证      │
└────────┬────────┘
         ▼
┌─────────────────┐
│ PMS 初始化     │
└────────┬────────┘
         ▼
┌─────────────────┐
│ PLL 初始化     │
└────────┬────────┘
         ▼
┌─────────────────┐
│ 内存初始化      │
└────────┬────────┘
         ▼
┌─────────────────┐
│ 核心启动       │
└────────┬────────┘
         ▼
┌─────────────────┐
│ 应用程序执行    │
└─────────────────┘

2.2 启动关键组件

测试用的开发板:

3. UCB:启动配置的核心存储

3.1 UCB 定义与作用

UCB(User Configuration Block)是 AURIX TC397 芯片中的用户配置块,相当于芯片的”配置中心”,存储了启动所需的各种配置信息。

3.2 UCB 内存布局

UCB 位于 Data Flash 区域,从地址 0xAF400000 开始,分为 14 个扇区:

UCB 扇区
起始地址
结束地址
大小
典型用途
UCB0
0xAF400000
0xAF4001FF
512字节
BMHD 配置
UCB1
0xAF400200
0xAF4003FF
512字节
BMHD 副本
UCB2
0xAF400400
0xAF4005FF
512字节
SSW 配置
UCB3
0xAF400600
0xAF4007FF
512字节
SSW 副本
UCB4
0xAF400800
0xAF4009FF
512字节
USER 配置
UCB5
0xAF400A00
0xAF400BFF
512字节
USER 副本
UCB6
0xAF400C00
0xAF400DFF
512字节
TEST 配置
UCB7
0xAF400E00
0xAF400FFF
512字节
TEST 副本
UCB8
0xAF401000
0xAF4011FF
512字节
HSMCFG 配置
UCB9
0xAF401200
0xAF4013FF
512字节
HSMCFG 副本
UCB10
0xAF401400
0xAF4015FF
512字节
其他配置
UCB11
0xAF401600
0xAF4017FF
512字节
其他配置
UCB12
0xAF401800
0xAF4019FF
512字节
其他配置
UCB13
0xAF401A00
0xAF401BFF
512字节
其他配置

3.3 UCB 内容组成

UCB 包含多个配置区域,每个区域都有原始版本(ORIG)和副本版本(COPY):

  1. 1. BMHD:启动模式和硬件描述
  2. 2. SSW:启动软件配置
  3. 3. USER:用户自定义配置
  4. 4. TEST:测试相关配置
  5. 5. HSMCFG:硬件安全模块配置
  6. 6. PFLASH:程序闪存配置
  7. 7. DFLASH:数据闪存配置
  8. 8. DBG:调试配置
  9. 9. HSM:硬件安全模块数据
  10. 10. OTP:一次性可编程内存配置

4. BMHD:启动模式的关键定义

4.1 BMHD 结构详解

BMHD(Boot Mode and Hardware Description)是启动配置的核心结构,定义了芯片的启动模式和硬件配置:

typedef struct
{

    unsigned
 short bmi;             /**< \brief 0x000: Boot Mode Index (BMI)*/
    unsigned
 short bmhdid;          /**< \brief 0x002: Boot Mode Header ID (CODE) = B359H*/
    unsigned
 int   stad;            /**< \brief 0x004: User Code start address*/
    unsigned
 int   crc;             /**< \brief 0x008: Check Result for the BMI Header (offset 000H - 007H)*/
    unsigned
 int   crcInv;          /**< \brief 0x00C: Inverted Check Result for the BMI Header (offset 000H - 007H)*/
    unsigned
 int   reserved0[60];   /**< \brief 0x010: Reserved area (60 words) till the offset 0x100*/
    unsigned
 int   pw[8];           /**< \brief 0x100: Password protection (8 words) till the offset 0x120 */
    unsigned
 int   reserved1[52];   /**< \brief 0x120: Reserved area (52 words) till the offset 0x1F0*/
    unsigned
 int   confirmation;    /**< \brief 0x1F0: 32-bit CODE, (always same)*/
} Ifx_Ssw_Bmhd;

4.2 BMHD 字段说明

字段
偏移地址
长度
说明
示例值
作用
bmi
0x000
2字节
Boot Mode Index,启动模式索引
0x00FE
定义启动模式,如从 Flash 启动、从 RAM 启动等
bmhdid
0x002
2字节
Boot Mode Header ID
0xB359
固定标识,用于识别 BMHD 结构
stad
0x004
4字节
User Code start address
0xA0000000
应用程序代码的起始地址
crc
0x008
4字节
BMI Header的CRC校验值
0x31795570
确保配置数据的完整性
crcInv
0x00C
4字节
CRC校验值取反
0xCE86AA8F
双重校验,提高可靠性
reserved0
0x010
240字节
预留区域
全0
为未来扩展保留
pw
0x100
32字节
密码保护区域
全0
用于安全启动时的密码验证
reserved1
0x120
208字节
预留区域
全0
为未来扩展保留
confirmation
0x1F0
4字节
确认码
0x43211234
固定值,用于验证 BMHD 结构

4.3 BMHD 实例

在 Ifx_Cfg_SswBmhd.c 文件中,定义了多个 BMHD 实例,提供冗余备份:

5. 启动配置选项详解

5.1 启动配置宏定义

在 Ifx_Cfg_Ssw.h 文件中,可以配置以下启动选项:

配置选项
宏定义
默认值
说明
应用场景
PMS 初始化
IFX_CFG_SSW_ENABLE_PMS_INIT
1
启用 Power Management System 初始化
所有应用,确保电源管理正确配置
PMS 初始化检查
IFX_CFG_SSW_ENABLE_PMS_INIT_CHECK
1
启用 PMS 初始化检查
关键应用,需要验证电源配置
LBIST 检查
IFX_CFG_SSW_ENABLE_LBIST
0
启用 Logic Built-In Self Test
高可靠性应用,需要逻辑测试
MONBIST 检查
IFX_CFG_SSW_ENABLE_MONBIST
0
启用 Monitor Built-In Self Test
安全关键应用,需要监控测试
MMIC 检查
IFX_CFG_SSW_ENABLE_MMIC_CHECK
0
启用 Memory Management Integrity Check
高可靠性应用,需要内存管理检查
PLL 初始化
IFX_CFG_SSW_ENABLE_PLL_INIT
1
启用 Phase-Locked Loop 初始化
所有应用,需要时钟配置
MBIST 检查
IFX_CFG_SSW_ENABLE_MBIST
0
启用 Memory Built-In Self Test
高可靠性应用,需要内存测试
SMU 告警处理
IFX_CFG_SSW_ENABLE_SMU
0
启用 Safety Management Unit 告警处理
安全关键应用,需要告警处理
EMEM 初始化
IFX_CFG_SSW_ENABLE_EMEM_INIT
0
启用 Embedded Memory 初始化
使用嵌入式内存的应用

5.2 多核启动配置

AURIX TC397 拥有 6 个 TriCore 核心,启动过程中可以配置哪些核心需要启用:

核心
宏定义
默认值
说明
TriCore0
IFX_CFG_SSW_ENABLE_TRICORE0
1
启用核心 0
TriCore1
IFX_CFG_SSW_ENABLE_TRICORE1
1
启用核心 1
TriCore2
IFX_CFG_SSW_ENABLE_TRICORE2
1
启用核心 2
TriCore3
IFX_CFG_SSW_ENABLE_TRICORE3
1
启用核心 3
TriCore4
IFX_CFG_SSW_ENABLE_TRICORE4
1
启用核心 4
TriCore5
IFX_CFG_SSW_ENABLE_TRICORE5
1
启用核心 5

6. 启动过程中的关键操作

6.1 PMS 初始化

Power Management System (PMS) 初始化是启动过程中的重要步骤,用于配置芯片的电源管理系统:

#define IFX_CFG_SSW_CALLOUT_PMS_INIT()                     \
    {                                                      \
        Ifx_Ssw_jumpToFunctionWithLink(&Ifx_Ssw_Pms_Init); \
        IFX_CFG_SSW_CALLOUT_PMS_CHECK();                   \
    }

示例:在汽车发动机控制单元中,PMS 初始化确保各个模块在正确的电压下工作,避免电压不稳定导致的系统故障。

6.2 PLL 初始化

Phase-Locked Loop (PLL) 初始化用于配置系统时钟:

#define IFX_CFG_SSW_CALLOUT_PLL_INIT()                          \
    {                                                           

        if
 (IfxScuCcu_init(&IfxScuCcu_defaultClockConfig) == 1) \
        {                                                        
            __debug();                                           
        }                                                        
    }

示例:在工业控制系统中,PLL 初始化确保系统时钟稳定,保证实时控制任务的精确执行。

6.3 核心启动

各个 TriCore 核心的启动函数定义如下:

void __Core1_start(void);
void
 __Core2_start(void);
void
 __Core3_start(void);
void
 __Core4_start(void);
void
 __Core5_start(void);

示例:在多核心应用中,Core0 可以负责系统管理,Core1 负责实时控制,Core2 负责通信,充分利用多核优势。

7. CRC 计算:确保配置完整性

7.1 CRC 计算原理

AURIX TC397 使用 IEEE 802.3 标准定义的 CRC-32 多项式进行计算。需要注意的是,虽然 TriCore CPU 本身是小端序的,但 CRC 计算要求使用大端序排列数据。

计算步骤

  1. 1. 输入数据准备:按大端序排列 bmhdid(2字节) + bmi(2字节) + stad(4字节)
  2. 2. CRC 计算:使用多项式 0x04C11DB7,初始值为 0xFFFFFFFF
  3. 3. CRC 取反:将计算得到的 CRC 值按位取反,得到 crcInv 字段的值

7.2 CRC 计算示例

示例:修改用户代码起始地址

  1. 1. 修改前
  2. 2. 修改后
  3. 3. 更新 BMHD

7.3 CRC 计算实现

AURIX 提供了内置的 CRC 计算函数:

IFX_INLINE uint32 IfxCpu_calculateCrc32(uint32 *startaddress, uint8 length) 
{
    uint32 returnvalue = 0; /* set seed value to 0 */
    for
 (;length > 0; length--) 
    {
        /* calculate the CRC over all data */

        __asm__ ("CRC32B.W %0,%0,%1" : "+d" (returnvalue) : "d" (*startaddress));
        startaddress++;
    }
    return
 returnvalue;
}

8. UCB 修改指南

8.1 UCB 修改步骤

要修改 UCB 中的启动项等内容,需要按照以下步骤进行:

  1. 1. 解锁 UCB
  2. 2. 擦除 UCB 扇区
  3. 3. 修改配置数据
  4. 4. 编程 UCB 扇区
  5. 5. 验证修改
  6. 6. 锁定 UCB

8.2 UCB 修改注意事项

  1. 1. 备份原数据
  2. 2. CRC 校验
  3. 3. 数据一致性
  4. 4. 访问权限
  5. 5. 电源稳定性
  6. 6. 安全性

8.3 UCB 修改示例

示例:修改启动模式为从 RAM 启动

  1. 1. 确定修改内容
  2. 2. 计算新的 CRC 值
  3. 3. 执行修改步骤

9. 启动优化策略

9.1 启动时间优化

  1. 1. 禁用不需要的自检
  2. 2. 优化 PLL 配置
  3. 3. 减少启动初始化步骤

9.2 可靠性提升

  1. 1. 启用冗余机制
  2. 2. 使用密码保护
  3. 3. 增强错误检测

9.3 调试便利性

  1. 1. 添加启动日志
  2. 2. 配置调试模式
  3. 3. 使用开发工具

10. 实际应用案例

10.1 汽车发动机控制单元

应用需求:快速启动、高可靠性、实时控制

启动配置

优化策略

10.2 工业自动化控制器

应用需求:稳定性、可预测性、安全认证

启动配置

优化策略

10.3 新能源汽车电池管理系统

应用需求:安全性、实时性、低功耗

启动配置

优化策略

11. 总结

AURIX TC397 芯片的启动机制是一个精心设计的系统,通过 UCB 和 BMHD 等结构实现了灵活、可靠的启动配置。了解和掌握这些机制,对于开发高质量的 AURIX 应用至关重要。

通过本文的解析,我们可以看到:

  1. 1. UCB 作为配置中心,存储了启动所需的各种配置信息,提供了冗余备份机制
  2. 2. BMHD 定义了启动模式和硬件配置,是启动过程的核心
  3. 3. 启动流程 包括硬件复位、UCB 读取、BMHD 验证、PMS 初始化、PLL 初始化、内存初始化、核心启动和应用程序执行
  4. 4. CRC 计算 确保了配置数据的完整性,是启动验证的重要环节
  5. 5. UCB 修改 需要遵循严格的步骤,确保数据一致性和安全性
  6. 6. 优化策略 可以根据应用需求调整启动配置,平衡启动时间和可靠性

掌握这些知识,开发者可以根据具体应用场景,优化 AURIX TC397 的启动过程,实现更高效、更可靠的系统设计。


如果大家关于英飞凌tc2xx tc3xx tc4xx遇到编译 调试器 测试 烧录等问题欢迎一起交流学习:support@softor.com.cn ; tianpengbo@softor.com.cn

作者与交流

作者:tianpengbo / 田朋博。大家如果在项目中遇到相关技术问题,欢迎联系我交流。
support@softor.com.cn
tianpengbo@softor.com.cn

作者与交流

作者:tianpengbo / 田朋博。大家如果在项目中遇到相关技术问题,欢迎联系我交流。
support@softor.com.cn
tianpengbo@softor.com.cn

在线留言