Aurix tc397 启动机制深度解析:bmhd 到 ucb 的完整指南

1. 引言

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

2. 启动过程总览

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

2.1 启动流程图

2.2 启动关键组件

  • UCB (User Configuration Block):用户配置块,存储启动配置和硬件描述

  • BMHD (Boot Mode and Hardware Description):启动模式和硬件描述结构

  • SSW (Startup Software):启动软件,控制启动流程

  • PMS (Power Management System):电源管理系统

  • PLL (Phase-Locked Loop):锁相环,用于时钟配置

测试用的开发板:

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. BMHD:启动模式和硬件描述

  2. SSW:启动软件配置

  3. USER:用户自定义配置

  4. TEST:测试相关配置

  5. HSMCFG:硬件安全模块配置

  6. PFLASH:程序闪存配置

  7. DFLASH:数据闪存配置

  8. DBG:调试配置

  9. HSM:硬件安全模块数据

  10. OTP:一次性可编程内存配置

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

4.1 BMHD 结构详解

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

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 实例,提供冗余备份:

  • • bmhd_0_orig, bmhd_0_copy

  • • bmhd_1_orig, bmhd_1_copy

  • • bmhd_2_orig, bmhd_2_copy

  • • bmhd_3_orig, bmhd_3_copy

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) 初始化是启动过程中的重要步骤,用于配置芯片的电源管理系统:

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

6.2 PLL 初始化

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

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

6.3 核心启动

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

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

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

7.1 CRC 计算原理

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

计算步骤

  1. 输入数据准备:按大端序排列 bmhdid(2字节) + bmi(2字节) + stad(4字节)

  2. CRC 计算:使用多项式 0x04C11DB7,初始值为 0xFFFFFFFF

  3. CRC 取反:将计算得到的 CRC 值按位取反,得到 crcInv 字段的值

7.2 CRC 计算示例

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

  1. 修改前:

    • bmi: 0x00FE

    • bmhdid: 0xB359

    • stad: 0xA0000000

    • CRC: 0x31795570

    • CRC Inv: 0xCE86AA8F

  2. 修改后:

    • bmi: 0x00FE

    • bmhdid: 0xB359

    • stad: 0xA0010000

    • 输入数据(大端序):0xB35900FEA0010000

    • 计算 CRC: 假设为 0x12345678

    • 计算 CRC Inv: 0xEDCBA987

  3. 更新 BMHD:

    • 修改 stad 字段为 0xA0010000

    • 修改 crc 字段为 0x12345678

    • 修改 crcInv 字段为 0xEDCBA987

7.3 CRC 计算实现

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

8. UCB 修改指南

8.1 UCB 修改步骤

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

  1. 解锁 UCB:
  • 通过 DMU 寄存器解锁 UCB 访问权限

  • 例如:修改 DMU_SF_CONTROL.LCKHSMUCB 寄存器

  1. 擦除 UCB 扇区:

    • 使用 Flash 擦除命令擦除需要修改的 UCB 扇区

    • 注意:UCB 扇区大小为 512 字节

  2. 修改配置数据:

    • 准备修改后的配置数据,如 BMHD 结构

    • 确保正确计算 CRC 值

  3. 编程 UCB 扇区:

    • 使用 Flash 编程命令将新的配置数据写入 UCB 扇区

    • 同时更新原始版本和副本版本,确保数据一致性

  4. 验证修改:

    • 读取 UCB 内容,验证修改是否成功

    • 检查 CRC 校验是否正确

  5. 锁定 UCB:

    • 重新锁定 UCB 访问权限,防止意外修改

8.2 UCB 修改注意事项

  1. 备份原数据:

    • 在修改 UCB 前,备份原始 UCB 数据

    • 以便在修改失败时恢复

  2. CRC 校验:

    • 修改 BMHD 等结构后,必须重新计算 CRC 值

    • CRC 计算错误会导致启动失败

  3. 数据一致性:

    • 确保原始版本和副本版本的配置数据一致

    • 不一致的配置可能导致启动时的不确定性

  4. 访问权限:

    • 确保有正确的 UCB 访问权限

    • 某些 UCB 区域可能有额外的保护机制

  5. 电源稳定性:

    • 在修改 UCB 过程中,确保电源稳定

    • 电源中断可能导致 UCB 数据损坏

  6. 安全性:

    • 注意保护敏感配置信息

    • 避免在 UCB 中存储敏感数据

8.3 UCB 修改示例

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

  1. 1. 确定修改内容:

    • 将 bmi 字段修改为 RAM 启动模式的值

    • 更新 stad 字段为 RAM 中的起始地址

  2. 2. 计算新的 CRC 值:

    • 准备输入数据:bmhdid + 新的 bmi + 新的 stad

    • 使用 CRC-32 算法计算

  3. 3. 执行修改步骤:

    • 解锁 UCB

    • 擦除包含 BMHD 的 UCB 扇区

    • 写入修改后的 BMHD 数据

    • 同时更新原始版本和副本版本

    • 验证修改

    • 锁定 UCB

9. 启动优化策略

9.1 启动时间优化

  1. 禁用不需要的自检:
  • 对于非安全关键应用,可以禁用 LBIST、MBIST 等自检功能

  • 示例:在娱乐系统中,快速启动比全面自检更重要

  1. 优化 PLL 配置:

    • 根据应用需求选择合适的时钟频率

    • 示例:在低功耗应用中,使用较低的时钟频率

  2. 减少启动初始化步骤:

    • 只初始化必要的模块

    • 示例:在简单控制应用中,跳过不必要的外设初始化

9.2 可靠性提升

  1. 启用冗余机制:

    • 确保 UCB 中的原始版本和副本版本一致

    • 示例:在安全关键应用中,启用所有可用的冗余机制

  2. 使用密码保护:

    • 为 BMHD 设置密码,防止未授权的代码执行

    • 示例:在支付系统中,使用密码保护防止恶意代码注入

  3. 增强错误检测:

    • 启用更多的自检和错误检测功能

    • 示例:在医疗设备中,启用全面的错误检测

9.3 调试便利性

  1. 添加启动日志:

    • 在启动过程的关键节点添加调试信息

    • 示例:在开发阶段,添加详细的启动日志

  2. 配置调试模式:

    • 在开发阶段启用调试模式

    • 示例:使用 JTAG 调试时,配置合适的调试选项

  3. 使用开发工具:

    • 利用 tasking和isystem调试器 等工具进行启动分析

    • 示例:使用启动时间分析工具优化启动流程

10. 实际应用案例

10.1 汽车发动机控制单元

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

启动配置:

  • 启用 PMS 和 PLL 初始化

  • 禁用不必要的自检功能以加快启动

  • 配置所有核心启动,分担不同的控制任务

  • 使用密码保护防止未授权修改

优化策略:

  • 针对不同的启动阶段设置不同的时钟频率

  • 利用多核并行处理能力加速启动过程

  • 实现故障安全机制,确保在启动失败时能够安全降级

10.2 工业自动化控制器

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

启动配置:

  • 启用全面的自检功能

  • 配置详细的错误检测和报告机制

  • 启用所有核心,实现复杂的控制算法

优化策略:

  • 实现启动时间监控和优化

  • 配置冗余启动路径

  • 结合 UCB 和 BMHD 实现安全启动

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

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

启动配置:

  • 启用安全相关的自检功能

  • 配置低功耗启动模式

  • 实现快速启动以满足车辆需求

优化策略:

  • 根据电池状态调整启动配置

  • 实现分级启动,优先初始化关键安全功能

  • 利用 UCB 存储电池特性参数

11. 总结

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

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

  1. UCB 作为配置中心,存储了启动所需的各种配置信息,提供了冗余备份机制

  2. BMHD 定义了启动模式和硬件配置,是启动过程的核心

  3. 启动流程 包括硬件复位、UCB 读取、BMHD 验证、PMS 初始化、PLL 初始化、内存初始化、核心启动和应用程序执行

  4. CRC 计算 确保了配置数据的完整性,是启动验证的重要环节

  5. UCB 修改 需要遵循严格的步骤,确保数据一致性和安全性

  6. 优化策略 可以根据应用需求调整启动配置,平衡启动时间和可靠性

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

原创:SOFTOR