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):
-
BMHD:启动模式和硬件描述
-
SSW:启动软件配置
-
USER:用户自定义配置
-
TEST:测试相关配置
-
HSMCFG:硬件安全模块配置
-
PFLASH:程序闪存配置
-
DFLASH:数据闪存配置
-
DBG:调试配置
-
HSM:硬件安全模块数据
-
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 计算要求使用大端序排列数据。
计算步骤:
-
输入数据准备:按大端序排列
bmhdid(2字节) +bmi(2字节) +stad(4字节) -
CRC 计算:使用多项式 0x04C11DB7,初始值为 0xFFFFFFFF
-
CRC 取反:将计算得到的 CRC 值按位取反,得到 crcInv 字段的值
7.2 CRC 计算示例
示例:修改用户代码起始地址
-
修改前:
-
bmi: 0x00FE
-
bmhdid: 0xB359
-
stad: 0xA0000000
-
CRC: 0x31795570
-
CRC Inv: 0xCE86AA8F
-
-
修改后:
-
bmi: 0x00FE
-
bmhdid: 0xB359
-
stad: 0xA0010000
-
输入数据(大端序):0xB35900FEA0010000
-
计算 CRC: 假设为 0x12345678
-
计算 CRC Inv: 0xEDCBA987
-
-
更新 BMHD:
-
修改 stad 字段为 0xA0010000
-
修改 crc 字段为 0x12345678
-
修改 crcInv 字段为 0xEDCBA987
-
7.3 CRC 计算实现
AURIX 提供了内置的 CRC 计算函数:
8. UCB 修改指南
8.1 UCB 修改步骤
要修改 UCB 中的启动项等内容,需要按照以下步骤进行:
- 解锁 UCB:
-
通过 DMU 寄存器解锁 UCB 访问权限
-
例如:修改
DMU_SF_CONTROL.LCKHSMUCB寄存器
-
擦除 UCB 扇区:
-
使用 Flash 擦除命令擦除需要修改的 UCB 扇区
-
注意:UCB 扇区大小为 512 字节
-
-
修改配置数据:
-
准备修改后的配置数据,如 BMHD 结构
-
确保正确计算 CRC 值
-
-
编程 UCB 扇区:
-
使用 Flash 编程命令将新的配置数据写入 UCB 扇区
-
同时更新原始版本和副本版本,确保数据一致性
-
-
验证修改:
-
读取 UCB 内容,验证修改是否成功
-
检查 CRC 校验是否正确
-
-
锁定 UCB:
- 重新锁定 UCB 访问权限,防止意外修改
8.2 UCB 修改注意事项
-
备份原数据:
-
在修改 UCB 前,备份原始 UCB 数据
-
以便在修改失败时恢复
-
-
CRC 校验:
-
修改 BMHD 等结构后,必须重新计算 CRC 值
-
CRC 计算错误会导致启动失败
-
-
数据一致性:
-
确保原始版本和副本版本的配置数据一致
-
不一致的配置可能导致启动时的不确定性
-
-
访问权限:
-
确保有正确的 UCB 访问权限
-
某些 UCB 区域可能有额外的保护机制
-
-
电源稳定性:
-
在修改 UCB 过程中,确保电源稳定
-
电源中断可能导致 UCB 数据损坏
-
-
安全性:
-
注意保护敏感配置信息
-
避免在 UCB 中存储敏感数据
-
8.3 UCB 修改示例
示例:修改启动模式为从 RAM 启动
-
1. 确定修改内容:
-
将 bmi 字段修改为 RAM 启动模式的值
-
更新 stad 字段为 RAM 中的起始地址
-
-
2. 计算新的 CRC 值:
-
准备输入数据:bmhdid + 新的 bmi + 新的 stad
-
使用 CRC-32 算法计算
-
-
3. 执行修改步骤:
-
解锁 UCB
-
擦除包含 BMHD 的 UCB 扇区
-
写入修改后的 BMHD 数据
-
同时更新原始版本和副本版本
-
验证修改
-
锁定 UCB
-
9. 启动优化策略
9.1 启动时间优化
- 禁用不需要的自检:
-
对于非安全关键应用,可以禁用 LBIST、MBIST 等自检功能
-
示例:在娱乐系统中,快速启动比全面自检更重要
-
优化 PLL 配置:
-
根据应用需求选择合适的时钟频率
-
示例:在低功耗应用中,使用较低的时钟频率
-
-
减少启动初始化步骤:
-
只初始化必要的模块
-
示例:在简单控制应用中,跳过不必要的外设初始化
-
9.2 可靠性提升
-
启用冗余机制:
-
确保 UCB 中的原始版本和副本版本一致
-
示例:在安全关键应用中,启用所有可用的冗余机制
-
-
使用密码保护:
-
为 BMHD 设置密码,防止未授权的代码执行
-
示例:在支付系统中,使用密码保护防止恶意代码注入
-
-
增强错误检测:
-
启用更多的自检和错误检测功能
-
示例:在医疗设备中,启用全面的错误检测
-
9.3 调试便利性
-
添加启动日志:
-
在启动过程的关键节点添加调试信息
-
示例:在开发阶段,添加详细的启动日志
-
-
配置调试模式:
-
在开发阶段启用调试模式
-
示例:使用 JTAG 调试时,配置合适的调试选项
-
-
使用开发工具:
-
利用 tasking和isystem调试器 等工具进行启动分析
-
示例:使用启动时间分析工具优化启动流程
-
10. 实际应用案例
10.1 汽车发动机控制单元
应用需求:快速启动、高可靠性、实时控制
启动配置:
-
启用 PMS 和 PLL 初始化
-
禁用不必要的自检功能以加快启动
-
配置所有核心启动,分担不同的控制任务
-
使用密码保护防止未授权修改
优化策略:
-
针对不同的启动阶段设置不同的时钟频率
-
利用多核并行处理能力加速启动过程
-
实现故障安全机制,确保在启动失败时能够安全降级
10.2 工业自动化控制器
应用需求:稳定性、可预测性、安全认证
启动配置:
-
启用全面的自检功能
-
配置详细的错误检测和报告机制
-
启用所有核心,实现复杂的控制算法
优化策略:
-
实现启动时间监控和优化
-
配置冗余启动路径
-
结合 UCB 和 BMHD 实现安全启动
10.3 新能源汽车电池管理系统
应用需求:安全性、实时性、低功耗
启动配置:
-
启用安全相关的自检功能
-
配置低功耗启动模式
-
实现快速启动以满足车辆需求
优化策略:
-
根据电池状态调整启动配置
-
实现分级启动,优先初始化关键安全功能
-
利用 UCB 存储电池特性参数
11. 总结
AURIX TC397 芯片的启动机制是一个精心设计的系统,通过 UCB 和 BMHD 等结构实现了灵活、可靠的启动配置。了解和掌握这些机制,对于开发高质量的 AURIX 应用至关重要。
通过本文的解析,我们可以看到:
-
UCB 作为配置中心,存储了启动所需的各种配置信息,提供了冗余备份机制
-
BMHD 定义了启动模式和硬件配置,是启动过程的核心
-
启动流程 包括硬件复位、UCB 读取、BMHD 验证、PMS 初始化、PLL 初始化、内存初始化、核心启动和应用程序执行
-
CRC 计算 确保了配置数据的完整性,是启动验证的重要环节
-
UCB 修改 需要遵循严格的步骤,确保数据一致性和安全性
-
优化策略 可以根据应用需求调整启动配置,平衡启动时间和可靠性
掌握这些知识,开发者可以根据具体应用场景,优化 AURIX TC397 的启动过程,实现更高效、更可靠的系统设计。
原创:SOFTOR






