软件功能安全 ASIL D(Software Functional Safety)
本质与导读
本质 软件没有 FIT、没有随机失效率——所有 fault 都是 systematic(代码 bug + 流程缺陷),概率非 0 即 100%。所以 ASIL D 软件不是"算个数字",而是靠预防(流程/工具)+ 检测(测试/静态分析)+ 运行时兜底三层做全过程合规论证。论证核心三件套:MC/DC ≥ 90% + 工具 TCL1 qualified + WdgM deadline/logical supervision——缺任何一件,assessor 直接打回。
主线坐标:横轨 · 功能安全(跨站) · ↑ 全景主线
1. 为什么软件安全和硬件完全不是一回事
硬件 ASIL D 的核心问题是管随机失效率 —— FIT × DC 加权算 SPFM/LFM/PMHF。软件没有 FIT —— 一段代码要么有 bug 要么没有,bug 不会"以 100 FIT 概率出现",它要么 100% 在某条件下触发要么 0%。所以软件 ASIL D 的论证逻辑完全反过来——靠预防 bug 的产生(流程 + 工具)+ 检测残留 bug(测试 + 静态分析)+ 运行时兜底(WdgM / Stack monitor / Memory protection)。
这三个轴缺一不可:只有流程合规但 MC/DC 不够 → systematic bug 可能残留;只有高 MC/DC 但工具没 qualified → 编译器可能在优化时引入新 bug;只有测试覆盖但没有运行时监控 → 现场 corner case 触发 bug 后无法及时反应。
关键认知:软件没有"安全数字" ——…
关键认知:软件没有"安全数字" —— assessor 看的是"你怎么证明这段代码不会出系统性 bug"。证据 = 流程合规记录 + 测试覆盖率 + 工具 qualification 报告 + 评审记录。
2. ISO 26262-6 的 V&V 层次结构
ISO 26262-6 把软件开发拆成 6 个层次,每层对应一组要求。和 ASPICE 的 SWE.1 ~ SWE.6 几乎一一对应:
| 层 | 26262-6 章节 | ASPICE | ASIL D 必做 |
|---|---|---|---|
| SW requirements | §6 | SWE.1 | requirements traceable to TSR + complete + non-ambiguous |
| SW architecture | §7 | SWE.2 | layered + partitioned + freedom from interference |
| SW unit design + impl | §8 | SWE.3 | coding guideline(MISRA)+ ≤ cyclomatic complexity N |
| SW unit test | §9 | SWE.4 | MC/DC ≥ 90% + boundary + error guess |
| SW integration test | §10 | SWE.5 | interface coverage + functional + non-functional |
| SW qualification test | §11 | SWE.6 | requirements coverage 100% + back-to-back vs sim |
少一层等于安全 case 缺一块论证 —— 单元测得再好,集成阶段没测接口仍可能漏 systematic bug。每层都有独立的 work product(文档 / 报告)要交付给 assessor,一份不全就是 NCR。
3. 代码覆盖率 —— statement vs branch vs MC/DC
代码覆盖率是 ISO 26262-6:2018 §9 单元验证的核心指标,由 **Table 9(software unit 级结构覆盖率)**给出各 ASIL 的推荐等级——等级越高要求越严:
| 覆盖率指标 | 含义 | A | B | C | D |
|---|---|---|---|---|---|
| Statement | 每行代码至少执行一次 | ++ | ++ | + | + |
| Branch | 每个判定分支都取过 true / false | + | ++ | ++ | ++ |
| MC/DC | 每个布尔条件独立影响判定结果至少一次 | + | + | + | ++ |
其中 ++ = 高度推荐(HR)、+ = 推荐(R)、– = 未要求。MC/DC 仅对 ASIL D 为高度推荐(++),对 ASIL A/B/C 均为推荐(+);而 statement 反而在高 ASIL 上降级——对 ASIL A/B 为 ++,对 ASIL C/D 只是 +(因 branch / MC/DC 在高 ASIL 已隐含包住了 statement)。工业实践普遍把 ASIL D 的 ++ 落地为 ≥90% 门槛,剩余 <10% 需偏差记录(deviation note)说明不可达代码 / dead code,或分析其不影响安全功能。
注意条款别记错:结构覆盖率是 Tab…
注意条款别记错:结构覆盖率是 Table 9;Table 10 是"测试用例导出方法"(等价类划分、边界值、error guessing 等),两张表管的是不同的事。
3.1 MC/DC 为什么是 ASIL D 的红线
考虑这段代码:
if (a && b && c) { do_x(); }
- Statement:跑一次 a=b=c=true 即覆盖
- Branch:跑 (true,true,true) + (false,,) 即覆盖两个分支
- MC/DC:必须证明每个变量(a/b/c)独立影响结果——至少 4 个测试用例(n 个条件需 n+1 例):
- (T,T,T) → x
- (F,T,T) → not x(证明 a 影响)
- (T,F,T) → not x(证明 b 影响)
- (T,T,F) → not x(证明 c 影响)
MC/DC 抓的是"逻辑表达式有 bug 但其它条件掩盖了" —— 比如 a && b 写成 a || b,statement / branch 可能仍 100% 但功能错。ASIL D 必须 ≥ 90% MC/DC。
3.2 Tessy / LDRA 工具
工业上不可能手算 MC/DC 用例,要靠工具:
| 工具 | 厂商 | 角色 | TCL |
|---|---|---|---|
| Tessy | Razorcat | 单元测试自动生成 + MC/DC 测量 | TCL1 qualified kit 提供 |
| LDRA | LDRA | 静态分析 + MC/DC + MISRA check 一体 | TCL1 |
| VectorCAST | Vector | 同 Tessy + 集成测试 | TCL1 |
| Polyspace | MathWorks | 形式化静态分析 + 运行时错误证明 | TCL1 |
这些工具本身必须 qualified —— 见 §7 工具链 qualification。
4. TC397 + AUTOSAR Classic ASIL D 软件 Worked Design
以 400V/100kW EV 主驱逆变器为例,展示从软件架构到验证的端到端 ASIL D 软件实施。
目标:EV 主驱软件达 ASIL D,满足 ISO 26262-6 全层次要求。
硬件平台:Infineon AURIX TC397 —— 6 个 TriCore v1.6.2 CPU @ 300 MHz;其中 core 0–3 为 lockstep-capable 核,每个逻辑核内部各带一个隐藏 checker 核做 diverse lockstep 冗余(软件只见一个核,checker 与主核逐周期比对,不一致即报 CPU fault),core 4–5 为非 lockstep 核。ASIL D 安全功能必须跑在 lockstep 核上;非安全 / ASIL B 功能放非 lockstep 核。(注意:lockstep 不是"CPU0+CPU1 两个可见核配对",而是单个可见核 + 其不可见 checker——别把两回事搞混。)
软件平台:AUTOSAR Classic R22-11,Tasking LLVM TC 编译器(TCL1 qualified)。
Step 1 — 软件架构分配与 ASIL 分区
根据 HARA Safety Goal 分配软件安全需求到具体核:
| 安全需求 | ASIL | 分配 CPU | 任务周期 | FTTI 预算 |
|---|---|---|---|---|
| 转矩控制环 | ASIL D | CPU0(lockstep) | 1 ms | 100 ms |
| 电流采样处理 | ASIL D | CPU1(lockstep) | 250 μs(4 kHz) | 100 ms |
| DESAT 响应(SW 路径) | ASIL D | CPU0(lockstep) | 硬件中断 | 1 ms |
| WdgM 监控 | ASIL D | CPU0(lockstep) | 10 ms | 100 ms |
| CAN 通信处理 | ASIL B | CPU4(非 lockstep) | 5 ms | 200 ms |
| 故障记录 NVM | ASIL B | CPU5(非 lockstep) | 100 ms | — |
ASIL D 软件分区严格隔离:每个 TriCore 核有自己的 MPU —— 18 个 Data Protection Range(DPR0..17)+ 10 个 Code Protection Range(CPR0..9),排布在可切换的 6 组 Protection Set(PS0..5,由 PSW.PRS 字段 0–5 选择);ASIL D 核与 ASIL B 核各配独立堆栈,跨核数据交换走 AUTOSAR IOC(Inter-OS-Application Communication)。
ASIL D + ASIL B 共存时必须满足 Freedom from Interference(FFI,见 §9):配置 ASIL B 核(CPU4)的 MPU,使其 DPR 不覆盖 ASIL D 核的 DSPR / 全局安全数据区——CPU4 若越权写这些地址 → 触发 MPU class-3 同步精确 trap → safety reaction(关 PWM + assert STO)。注意这是靠 FFI 隔离让不同 ASIL 共存,不是 ASIL 分解——两者别混。
Step 2 — WdgM 配置(ASIL D 看门狗监控)
WdgM 三类 supervision 全开——单纯 alive 无法检测 task 提前/延迟完成。
| Supervision 类型 | 含义 | 配置 |
|---|---|---|
| Alive | task 周期内至少喂一次 checkpoint | TorqueCtrl:期望 9-11 次/100ms 窗口 |
| Deadline | checkpoint A 到 checkpoint B 必须在 [min,max] 内 | CurrentSampling:min=0.2ms, max=0.4ms |
| Logical | checkpoint 顺序必须为 A→B→C | 电流→转矩→输出 顺序 |
WdgM 对接 TLF35584 SBC:TLF35584 同时支持 window watchdog(open/close window 由 integrator 通过寄存器配置)与 Q&A watchdog(challenge-response),ASIL D 项目常用 Q&A 提高诊断覆盖。WdgM 定期向 SBC 发握手;窗口时间为项目配置值(示例:open window ≈ 80ms,低温下按晶振/RC 漂移额外留 +20% 余量 ≈ 96ms)。若 WdgM 任一 supervision 失败 → 停止喂狗 → SBC 窗口超时 reset MCU → TC397 上电重跑 LBIST+MBIST 后重启控制栈。
WdgM 反模式:只配 alive supervision + 10ms 周期任务被调度延迟阻塞 15ms → alive 仍满足(本周期没超时)但 deadline 超了 → 控制精度丢失。故 deadline supervision 是发现调度抖动的关键。
Step 3 — MC/DC 覆盖验证(Tessy 配置)
MC/DC 配置流程:
-
Tessy 接入:Tessy 直接从 Tasking LLVM 生成 instrumented binary(插桩编译),在 AURIX 评估板上跑。每次 test run 完成后,Tessy 导出
.trd覆盖率报告。 -
基准覆盖率测量:初始 MC/DC 约 65%——剩余 35% 主要集中在:
- 死亡码路径:仅在 ASIL D 失效 corner 激活(如 DESAT interrupt)的分支,正常 HIL 测试不易触发
- 防御性代码:double check assertion 总被 guard condition 拦截的分支
- 通信协议错误处理:CAN bus-off recovery 逻辑
-
缺口补全策略:
- 故障注入测试(FI):HIL 上注入传感器失效信号,激活 ASIL D 错误路径 → MC/DC 提升至 85%
- 静态分析确认不可达代码:Polyspace 标记 22 个 dead code branch → deviation note
-
最终结果(示例项目数据):MC/DC = 91.3%,偏差记录 22 条(全部 Polyspace 确认为 dead code),满足 ≥ 90% 门槛。实际数字须按项目实测。
Step 4 — FFI 验证(Memory Protection Unit 配置)
TC397 CPU0 的 MPU 配置(DPR = data protection range、CPR = code protection range,示例配置):
| Range | 类型 | 起始–结束 | 属性 | 保护目标 |
|---|---|---|---|---|
| CPR0 | code | 0x8000_0000–0x8001_FFFF | X(execute-only) | 转矩控制 code |
| DPR0 | data | 0x7000_0000–0x7000_FFFF | RW | 转矩控制 data / stack |
| CPR1 | code | 0x8002_0000–0x8002_FFFF | X | WdgM code |
| DPR1 | data | 0x7001_0000–0x7001_FFFF | RW | WdgM data |
| DPR2 | data | CPU4 DSPR 区(ASIL B) | — (无权限) | 禁 CPU0 越界读写 ASIL B 区 |
动态 FFI 测试:在 HIL 台架上让 CPU4(ASIL B)任务写入 CPU0 的 ASIL D DSPR 地址。CPU4 的 MPU 未授予该 DPR 写权限 → 触发 class-3 数据访问 trap。TriCore MPU trap 是同步精确 trap,在越权 load/store 指令的同一执行点产生,不存在检测延迟——随即引发 Safety Reaction。
Step 5 — 工具链 Qualification(TCL1 证据)
ASIL D 项目使用的 TCL1 工具及 qualification 方法:
| 工具 | 版本 | TCL | Qualification 方法 | 证据文件 |
|---|---|---|---|---|
| Tasking LLVM TC | 6.3.0 | TCL1 | 厂商提供 safety manual + validation suite | TAS-LLVM-SM-v1.4.pdf |
| Tessy | 5.x | TCL1 | Razorcat 提供 qualification kit,含测试规程 | Tessy-QP-v5.x.pdf |
| LDRA | 12.x | TCL1 | LDRA 提供 TÜV-SÜD 签发证书 | LDRA-TUV-Cert-2025.pdf |
| Polyspace | 2024a | TCL1 | MathWorks qualification kit(需购买) | MW-QK-ASIL-2024a.pdf |
Qualification 使用限制:商用工具 TCL1 qualification kit 绑定具体版本——必须用 kit 指定的工具版本,版本升级需重新走 qualification verification(通常 2-4 周工作量,具体按厂商报价)。自研/开源工具自做 TCL1 qualification 估计 2-6 人月,成本极高 → 工业上几乎不走此路。
5. AUTOSAR Classic 安全 stack
AUTOSAR Classic 的 BSW 层提供了一组安全相关 module,ASIL D 项目几乎都用。下面 5 个是核心:
| Module | 功能 |
|---|---|
| WdgM(Watchdog Manager) | 软件层监控 task 执行,定时喂 SBC 硬件 watchdog |
| E2E(End-to-End Library) | 通信消息保护 — 详见 E2E + SecOC |
| SecOC(Secure Onboard Communication) | 通信加密 + 重放防护 |
| OS(OSEK / AUTOSAR OS) | 时间触发任务调度 + memory protection + interrupt isolation |
| Stack monitor + Memory monitor | 检测 stack overflow / memory corruption |
5.1 WdgM 的 alive supervision
WdgM 监控的不是"task 还在跑没",而是 task 在期望时序内完成它的活:
WdgM 的 checkpoint 有 alive / deadline / logical 三种监控,组合用能盖住"task 卡死 / 提前完成 / 顺序错"。ASIL D 必须三种全配:只配 alive 等同于 §11 反模式 G1(卡死 task 仍满足 alive supervision)。
6. AUTOSAR Adaptive 的不同
Adaptive(用于域控制器 / HPC,POSIX based)和 Classic 在安全论证上有两个本质差异:
| 维度 | Classic | Adaptive |
|---|---|---|
| OS | OSEK / 静态调度 | POSIX(Linux PREEMPT_RT) |
| 资源 | 静态分配,编译期决定 | 动态进程 + 容器 |
| 安全成熟度 | ✓ ASIL D 量产成熟 | △ 仅部分 ASIL B/C 量产 |
| 安全 stack | WdgM / E2E / SecOC | Adaptive Platform Health Mgmt + ara::com SecOC |
Adaptive 的 ASIL D 论证目前是个开放问题 —— POSIX Linux 内核本身没有 ASIL D 评估,通常做法是把 ASIL D 部分留在 Classic 上,Adaptive 只跑 ASIL B/QM 任务,通过 Mixed Criticality + virtualization 隔离两者。详见 整车 E/E 架构。
7. 工具链 Qualification —— TCL 1/2/3
ISO 26262-8 §11 要求"开发工具如果可能引入 fault 到 safety-related 软件,必须 qualified"。Tool Confidence Level(TCL):
| TCL | 含义 | 例 |
|---|---|---|
| TCL 1 | 工具 fault 可能导致软件 bug,且不容易被后续步骤检测到 | 编译器(GCC/Tasking)、静态分析工具(LDRA) |
| TCL 2 | 同 TCL 1 但有部分检测兜底 | code review tool |
| TCL 3 | fault 影响小或一定能被后续检测 | text editor, version control |
ASIL D 项目的编译器 + 静态分析 + MC/DC tool 必须 TCL 1 qualified。商用工具厂商提供 qualification kit + safety manual,告诉你怎么使用 = 合规。
TCL 判断流程(ISO 26262-8:2018 §11.4,由 Tool Impact TI × Tool error Detection TD 决定):
- 工具 fault 能否被开发/V&V 步骤检测到(TD)?→ 高置信检测 → TCL 降级
- 工具是否生成/修改 safety-related 产物(TI)?→ 否(TI1)→ TCL 1
- 影响不可检测(TD3)且生成安全产物(TI2)→ TCL 1,需 qualification
8. MISRA C:2023 —— ASIL D 必守 critical rules
MISRA C 是 C 语言的安全编码 guideline。MISRA C:2023(第三版第二修订,纳入 C11/C18)共 221 条 guideline(约 200 条 rule + 21 条 directive,分 mandatory / required / advisory)。ASIL D 项目通常要求 mandatory + required 100% 合规(advisory 项目自定)。
下面 8 条是最常见的 critical(违反极易出 systematic bug):
| Rule | 内容 | 风险 |
|---|---|---|
| Dir 4.1 | 禁止运行时未定义行为(UB) | 整数 overflow / 移位负数 / 解引空指针 |
| R 8.13 | 指针参数 non-modifying 加 const | 防误改 |
| R 9.3 | 数组元素全初始化 | 未初始化数据 |
| R 11.3 | 禁止把对象指针 cast 到不同对齐的类型 | 未对齐访问 crash |
| R 13.1 | 初始化器表达式不应有副作用 | 求值顺序未定 |
| R 17.2 | 禁止递归 | stack overflow |
| R 17.7 | 函数返回值不可弃 | 错误码丢失 |
| R 21.6 | 不用 stdio.h(printf 等) | 安全等级 OS 不允许 |
LDRA / Tessy / Coverity 可以自动 check MISRA 合规,但项目通常还需要 deviation process —— 实在违反的某条要写 justification 让 safety officer 批。
9. Freedom from Interference(FFI)
ASIL D 软件不能被同一颗 MCU 上的 ASIL B/QM 软件干扰。ISO 26262-6 Annex D 把干扰分成三类,要分别防:
| 干扰类型 | 防护 | TC397 实现 |
|---|---|---|
| Memory | MPU / MMU 隔离地址空间 | 每核 MPU(18 DPR + 10 CPR / 6 PS,PS0..5),ASIL B 核无 ASIL D 数据区写权限 |
| Timing and execution | 时间触发调度 + 严格 budget + WdgM | OSEK-TP + WdgM deadline supervision |
| Exchange of information | 通信 / 共享资源加保护(E2E / IOC / 优先级) | 跨核走 IOC + E2E CRC;共享外设静态优先级 |
举例:VCU 的 ASIL D 扭矩 monitor 和 ASIL QM 信息娱乐功能跑同一颗 MCU,必须 MPU 隔离两者地址空间 —— 否则 QM 任务的野指针写到 ASIL D 的 buffer 就违反 FFI。FFI 是让不同 ASIL 软件在同一 MCU 共存的论证手段,它本身不改变各功能的 ASIL 等级——不要和 ASIL 分解混为一谈(分解是把一条安全需求拆到冗余通道并降级,见 ASIL 分解)。详见 汽车 MCU 的 lockstep 双核 + MPU。
10. Traceability —— 需求到测试的链
ASIL D 的硬性合规要求:每条 SW requirement 必须双向追踪到 TSR(系统需求)和 SW unit test。Traceability matrix(IBM DOORS / Polarion / Codebeamer 维护):
任何 TSR 没下挂 SR,或 SR 没对应测试 = traceability gap = audit 失败。这就是为什么 ASPICE Level 2 的 work products 这么多——99% 都在维护这条 trace 链。
详见 ASPICE。
11. 7 条 Gotcha 链
G1 — WdgM 只配 alive supervision → 卡死 task 不 reset【最高危】
现象:转矩控制任务在某 edge case 下进入死循环(while 等待 ADC ready 超时),但中断仍在周期性执行喂 checkpoint。Alive supervision:checkCount = 10/10 ✓。WdgM 正常喂狗,SBC 不 reset。系统静默输出错误转矩,不进 safe state。
根因:Alive 只看"喂了没",不看"是否在预期时间窗口内"。Deadline supervision 检查 checkpoint A → checkpoint B 时间 [min, max]:若任务阻塞在 ADC 等待里,从 A 到 B 的时间会超出 max 阈值。
修法:WdgM 必须同时配 alive + deadline + logical supervision;deadline 窗口设为 control cycle 的 [0.5×, 1.5×]。
数字:EV 主驱 250μs 电流环,deadline window = [125μs, 375μs];超出即 WdgM 失败 → SBC 断供 → reset。
G2 — 非 volatile 双重检查被编译器 CSE 合并【概念别搞反】
现象:ASIL D 代码为抗单粒子翻转(SEU)对安全标志做双重读检查:
uint32_t safetyFlag; /* 忘了加 volatile */
if (safetyFlag != EXPECTED_VALUE) ErrorHandler();
if (safetyFlag != EXPECTED_VALUE) ErrorHandler(); /* 想做 double check */
-O2 下编译器做 common subexpression elimination(CSE):它认为两次读之间没有可观察副作用,把第二次读缓存进寄存器 / 直接删掉,双检退化成单检——若两次读之间发生 bit flip 就漏检。
根因(关键澄清):很多资料写反了——C 标准规定 volatile 访问是可观察副作用,编译器绝不能省略或合并任何一次 volatile 读(每次 volatile 读都必须真的从内存 load)。所以问题恰恰出在忘加 volatile:普通变量的重复读才会被 CSE 合并。给 safetyFlag 加 volatile 就强制两次都重新 load,双检成立。
修法:①把安全标志声明为 volatile(根治,强制两次 load);②必要时再加 __asm volatile("") 内存屏障隔开两次读,防止周边优化;③降为 -O1 并在 safety manual 中记录;④Polyspace 形式化确认两次读之间无编译器折叠。
G3 — Adaptive 幻觉:直接在 Linux 上跑 ASIL D
现象:域控平台切换到 AUTOSAR Adaptive(Linux PREEMPT_RT),safety architect 认为"PREEMPT_RT 延迟已经足够低,可以跑 ASIL D 转矩控制"。
根因:POSIX Linux 内核无 ASIL D 证书。ISO 26262-6 要求软件平台本身必须 qualified 或用 SEooC 论证。Linux kernel 代码量 ~2000 万行,随机 bug 触发概率不可证明为 systematic-free。AUTOSAR Adaptive 规范(R22-11)明确"仅适用于 QM to ASIL B"。
修法:ASIL D 功能保留在 Classic(TC397 lockstep 核);Adaptive 只接 QM/ASIL B CAN 路由 / 诊断上报。用 Hypervisor(如 INTEGRITY RTOS)隔离 Classic 与 Adaptive 分区。
G4 — MC/DC 用 Statement Coverage 凑数
现象:软件团队上报 "MC/DC coverage = 95%"。Assessor 拿到 Tessy 报告一看:选择的是 "Statement Coverage Mode",不是 "MC/DC Mode"。实际 MC/DC 约 62%,未达 ASIL D 门槛。
根因:Tessy 支持多种覆盖率模式,默认不一定是 MC/DC。LDRA 同理。Statement 覆盖率天然比 MC/DC 高(同样测试用例 statement ≈ 100% 而 MC/DC 可能只有 60%)——用错模式会误报。
修法:在 Tessy 项目配置中显式选择 MC/DC Mode,并在 test report header 中打印所选覆盖类型 + 版本。Safety Officer review 时第一步核对覆盖类型字段。
G5 — MISRA Deviation 没 Justification → 首发 NCR
现象:代码库有 34 条 MISRA C:2023 R17.7 偏差(忽略 printf 返回值——团队认为 printf 不影响安全)。Safety Case 里没有 deviation record 文档。Assessor 第一眼就发现 MISRA checker 报 34 个 warning,项目无法说明这 34 条为什么可以接受。首发 NCR(Non-Conformance Report)。
修法:每条 deviation 写 Deviation Note:①违反的 Rule 号;②偏差的代码位置;③为什么可以接受(理由 + 风险分析);④Safety Officer 签字。LDRA 可以导入 deviation justification 数据库,自动 suppress 有 note 的 warning 并在报告中链接 justification。
G6 — Tool Qualification Kit 版本与工具版本不匹配
现象:项目购买了 Tessy v5.1 的 qualification kit,但工具升级到 Tessy v5.3。Assessor 要求"v5.3 的 qualification evidence 在哪",答不上来。Qualification kit 有版本号绑定。
根因:工具升级 = 新版本引入新 change set → 旧的 qualification evidence 不覆盖新功能/修复。ISO 26262-8 §11 的工具 qualification 是针对具体版本的。
修法:工具版本 freeze(贯穿整个项目 V 循环,不随意升级);如必须升级,向厂商申请 delta qualification kit(覆盖 v5.1→v5.3 的变更),并更新 safety plan 中的 tool list 版本字段。
G7 — FFI MPU 配置与软件分区不一致
现象:MPU DPR table 是 BSP 团队配置的,软件分区是应用团队设计的。两个团队各自维护文档,配置没有交叉审查。上线前发现:应用 ASIL B 任务的 BSS 段起始地址落在了 ASIL D data range(某 DPR)之内——但该 DPR 对 ASIL B 核是可写的(配置错误)。ASIL B 任务若有越界写 → 直接污染 ASIL D 数据栈。
根因:MPU 配置和 linker script 是两个独立文件,没有自动一致性校验。
修法:在 build 脚本中加 Python 脚本:读 MPU DPR/CPR table + linker symbol map → 检查每个 section 的地址是否落在正确 range 内,不一致则 build 失败。这个检查本身用于发现集成级 FFI 漏洞,不需 TCL1 qualified(属于 TCL3 开发工具)。
12. 3 条 Corner 分析
Corner A — 低温 -40°C LBIST 时间扩展
TC397 上电时执行 LBIST(Logic BIST),测试所有数字逻辑的 stuck-at fault。LBIST 时间随温度变化(低温下较 25°C 慢约 15-20%,实际数值查 TC3xx Safety Manual)。
若 FTTI 对"车辆上电后恢复正常驾驶"有约束(如 ASIL C SG "BEV 上电后 3s 内逆变器可用"),用示例估算量级:
| 条件 | LBIST 时间(估) | 上电总时序(估) | FTTI 余量 |
|---|---|---|---|
| 25°C | ~50ms | 50+120+80 = 250ms | 2750ms(约 11×) |
| -40°C | ~60ms(+20%) | 60+120+80 = 260ms | 2740ms(约 11×) |
结论:-40°C LBIST 扩展 ~10ms 对 3s FTTI 基本无影响(余量充足)。若项目 FTTI 压缩至 500ms(L4 场景),需在 Safety Plan 中明确 worst-case LBIST 时间为上电预算输入,并以 Safety Manual 的实测查表值替换上面的量级估算。
Corner B — FTTI 压缩到 10ms(L4 自动驾驶场景)
L4 自动驾驶时 driver 不在环:Safety Goal "禁止非预期转矩" 的 FTTI 可能从 100ms 压缩到 10ms(driver intervention 不可用)。
影响软件 SM 选型:
- 10ms FTTI → tdet + treact ≤ 10ms
- WdgM 10ms 周期任务:DTI = 10ms → 最坏情况 tdet = 10ms → treact 剩 0ms → 不够
- 必须把 DESAT 保护改为纯硬件通路(tdet ≈ 0 的连续监测):1EDI3035AS DESAT → 直接断 PWM → tdet ≈ 0 + treact ≈ 1.2μs → 总 < 10ms ✓
- SW 路径的转矩 monitor 无法满足 10ms FTTI:不能作为 SG 的主保护 → 需 architecture 变更(加硬件 STO 通路独立于 SW)
结论:FTTI 10ms 场景下,软件 SM 只能做冗余/监控层,主保护必须硬件 SM。L4 项目需重走 HARA → FSR → SM 分配全流程。
Corner C — 软件版本更新触发 AoU 重新验证
当 TC397 搭配 SEooC 芯片(TLF35584 / 1EDI3035AS)时,软件版本更新可能触发 AoU(Assumptions of Use)重验证义务:
触发场景:
- WdgM 配置变更(窗口时间 / checkpoint 映射) → TLF35584 AoU 条款 "WD 窗口由 integrator 配置" 需重确认
- MCU startup 流程修改(LBIST timing 变更) → TLF35584 AoU "INIT_OK 握手时序" 可能受影响
- ISR 优先级重排 → ASIL D FFI 假设需重验证
工程纪律:变更影响分析(CIA,Change Impact Analysis)必须将"AoU 重验"列为检查项。实践上建立 AoU 矩阵(每条 AoU ↔ 受影响软件 section ↔ 触发条件),CIA 工具扫变更集自动标记需复审的 AoU。
13. 安全反模式(5 个常见错)
这一节把"安全反模式"的判断维度收拢到同一视图里,表格用于横向比较各选项的边界。
| 反模式 | 表现 | 修法 |
|---|---|---|
| MC/DC 用 statement coverage 凑数 | "我们覆盖率 95%"——其实是 statement 不是 MC/DC | ASIL D 必须 MC/DC,不能用其它代替;Tessy 显式选 MC/DC mode |
| GCC 没 qualified 直接用 | 编译器 bug 引入 systematic 错,assessor 第一个打回 | 用 qualified compiler(认证版 Tasking LLVM / IAR safety) |
| WdgM 只配 alive 监控 | task 卡 5ms 才触发,实际 ASIL D FTTI 只允许 2ms | 加 deadline + logical supervision |
| MISRA deviation 没 justification | 违反规则但没记录原因,审计直接 NCR | 每条 deviation 必须 safety officer 签字 |
| Adaptive 直接跑 ASIL D | POSIX Linux 内核未 qualified,论证失败 | ASIL D 留 Classic,Adaptive 仅跑 ASIL B 以下 |
核心要点
- 软件没有"安全数字" —— ASIL D 论证靠流程合规 + V&V 覆盖 + 工具 qualified 三件套
- ISO 26262-6 V&V 6 层(SWE.1 → SWE.6),每层都有 ASIL D 必做项,缺一审计败
- 结构覆盖率是 Table 9:Statement 对 ASIL A/B 是 ++、对 C/D 降为 +;MC/DC 仅对 ASIL D 为 ++(A/B/C 为 +),工业落地为 ≥ 90%;statement/branch 不能替代 MC/DC
- WdgM 三类全配:alive + deadline + logical —— 只有 alive 无法检测 task 阻塞/顺序错
- TC397 worked design:6 核,core 0-3 lockstep-capable(各带隐藏 checker 核),ASIL D 跑 lockstep 核 / ASIL B 跑非 lockstep 核;每核 MPU 18 DPR + 10 CPR / 6 PS(PS0..5),WdgM deadline window = [0.5×, 1.5×] 控制周期,MC/DC 91.3%(示例,偏差 22 条 Polyspace 确认 dead code)
- 工具 qualification(TCL 1)是硬要求 —— 编译器/静态分析/MC/DC 工具必须版本绑定 qualified
- MISRA C:2023 共 221 条 guideline,mandatory + required 100% 合规 + deviation 需 safety officer 签字,LDRA 导入偏差库
- Freedom from Interference(Annex D 三类:memory / timing+execution / exchange):同 MCU 不同 ASIL 软件必须隔离——是共存手段,不等于 ASIL 分解
- Traceability TSR → SR → unit test 双向链是 ASPICE Level 2 + ISO 26262-6 共同要求
- 7 Gotcha:WdgM only-alive(最高危) / 非 volatile 双检被 CSE 合并 / Adaptive ASIL D 幻觉 / Statement 凑 MC/DC / MISRA 无 justification / tool kit 版本不匹配 / MPU 与 linker 不一致
- FTTI 10ms corner:L4 自动驾驶 FTTI 压缩 → 软件 SM 仅作冗余,主保护必须硬件通路(DESAT 直接断 PWM,tdet ≈ 0)
Engineering Objects
引用此页的结构化 Engineeri…
引用此页的结构化 Engineering Object(v2.0 Copilot 自动生成,不要手动编辑此段)。
- diagnostic ·
diagnostic_watchdog— Independent Window Watchdog - standard ·
standard_iso26262_part6— ISO 26262 Part 6 Software