【IF-SAFE-07】SMU故障管理 - 双域架构与FSP
【IF-SAFE-07】SMU故障管理 - 双域架构与FSP
英飞凌AURIX™ TC3xx功能安全专题第七篇。本文深入解析Safety Management Unit (SMU)的工作原理,涵盖双域架构设计、FSP故障信号协议、告警分类与响应机制、MCAL配置实践,为构建符合ISO 26262要求的故障管理系统提供完整指南。本文约12000字,建议收藏。
系列导航
| 序号 | 文章 | 状态 |
|---|---|---|
| IF-SAFE-01 | 功能安全入门:ISO 26262与TC3xx安全架构 | 已发布 |
| IF-SAFE-02 | 基础设施安全:电源/时钟/SCU的守护 | 已发布 |
| IF-SAFE-03 | Lockstep双核锁步:ASIL-D核心保障 | 已发布 |
| IF-SAFE-04 | ECC全覆盖:从CPU到外设的数据完整性 | 已发布 |
| IF-SAFE-05 | MTU内存测试:启动与运行时的自检 | 已发布 |
| IF-SAFE-06 | 安全IO:采集/执行/通信保护链 | 已发布 |
| IF-SAFE-07 | SMU故障管理:双域架构与FSP | 本文 |
| IF-SAFE-08 | 系统级安全:PMIC联动与安全路径 | 规划中 |
| IF-SAFE-09 | 共因失效与FMEDA | 规划中 |
| IF-SAFE-10 | 安全认证实战:从需求到交付 | 规划中 |
图0:本文内容思维导图
一、为什么需要SMU
1.1 功能安全对故障管理的要求
根据ISO 26262标准,安全关键系统必须具备故障检测、故障响应、故障恢复三大能力:
┌─────────────────────────────────────────────────────────────────────┐ │ ISO 26262 故障管理要求 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ 1. 故障检测 (Fault Detection) │ │ └─ 硬件自检、软件监控、冗余比较 │ │ │ │ 2. 故障响应 (Fault Reaction) │ │ ├─ 立即动作:复位、看门狗触发 │ │ ├─ 延迟动作:NMI、应用层回调 │ │ └─ 报告机制:日志记录、状态上报 │ │ │ │ 3. 故障恢复 (Recovery) │ │ ├─ 自动恢复:故障清除后恢复正常 │ │ └─ 诊断恢复:软件介入处理 │ │ │ └─────────────────────────────────────────────────────────────────────┘1.2 SMU在系统中的位置
图1:SMU双域架构全景图
SMU (Safety Management Unit) 是TC3xx芯片内部的集中式故障管理模块,负责:
| 职责 | 描述 |
|---|---|
| 统一收集 | 汇聚所有模块的故障信号 |
| 分类处理 | 按告警类型执行对应响应 |
| 外部通信 | 通过ErrorPin向PMIC报告 |
| 状态监控 | 提供运行时状态查询 |
1.3 与SCU/PMIC的联动
┌─────────────────────────────────────────────────────────────────────┐ │ TC3xx 故障管理联动机制 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ CPU │ │ DMA │ │ ADC │ │ CAN │ │ │ │ Trap │ │ Error │ │ Error │ │ Error │ │ │ └───┬─────┘ └───┬─────┘ └───┬─────┘ └───┬─────┘ │ │ │ │ │ │ │ │ └───────────────┴───────────────┴───────────────┘ │ │ │ │ │ ┌──────────▼──────────┐ │ │ │ SMU │ │ │ │ Safety Management │ │ │ │ Unit │ │ │ └──────────┬──────────┘ │ │ │ │ │ ┌──────────────────┼──────────────────┐ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ SCU │ │ ErrorPin │ │ Application│ │ │ │ System Reset│ │ (External)│ │ Callback │ │ │ └─────────────┘ └──────┬──────┘ └─────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────┐ │ │ │ PMIC │ │ │ │ TLF35584等 │ │ │ └─────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘二、双域架构详解
2.1 Safety Domain vs Application Domain
图2:TC3xx Safety Domain与Application Domain架构
TC3xx采用双域架构实现安全与应用分离:
| 特性 | Safety Domain (安全域) | Application Domain (应用域) |
|---|---|---|
| 定位 | 负责系统安全监控 | 负责应用功能执行 |
| 资源 | Safety Island, HSM | CPU0~CPU5, 外设 |
| 访问权限 | 受限配置,仅安全关键访问 | 全功能配置 |
| 独立性 | 与应用域物理隔离 | 可被Safety Domain干预 |
| 典型模块 | Safety WDT, PMIC接口 | CAN, GTM, ADC等 |
2.2 Safety Island安全岛
Safety Island是TC3xx芯片内部的一个独立子系统:
┌─────────────────────────────────────────────────────────────────────┐ │ Safety Island 内部结构 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ Safety Island │ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ HSM │ │ Safety │ │ PMIC │ │ │ │ │ │ (ARM │ │ SCU │ │ Interface │ │ │ │ │ │ Cortex-M) │ │ │ │ │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ │ │ │ │ └──────────────────┼──────────────────┘ │ │ │ │ │ │ │ │ │ ┌──────▼──────┐ │ │ │ │ │ Safety │ │ │ │ │ │ WDT x2 │ │ │ │ │ └─────────────┘ │ │ │ │ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ │ 主要功能: │ │ • 独立于主CPU的安全监控 │ │ • 加密/解密、安全通信 │ │ • 完整性校验 (Secure Boot) │ │ • 看门狗喂狗 │ │ │ └─────────────────────────────────────────────────────────────────────┘2.3 域间通信机制
双域之间通过受控接口进行通信:
| 接口类型 | 方向 | 用途 |
|---|---|---|
| RIF (Register Interface) | App→Safety | 配置安全功能 |
| SRI (Safety Island Response) | Safety→App | 安全事件通知 |
| ErrorPin | 双向 | 故障状态同步 |
2.4 硬件隔离机制
┌─────────────────────────────────────────────────────────────────────┐ │ 硬件隔离层级 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ Level 1: 电源/时钟隔离 │ │ ├─ Safety Domain 可独立供电 │ │ └─ Safety Domain 可独立时钟 │ │ │ │ Level 2: 总线访问隔离 │ │ ├─ Safety域寄存器映射到独立地址空间 │ │ └─ 应用域无法直接访问Safety关键寄存器 │ │ │ │ Level 3: 中断/陷阱隔离 │ │ ├─ Safety域产生独立的NMI/Trap │ │ └─ 与应用域中断向量表物理分离 │ │ │ │ Level 4: 复位隔离 │ │ ├─ Safety域可独立复位应用域 │ │ └─ 应用域无法复位Safety域 │ │ │ └─────────────────────────────────────────────────────────────────────┘三、FSP故障信号协议
3.1 FSP概述
FSP (Fault Signaling Protocol) 是SMU与外部PMIC通信的标准协议,用于:
- 通知外部PMIC芯片内部故障状态
- 触发PMIC进入安全状态(如 Limp Home 模式)
- 实现系统级安全响应协同
3.2 FSP状态机
图3:FSP状态机与时序图
状态定义:
| 状态 | ErrorPin | 含义 | 后续动作 |
|---|---|---|---|
| Normal | High | 正常工作 | 继续监控 |
| Active | Low | 检测到故障 | 等待T1超时 |
| Pending | Low | 故障确认,等待清除 | 等待清除命令 |
| Recovery | Toggle | 恢复中 | 检测恢复成功 |
状态转换条件:
// FSP状态转换伪代码 typedef enum { SMU_FSP_NORMAL = 0, SMU_FSP_ACTIVE, SMU_FSP_PENDING, SMU_FSP_RECOVERY } SmuFspState; // 故障发生 if (fault_detected && current_state == SMU_FSP_NORMAL) { set_state(SMU_FSP_ACTIVE); start_timer(T1); } // T1超时 if (timer_T1_expired && current_state == SMU_FSP_ACTIVE) { set_state(SMU_FSP_PENDING); notify_pmic(); // ErrorPin拉低 } // 故障清除 if (fault_cleared && current_state == SMU_FSP_PENDING) { set_state(SMU_FSP_RECOVERY); start_timer(T2); } // 恢复成功 if (timer_T2_expired && no_new_fault && current_state == SMU_FSP_RECOVERY) { set_state(SMU_FSP_NORMAL); release_pmic(); // ErrorPin恢复 }3.3 ErrorPin时序要求
| 参数 | 典型值 | 说明 |
|---|---|---|
| T1 | 1ms ~ 32ms | 故障激活到Pending的时间 |
| T2 | 应用定义 | 恢复检测时间 |
| ErrorPin Low Width | > 100μs | PMIC检测最小脉宽 |
3.4 PMC联动配置
// ErrorPin与PMIC联动配置 typedef struct { uint8 enable; // 使能ErrorPin功能 uint8 active_high; // 极性:High=故障 / Low=故障 uint16 t1_delay; // T1延迟 (ms) uint16 t2_timeout; // T2超时 (ms) uint8 failure_counter; // 连续失败阈值 } Smu_FspConfigType; // PMC联动场景 typedef enum { PMC_ACTION_NONE = 0, // 无动作 PMC_ACTION_LIMP_HOME, // 进入跛行模式 PMC_ACTION_SHUTDOWN, // 关闭系统 PMC_ACTION_RESET // 触发系统复位 } Smu_PmcActionType;四、告警组与错误分类
4.1 SMU告警组
图4:SMU告警组分类全景图
SMU将故障源划分为多个告警组 (Alarm Group):
| 告警组 | 描述 | 故障源 |
|---|---|---|
| AG0 | CPU陷阱 | 取指异常、数据异常、系统异常 |
| AG1 | PMU/存储 | ECC错误、MPU违规 |
| AG2 | 时钟/PLL | PLL失锁、时钟监测失败 |
| AG3 | 温度/电压 | 过温、过压、欠压 |
| AG4 | 通信错误 | CAN超时、SPI错误 |
| AG5 | 自定义 | 用户定义的故障条件 |
| AG6 | 通信安全 | SafetyCAN错误 |
| AG7 | 执行器 | PWM监控、输出短路 |
4.2 AG0 CPU陷阱告警详解
// CPU陷阱告警映射 typedef enum { SMU_CPU_TRAP_ILLOPR = 0, // 非法操作码 SMU_CPU_TRAP_MUNADD = 1, // 未对齐访问 SMU_CPU_TRAP_MEM = 2, // 内存访问权限违规 SMU_CPU_TRAP_GEN = 3, // 通用陷阱 SMU_CPU_TRAP_IOPR = 4, // I/O访问违规 SMU_CPU_TRAP_CONTEXT = 5, // 上下文管理错误 SMU_CPU_TRAP_STACK = 6, // 栈溢出/下溢 SMU_CPU_TRAP_SYSCALL = 7, // 系统调用错误 } Smu_CpuTrapType;4.3 AG1 PMU/存储告警
| 错误类型 | 来源 | SMU响应 |
|---|---|---|
| 单比特错误 (SED) | ECC | 自动纠正,记录日志 |
| 双比特错误 (DED) | ECC | 触发NMI,复位可选 |
| 地址解码错误 | 总线 | 触发系统复位 |
| MPU违规 | CPU | 触发Trap,通知SMU |
4.4 告警配置结构
// SMU告警配置 typedef struct { uint8 enable; // 告警使能 uint8 sensitivity; // 触发灵敏度 uint16 debounce_time; // 去抖时间 uint8 reaction; // 响应动作 uint8 action_counter; // 动作计数器阈值 void (*callback)(uint8 ag, uint8 ai); // 回调函数 } Smu_AlarmConfigType; // 响应动作枚举 typedef enum { SMU_ACTION_NONE = 0, // 无动作 SMU_ACTION_NMI = 1, // 触发NMI SMU_ACTION_RESET = 2, // 系统复位 SMU_ACTION_WDT_TRIGGER = 3, // 触发看门狗 SMU_ACTION_CALLBACK = 4, // 应用回调 SMU_ACTION_ERRPIN = 5, // ErrorPin报告 SMU_ACTION_ALL = 6, // 所有动作 } Smu_ReactionType;五、故障响应与恢复机制
5.1 分级响应策略
SMU采用分级响应机制,根据故障严重程度执行不同动作:
┌─────────────────────────────────────────────────────────────────────┐ │ SMU 故障响应分级 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ Level 1: 警告级别 (Warning) │ │ ├─ 响应:应用回调 + 日志记录 │ │ └─ 系统:继续运行 │ │ │ │ Level 2: 错误级别 (Error) │ │ ├─ 响应:NMI中断 + 状态保存 │ │ └─ 系统:进入安全模式 │ │ │ │ Level 3: 严重级别 (Critical) │ │ ├─ 响应:系统复位 + PMIC联动 │ │ └─ 系统:重启恢复 │ │ │ │ Level 4: 致命级别 (Fatal) │ │ ├─ 响应:进入LimpHome + 禁止重启 │ │ └─ 系统:跛行回家 │ │ │ └─────────────────────────────────────────────────────────────────────┘5.2 NMI不可屏蔽中断
NMI是SMU触发最高优先级错误处理的方式:
// NMI处理函数示例 void SMU_NMI_Handler(void) { // 获取触发告警信息 Smu_AlarmInfoType alarm_info; SMU_GetCurrentAlarm(&alarm_info); // 保存关键状态 save_critical_context(); // 记录故障日志 log_fault_event(alarm_info.alarm_group, alarm_info.alarm_index, alarm_info.timestamp); // 根据告警类型执行对应处理 switch (alarm_info.alarm_group) { case SMU_AG0_CPU_TRAP: handle_cpu_trap(alarm_info); break; case SMU_AG1_PMU_MEM: handle_memory_error(alarm_info); break; case SMU_AG2_CLOCK: handle_clock_failure(); break; default: handle_generic_error(alarm_info); break; } // 触发系统复位或进入安全模式 if (should_reset_system()) { SCU_SystemReset(RESET_ORIGIN_SMU); } }5.3 复位机制
| 复位类型 | 触发源 | 影响范围 | 典型用途 |
|---|---|---|---|
| Application Reset | SW | 单核/模块 | recoverable errors |
| System Reset | SCU | 全系统 | SMU告警、WD超时 |
| Chip Reset | PMIC | 全芯片 | 严重故障、VBAT复位 |
// SMU触发系统复位 void SMU_TriggerSystemReset(void) { // 设置复位原因 SCU_RST->RSTSTAT.B.RST = RST_CAUSE_SMU; // 触发复位 SCU->PRST0.B.CRST0 = 1; // 等待复位生效 while(1); } // 复位后诊断 void POST_Reset_Diagnosis(void) { // 读取复位原因 uint32 rst_cause = SCU_RST->RSTSTAT.U; if (rst_cause & RST_CAUSE_SMU) { // SMU触发的复位 - 需要分析日志 log_reset_reason(); run_postmortem(); } }5.4 看门狗联动
// SMU与看门狗联动 void SMU_WDT_Coordination(void) { // 发生严重故障时,立即触发看门狗 if (critical_fault_detected) { // 停止喂狗,让看门狗超时复位 disable_wdt_service(); // 或者直接触发看门狗复位 trigger_wdt_reset(); } // 恢复过程中,延长看门狗超时时间 if (recovery_in_progress) { set_wdt_timeout(RECOVERY_TIMEOUT); } }六、配置与编程实践
6.1 MCAL接口层
SMU的MCAL层提供标准化的API接口:
// SMU MCAL 头文件 #include "Smu.h" // 初始化 void Smu_Init(const Smu_ConfigType *ConfigPtr); // 配置告警 void Smu_SetAlarmConfig(uint8 AlarmGroup, uint8 AlarmIndex, const Smu_AlarmConfigType *AlarmConfig); // 触发告警 (软件方式) void Smu_SetAlarm(uint8 AlarmGroup, uint8 AlarmIndex); // 清除告警 void Smu_ClearAlarm(uint8 AlarmGroup, uint8 AlarmIndex); // 获取告警状态 Smu_AlarmStatusType Smu_GetAlarmStatus(uint8 AlarmGroup, uint8 AlarmIndex); // 获取FSP状态 Smu_FspStateType Smu_GetFspState(void); // 获取错误计数 uint32 Smu_GetErrorCounter(uint8 AlarmGroup, uint8 AlarmIndex);6.2 配置XML模板
<!-- SMU配置片段 (EB tresos Studio导出) --> <SMU> <SmuGeneral> <SmuCoreEnable>TRUE</SmuCoreEnable> <SmuFspEnable>TRUE</SmuFspEnable> </SmuGeneral> <SmuFspConfiguration> <FspConfig> <T1Delay>2</T1Delay> <!-- 2ms --> <T2Timeout>100</T2Timeout> <!-- 100ms --> <FailureThreshold>3</FailureThreshold> <ErrorPinPolarity>LOW_ACTIVE</ErrorPinPolarity> </FspConfig> </SmuFspConfiguration> <SmuAlarmConfiguration> <!-- AG0 CPU陷阱配置 --> <Alarm Group="0" Index="0"> <Enable>TRUE</Enable> <Sensitivity>EDGE</Sensitivity> <Reaction>SMU_ACTION_NMI</Reaction> <Callback>CPU_Trap_Callback</Callback> </Alarm> <!-- AG1 内存错误配置 --> <Alarm Group="1" Index="0"> <Enable>TRUE</Enable> <Sensitivity>LEVEL</Sensitivity> <Reaction>SMU_ACTION_RESET | SMU_ACTION_ERRPIN</Reaction> </Alarm> <!-- AG2 时钟故障配置 --> <Alarm Group="2" Index="0"> <Enable>TRUE</Enable> <Reaction>SMU_ACTION_RESET</Reaction> </Alarm> </SmuAlarmConfiguration> </SMU>6.3 状态监控API
// 运行时状态监控 typedef struct { uint32 active_alarms[8]; // 各告警组激活状态 uint32 alarm_count[8]; // 各告警组计数 uint32 fsp_state; // FSP当前状态 uint32 last_fault_time; // 上次故障时间 uint32 system_uptime; // 系统运行时间 uint8 diagnostic_status; // 自诊断状态 } Smu_RuntimeStatusType; // 获取运行时状态 void Smu_GetRuntimeStatus(Smu_RuntimeStatusType *Status) { uint8 i; for (i = 0; i < 8; i++) { Status->active_alarms[i] = SMU->AG[i].STS.U; Status->alarm_count[i] = SMU->AG[i].CNT.U; } Status->fsp_state = SMU->FSPSTS.U; Status->system_uptime = get_system_time(); Status->diagnostic_status = SMU->DIAGSTS.U; } // 应用层监控任务 void SmuMonitor_Task(void) { Smu_RuntimeStatusType status; Smu_GetRuntimeStatus(&status); // 检查是否有活跃告警 for (int i = 0; i < 8; i++) { if (status.active_alarms[i] != 0) { // 报告告警 report_active_alarms(i, status.active_alarms[i]); } } // 检查FSP状态 if (status.fsp_state != SMU_FSP_NORMAL) { log_fsp_state_change(status.fsp_state); } }6.4 诊断测试
// SMU自检 - 建议在启动时执行 void SMU_DiagnosticTest(void) { // 1. 检查SMU核心健康状态 if (!SMU_CORE_HEALTHY()) { // SMU核心故障 handle_smu_core_failure(); return; } // 2. 注入测试告警 SMU_EnableTestMode(); // 注入并清除每个告警组 for (uint8 ag = 0; ag < 8; ag++) { // 注入告警 SMU_InjectAlarm(ag, 0); // 验证告警状态 if (!SMU_AlarmPending(ag, 0)) { log_error("AG%d alarm injection failed", ag); } // 清除告警 SMU_ClearAlarm(ag, 0); // 验证清除 if (SMU_AlarmPending(ag, 0)) { log_error("AG%d alarm clear failed", ag); } } SMU_DisableTestMode(); // 3. 测试ErrorPin SMU_SetErrorPin(TRUE); // 拉高 delay_us(100); if (ERROR_PIN_STATE != HIGH) { log_error("ErrorPin high test failed"); } SMU_SetErrorPin(FALSE); // 拉低 delay_us(100); if (ERROR_PIN_STATE != LOW) { log_error("ErrorPin low test failed"); } }6.5 日志记录
// SMU故障日志结构 typedef struct { uint32 timestamp; // 绝对时间戳 uint8 alarm_group; // 告警组 uint8 alarm_index; // 告警索引 uint8 reaction_taken; // 采取的动作 uint8 cpu_context; // CPU上下文信息 uint32 additional_info; // 附加信息 } Smu_FaultLogEntry; // 环形缓冲区存储最近N条日志 #define SMU_LOG_DEPTH 32 static Smu_FaultLogEntry fault_log[SMU_LOG_DEPTH]; static uint8 log_index = 0; // 记录故障事件 void Smu_LogFault(uint8 alarm_group, uint8 alarm_index, uint8 reaction) { fault_log[log_index].timestamp = get_system_timestamp(); fault_log[log_index].alarm_group = alarm_group; fault_log[log_index].alarm_index = alarm_index; fault_log[log_index].reaction_taken = reaction; fault_log[log_index].cpu_context = get_cpu_context(); fault_log[log_index].additional_info = get_additional_info(); log_index = (log_index + 1) % SMU_LOG_DEPTH; // 持久化到Flash (可选) save_to_flash(fault_log, sizeof(fault_log)); }七、SMU设计最佳实践
7.1 系统启动时的SMU初始化
// SMU初始化流程 void SMU_Init_Safe(void) { // Step 1: 配置FSP参数 Smu_FspConfigType fspConfig = { .enable = TRUE, .active_high = FALSE, // 低有效 .t1_delay = 2, // 2ms .t2_timeout = 100, // 100ms .failure_counter = 3 }; Smu_SetFspConfig(&fspConfig); // Step 2: 配置所有告警组 for (uint8 ag = 0; ag < 8; ag++) { Smu_AlarmConfigType alarmCfg = { .enable = TRUE, .sensitivity = LEVEL, .debounce_time = 10, .reaction = SMU_ACTION_CALLBACK | SMU_ACTION_ERRPIN, .callback = Alarm_Callback }; Smu_SetAlarmConfig(ag, 0, &alarmCfg); } // Step 3: 启动SMU自检 SMU_DiagnosticTest(); // Step 4: 清除所有初始告警状态 SMU_ClearAllAlarms(); }7.2 告警处理策略
// 告警回调函数 void Alarm_Callback(uint8 alarm_group, uint8 alarm_index) { // 记录告警信息 Smu_AlarmInfoType info; SMU_GetAlarmInfo(alarm_group, alarm_index, &info); // 根据告警组采取不同策略 switch (alarm_group) { case AG0_CPU_TRAP: // 致命错误,记录上下文并复位 dump_cpu_context(); SCU_SystemReset(RESET_ORIGIN_SMU); break; case AG1_PMU_MEM: // 内存错误,根据严重程度处理 if (info.severity == SEVERITY_HIGH) { SCU_SystemReset(RESET_ORIGIN_SMU); } else { log_warning("Memory error recoverable"); } break; case AG2_CLOCK: // 时钟错误,立即响应 switch_to_backup_clock(); SCU_SystemReset(RESET_ORIGIN_SMU); break; case AG4_COMM: // 通信错误,应用层处理 notify_comm_failure(info.index); break; default: log_error("Unknown alarm group: %d", alarm_group); break; } }八、总结
8.1 SMU核心要点
| 要点 | 内容 |
|---|---|
| 定位 | TC3xx集中式故障管理模块 |
| 双域架构 | Safety Domain与Application Domain物理隔离 |
| FSP协议 | 与PMIC通信的标准故障信号协议 |
| 告警分类 | 8个告警组,覆盖所有故障源 |
| 响应机制 | NMI/复位/看门狗/回调/ErrorPin多级联动 |
| MCAL支持 | 标准化API,易于集成AUTOSAR |
8.2 设计建议
| 场景 | 建议 |
|---|---|
| 告警灵敏度 | 安全关键应用设为LEVEL,避免漏报 |
| 响应时间 | T1延迟设量3-5ms,平衡响应与去抖 |
| 恢复策略 | 实现单次故障立即响应、多次故障升级机制 |
| 日志持久化 | 将故障日志写入Flash,支持离线诊断 |
| PMC联动 | 确保ErrorPin与PMIC正确连接和配置 |
8.3 系列展望
| 后续文章 | 核心内容 |
|---|---|
| IF-SAFE-08 | 系统级安全:PMIC联动与安全路径 |
| IF-SAFE-09 | 共因失效与FMEDA |
| IF-SAFE-10 | 安全认证实战:从需求到交付 |
九、技术参考
9.1 官方文档
- AURIX TC3xx User Manual Part 2 (彝起学官方)
- AN1002 - FUSA in a Nutshell (功能安全应用笔记)
- ISO 26262 Road vehicles - Functional Safety
9.2 开发资源
- EB tresos Studio - SMU配置工具
- iLLD - SMU驱动接口
- AUTOSAR BSW - SM模块
9.3 故障排查清单
┌─────────────────────────────────────────────────────────────────────┐ │ SMU 故障排查清单 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ 1. ErrorPin持续拉低 │ │ → 检查AG0-AG7各告警组状态 │ │ → 确认PMC连接正确 │ │ │ │ 2. 复位后立即再次复位 │ │ → 检查启动阶段故障 │ │ → 确认SMU初始化顺序 │ │ │ │ 3. 故障清除后重复触发 │ │ → 检查硬件故障是否持续 │ │ → 增加去抖时间配置 │ │ │ │ 4. FSP状态机卡在Pending │ │ → 确认故障清除条件满足 │ │ → 检查T2超时设置 │ │ │ └─────────────────────────────────────────────────────────────────────┘关注作者:专注汽车电子与嵌入式系统,分享AUTOSAR、AURIX、功能安全等技术干货。
本文标签:AURIX, TC3xx, SMU, 功能安全, ISO 26262, FSP, 故障管理, ASIL-D
