1. AUTOSAR 与功能安全概述

各位工程师朋友,咱们今天聊聊 AUTOSAR 和功能安全。这两个词在汽车电子圈里,几乎天天都能听到。但说实话,我刚入行那会儿,也觉得它们就是两座大山——一个管软件架构,一个管系统安全,好像各玩各的。

后来做项目多了才发现,它们其实是同一枚硬币的两面。没有 AUTOSAR,功能安全落地会非常痛苦;没有功能安全,AUTOSAR 的很多设计就失去了灵魂。这一章,我就带大家把这两条线串起来看看。

1.1 AUTOSAR 架构简介

AUTOSAR 是什么?说白了,就是汽车行业为了应对软件复杂度,搞出来的一套标准化软件架构。它的核心目标就一个:让软件和硬件解耦。你想想看,以前换个 MCU,整个软件几乎要重写,那得多折腾?

AUTOSAR 把整个软件栈分成了三层,我习惯用一张图来记:

核心分层(从上到下):
  • 应用层(ASW)—— 写业务逻辑的地方,比如车窗控制、ACC 算法。
  • 运行时环境(RTE)—— 虚拟总线,负责应用层和基础软件之间的通信。
  • 基础软件层(BSW)—— 又细分为服务层、ECU 抽象层、MCU 抽象层,管硬件驱动、操作系统、通信栈这些。

这里有个关键点:RTE 是 AUTOSAR 的灵魂。它让上层的应用软件组件(SWC)完全不知道底层硬件长什么样。我在一个项目中就遇到过,客户要求把 NXP 的芯片换成 Infineon 的,结果我们只改了 MCAL 层,应用层代码一行没动。嗯,这就是解耦的好处。

另外,AUTOSAR 还分 Classic Platform 和 Adaptive Platform。Classic 跑在微控制器上,适合硬实时控制;Adaptive 跑在微处理器上,适合高算力的自动驾驶。咱们这门课主要讲 Classic,因为功能安全故障诊断的根基在这里。

AUTOSAR 分层架构与功能安全映射 应用层(ASW) SWC 1 · SWC 2 · SWC 3 · 安全监控 SWC 运行时环境(RTE) 服务层(OS · 通信栈 · 诊断 · 存储 · 功能安全) ECU 抽象层(I/O 抽象 · 通信抽象) MCU 抽象层(MCAL · 微控制器驱动) 功能安全贯穿

1.2 功能安全标准 ISO 26262 概述

ISO 26262 是汽车功能安全的国际标准。它源自 IEC 61508,但专门针对汽车行业做了裁剪。标准的核心思想就一句话:识别风险,控制风险,证明风险已被控制。

标准把安全等级分为 ASIL A、B、C、D,D 是最严格的。怎么定级?看三个要素:严重度(S)、暴露概率(E)、可控性(C)。举个例子,刹车系统的某个失效,如果会导致严重伤害(S3)、经常发生(E4)、驾驶员很难补救(C3),那它就是 ASIL D。

个人经验: 我见过不少团队在 ASIL 分解上栽跟头。比如一个 ASIL D 的功能,分解成 ASIL B + ASIL B 的两个独立路径。理论上可行,但实际做的时候,独立性证明非常难。我曾经在一个项目中,就因为两个路径共用了同一个 ADC 通道,被审核员开了严重不符合项。所以,分解前一定要先做独立性分析。

ISO 26262 的流程覆盖了从概念阶段到生产发布的整个生命周期。我把它总结成几个关键节点:

阶段 核心活动 输出物
概念阶段 HARA(危害分析与风险评估) 安全目标、ASIL 等级
系统级 功能安全概念(FSC)、技术安全概念(TSC) 安全需求、系统架构
硬件级 硬件随机失效分析(FMEDA) 失效率、诊断覆盖率
软件级 软件单元设计与测试 软件安全需求、测试报告
生产发布 安全案例、确认评审 安全档案

这里要注意,安全案例不是最后才写的。我建议从项目一开始就建一个安全案例的骨架,每完成一个阶段就往里填证据。否则到最后你会发现,很多测试数据找不到了,或者某个决策没有记录,那就麻烦了。

1.3 AUTOSAR 如何支持功能安全

好,现在把两条线拧在一起。AUTOSAR 到底怎么帮我们实现功能安全?我总结了三个层面:

1.3.1 架构层面的隔离机制

AUTOSAR 的分层架构天然支持故障隔离。比如,一个 SWC 跑飞了,不会直接影响到另一个 SWC,因为 RTE 做了保护。另外,AUTOSAR 的 OS 支持内存分区(Memory Partitioning),可以把安全相关的软件放在受保护的分区里,非安全相关的放在另一个分区。我曾经在一个项目中,把 ASIL D 的监控 SWC 放在独立分区,用 MPU 做硬件隔离,审核员看了直点头。

1.3.2 安全机制的标准模块

AUTOSAR 基础软件层里,专门有一组模块叫 功能安全模块。我列几个常用的:

  • WdgM(看门狗管理器)—— 监控程序流是否正常,超时了就触发复位或安全状态。
  • EcuM(ECU 状态管理器)—— 管理启动、休眠、唤醒,确保安全状态能正确进入。
  • DCM(诊断通信管理器)—— 支持 UDS 诊断,可以读取故障码、执行例程。
  • Dem(诊断事件管理器)—— 记录和存储故障事件,是故障诊断的核心。
  • Fls(Flash 驱动)—— 带 ECC 校验,防止存储数据被篡改。
避坑指南: 我曾经遇到一个项目,团队直接用了 AUTOSAR 的默认配置,结果 WdgM 的喂狗窗口设得太宽,导致一个故障持续了 200ms 才被检测到,而安全目标要求 100ms 内响应。所以,所有安全模块的参数必须根据安全目标重新计算,不能偷懒用默认值。

1.3.3 诊断与故障处理框架

这是咱们这门课的重点。AUTOSAR 提供了一套完整的故障诊断框架,从故障检测、故障确认、故障存储到故障恢复,都有标准化的接口。我画个流程图大家感受一下:

AUTOSAR 故障诊断处理流程 故障检测 故障确认 故障存储 故障恢复 安全状态

这个流程里,故障确认是个关键环节。为什么?因为不能检测到一次异常就立刻报故障,那会误报太多。通常的做法是:连续检测到 N 次故障,或者故障持续时间超过 T 毫秒,才确认故障。这个 N 和 T 怎么定?要根据安全目标来算。我习惯用 故障确认时间 < 故障容错时间间隔(FTTI) 这个约束来反推。

核心要点:
  • AUTOSAR 的分层架构为功能安全提供了隔离基础。
  • 标准的安全模块(WdgM、Dem、EcuM 等)可以直接复用,但参数必须定制。
  • 故障诊断流程(检测→确认→存储→恢复)是 AUTOSAR 支持功能安全的核心能力。

好了,这一章的内容就到这里。AUTOSAR 和功能安全的关系,说白了就是平台与规则的关系。AUTOSAR 提供了实现安全机制的标准化平台,ISO 26262 则告诉我们该实现哪些机制、做到什么程度。后面的章节,我们会深入到每个安全模块的配置和实现细节里去。到时候,我会拿实际项目中的代码和配置来跟大家拆解。