软件功能安全 ASIL D(Software Functional Safety)

功能安全L4别名 软件安全 · ASIL D 软件 · software safety · MC/DC 覆盖率 · Tessy · LDRA · AUTOSAR Classic · AUTOSAR Adaptive · 软件 traceability · Coding guideline MISRA · 更新

本质与导读

本质 软件没有 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)。

HW vs SW ASIL D — 左 HW (caramel) 管 random failure rate + SPFM/LFM/PMHF · 右 SW (coral) 预防 + 检测 + 运行时监控 三轴论证

这三个轴缺一不可:只有流程合规但 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 几乎一一对应:

ISO 26262-6 软件 V&V 6 层 — SW Reqs (SWE.1) → SW Arch (SWE.2) → SW Detail (SWE.3) → Unit Test (SWE.4 MC/DC ≥ 90%) → Integ Test (SWE.5) → Qual Test (SWE.6)

26262-6 章节ASPICEASIL D 必做
SW requirements§6SWE.1requirements traceable to TSR + complete + non-ambiguous
SW architecture§7SWE.2layered + partitioned + freedom from interference
SW unit design + impl§8SWE.3coding guideline(MISRA)+ ≤ cyclomatic complexity N
SW unit test§9SWE.4MC/DC ≥ 90% + boundary + error guess
SW integration test§10SWE.5interface coverage + functional + non-functional
SW qualification test§11SWE.6requirements 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 的推荐等级——等级越高要求越严:

覆盖率指标含义ABCD
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
TessyRazorcat单元测试自动生成 + MC/DC 测量TCL1 qualified kit 提供
LDRALDRA静态分析 + MC/DC + MISRA check 一体TCL1
VectorCASTVector同 Tessy + 集成测试TCL1
PolyspaceMathWorks形式化静态分析 + 运行时错误证明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 DCPU0(lockstep)1 ms100 ms
电流采样处理ASIL DCPU1(lockstep)250 μs(4 kHz)100 ms
DESAT 响应(SW 路径)ASIL DCPU0(lockstep)硬件中断1 ms
WdgM 监控ASIL DCPU0(lockstep)10 ms100 ms
CAN 通信处理ASIL BCPU4(非 lockstep)5 ms200 ms
故障记录 NVMASIL BCPU5(非 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 类型含义配置
Alivetask 周期内至少喂一次 checkpointTorqueCtrl:期望 9-11 次/100ms 窗口
Deadlinecheckpoint A 到 checkpoint B 必须在 [min,max] 内CurrentSampling:min=0.2ms, max=0.4ms
Logicalcheckpoint 顺序必须为 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 配置流程:

  1. Tessy 接入:Tessy 直接从 Tasking LLVM 生成 instrumented binary(插桩编译),在 AURIX 评估板上跑。每次 test run 完成后,Tessy 导出 .trd 覆盖率报告。

  2. 基准覆盖率测量:初始 MC/DC 约 65%——剩余 35% 主要集中在:

    • 死亡码路径:仅在 ASIL D 失效 corner 激活(如 DESAT interrupt)的分支,正常 HIL 测试不易触发
    • 防御性代码:double check assertion 总被 guard condition 拦截的分支
    • 通信协议错误处理:CAN bus-off recovery 逻辑
  3. 缺口补全策略:

    • 故障注入测试(FI):HIL 上注入传感器失效信号,激活 ASIL D 错误路径 → MC/DC 提升至 85%
    • 静态分析确认不可达代码:Polyspace 标记 22 个 dead code branch → deviation note
  4. 最终结果(示例项目数据):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类型起始–结束属性保护目标
CPR0code0x8000_00000x8001_FFFFX(execute-only)转矩控制 code
DPR0data0x7000_00000x7000_FFFFRW转矩控制 data / stack
CPR1code0x8002_00000x8002_FFFFXWdgM code
DPR1data0x7001_00000x7001_FFFFRWWdgM data
DPR2dataCPU4 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 方法:

工具版本TCLQualification 方法证据文件
Tasking LLVM TC6.3.0TCL1厂商提供 safety manual + validation suiteTAS-LLVM-SM-v1.4.pdf
Tessy5.xTCL1Razorcat 提供 qualification kit,含测试规程Tessy-QP-v5.x.pdf
LDRA12.xTCL1LDRA 提供 TÜV-SÜD 签发证书LDRA-TUV-Cert-2025.pdf
Polyspace2024aTCL1MathWorks 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 alive supervision — task A → checkpoint → WdgM rcv → validate timing → all in budget kick HW WD (sage OK) / out of order/late SBC reset (coral)

WdgM 的 checkpoint 有 alive / deadline / logical 三种监控,组合用能盖住"task 卡死 / 提前完成 / 顺序错"。ASIL D 必须三种全配:只配 alive 等同于 §11 反模式 G1(卡死 task 仍满足 alive supervision)。


6. AUTOSAR Adaptive 的不同

Adaptive(用于域控制器 / HPC,POSIX based)和 Classic 在安全论证上有两个本质差异:

维度ClassicAdaptive
OSOSEK / 静态调度POSIX(Linux PREEMPT_RT)
资源静态分配,编译期决定动态进程 + 容器
安全成熟度✓ ASIL D 量产成熟△ 仅部分 ASIL B/C 量产
安全 stackWdgM / E2E / SecOCAdaptive 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 3fault 影响小或一定能被后续检测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 决定):

  1. 工具 fault 能否被开发/V&V 步骤检测到(TD)?→ 高置信检测 → TCL 降级
  2. 工具是否生成/修改 safety-related 产物(TI)?→ 否(TI1)→ TCL 1
  3. 影响不可检测(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 实现
MemoryMPU / MMU 隔离地址空间每核 MPU(18 DPR + 10 CPR / 6 PS,PS0..5),ASIL B 核无 ASIL D 数据区写权限
Timing and execution时间触发调度 + 严格 budget + WdgMOSEK-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-001 下挂 SR-XXX-1/2/3,每条 SR 各对应一个 unit_test_xxx.c(passed);任何 TSR 没下挂 SR 或 SR 没对应测试即 traceability gap

任何 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 合并。给 safetyFlagvolatile 就强制两次都重新 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~50ms50+120+80 = 250ms2750ms(约 11×)
-40°C~60ms(+20%)60+120+80 = 260ms2740ms(约 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)重验证义务:

触发场景:

  1. WdgM 配置变更(窗口时间 / checkpoint 映射) → TLF35584 AoU 条款 "WD 窗口由 integrator 配置" 需重确认
  2. MCU startup 流程修改(LBIST timing 变更) → TLF35584 AoU "INIT_OK 握手时序" 可能受影响
  3. ISR 优先级重排 → ASIL D FFI 假设需重验证

工程纪律:变更影响分析(CIA,Change Impact Analysis)必须将"AoU 重验"列为检查项。实践上建立 AoU 矩阵(每条 AoU ↔ 受影响软件 section ↔ 触发条件),CIA 工具扫变更集自动标记需复审的 AoU。


13. 安全反模式(5 个常见错)

这一节把"安全反模式"的判断维度收拢到同一视图里,表格用于横向比较各选项的边界。

反模式表现修法
MC/DC 用 statement coverage 凑数"我们覆盖率 95%"——其实是 statement 不是 MC/DCASIL 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 DPOSIX 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_part6ISO 26262 Part 6 Software

Cross-references