本文旨在详细阐述与免于干扰相关的术语、标准要求,以及 MPU 的工作原理和在系统中的作用。通过对这些内容的介绍,帮助读者更好地理解汽车功能安全中的免于干扰和内存保护机制。
行业发展的挑战
当前,车载电子控制单元(ECU)软件的复杂性呈指数级增长。越来越多与安全相关的功能由电子电气系统实现,使得执行安全相关功能的代码量不断膨胀。安全相关的应用软件被集成到复杂的软件系统中,一旦软件出现失效,故障可能在各个软件模块间传播和放大,终导致安全功能丧失,引发系统性的安全风险。为了直观展示这种复杂性,图 1 呈现了一个包含 150 个软件组件的 ECU 有向调用图,其中 14 个 ASIL B 等级组件为安全相关部分。
同时,汽车整车电子电器架构正向着快速迭代、集成化的方向发展,从分布式向集中式演进,汽车软件也由分离的嵌入式变为解耦的分层式,硬件由少量高性能算力单元代替大量低算力单元。这种集成化具有诸多优点,如减少 ECU 数量,节约车内空间和方便散热设计;减少线束和连接器,节约硬件成本并降低车重;实现 ECU 融合,提高系统可靠性和实时性。
干扰加剧的原因
用户对车辆智能化的需求使得软件复杂性不断提升;汽车电子电气化的发展趋势让更多功能涉及功能安全;整车电子电器架构从分布式向域控架构、中央架构发展,导致功能更加集中。这三个因素使得汽车软件比以往任何时候都更容易受到干扰。图 2 清晰地描述了导致软件模块间干扰加剧的因素。

[图 2 导致软件模块间干扰加剧的因素]
免于干扰的有关术语
在 ISO 26262 - 2018 中,涉及软件要素之间免于干扰的术语包括相关失效分析、相关失效、共因失效、级联失效、独立性和干扰。理清这些术语的关系,有助于更好地理解免于干扰在 ISO 26262 中的根本要求,安全工程师也能更灵活地应对复杂项目,实现免于干扰。图 3 展示了免于干扰和相关术语的关系。
“相关失效分析” 能够识别系统中的 “相关失效”,为避免 “干扰” 和实现 “免于干扰” 提供制定安全措施的依据。“相关失效” 包括 “共因失效” 和 “级联失效”。当不存在违反安全目标的 “共因失效” 和 “级联失效” 时,意味着要素间具有独立性。“免于干扰” 可以看作 “独立性” 的子集。需要注意的是,“免于干扰” 和 “干扰” 并非严格意义上的反义词,“免于干扰” 不区分 ASIL,而 “干扰” 着重于非安全相关、低 ASIL 要素到高 ASIL 要素的级联失效。它们的共同关注点是要素间的 “级联失效” 以及是否违反安全目标。

[图 3 免于干扰和相关术语的关系]
免于干扰的要求
免于干扰(FFI)指的是安全相关功能能够正常运行,不受其他功能(尤其是较低 ASIL 或非安全功能)的影响。这种隔离能够确保系统某个部分的故障不会传播和影响其他关键部分,从而维护整体系统安全。其定义为:两个或两个以上的要素之间,不存在可能导致违背安全要求的级联失效。
ISO 26262 Part 6 Clause 7.4.9 要求使用软件分区实现软件要素间的免于干扰,具体应保证:共享资源的使用方式要确保软件分区免于干扰;由专用的硬件特性或等效方法来支持软件分区(该要求适用于 ASLD 等级);实现软件分区的软件要素是根据分配给分区软件任何要求的 ASIL 等级开发的;软件分区有效性的证据会在软件集成和验证期间生成。
系统的独立性设计和相关失效分析结果对软件元素提出了免于干扰的需求,软件分区是实现软件元素间免于干扰的一种方法。ISO 26262 part 6 的 Annex D 中描述了可能导致软件分区间级联失效的三个维度,具体如下表所示。
故障维度故障描述
时序和执行执行受阻;死锁;活锁;执行时间的不正确分配;软件要素间的不正确同步
存储内容损坏;数据不一致;堆栈上溢下溢;对已分配其他软件要素的内存进行读或写
信息交换信息重复;信息丢失;信息延迟;信息插入;信息伪装;信息乱序;信息损坏;接收方收到同一个发送者的数据不一致;仅部分接收方收到发送者的信息;阻塞通信通道
内存保护单元简介
MPU 在功能安全中的角色
在介绍 MPU 之前,需要先了解其在 ISO 26262 框架中的作用。软件分区将有独立性要求的各软件组件隔离,避免级联失效导致系统失效。软件分区是 ISO 26262 标准推荐的一种关键安全措施,旨在实现 “免于干扰”。时序和执行、存储、信息交换是使用软件分区方法时分析危害的三个重要维度,而内存保护单元是应对存储维度危害的重要安全措施。

[图 4 免于干扰和内存保护单元的关系]
内存干扰的举例
为了更直观地理解软件的相互干扰,以非安全相关软件影响安全相关软件为例。图 5 展示了当非安全软件故障时,系统失效导致的非预期访问、指针异常、数据越界、堆栈溢出、错误传参等情况,可能影响安全相关软件的静态数据、堆栈、寄存器、中断。

[图 5 内存干扰举例 [4]]
MPU 的工作原理
内存保护单元(MPU)提供存储器保护功能,通过检测和防止不可靠程序、失控事件等对系统资源的未授权使用,维持系统的稳定运行。其原理是将整个内存空间划分为若干个具有特定起始地址和大小的保护区域,并为每个区域独立配置数据读取、数据写入和代码执行三种访问权限。使能后,MPU 会监控所有内存访问,一旦访问行为与区域权限不符,立即触发一个硬件异常(读、写、执行、外设、总线、空地址、堆栈、寄存器、DMA 等异常),系统进入 MPU TRAP。图 6 展示了 MPU 权限配置。

[图 6 MPU 权限配置示意图]
为便于直观理解,本文以瑞萨 RH850 系列芯片为例说明 MPU 的架构,具体实现如图 7 所示。每个 Core(PEn)和 HSM(ICUHMA)都有自己的 MPU,用于定义软件访问保护。每个 Core 都有自己的 Local RAM,所有 Core 共享 Cluster RAM。RH850 总线上资源(Local RAM, Cluster RAM, Code Flash, Data Flash 等)均有防护机制控制总线对其的访问。

[图 7 Renesas RH850/U2A Memeory Protection Architecture]
总结
在实现软件分区的各种技术手段中,内存保护单元(MPU)是一种重要且常用的硬件机制。通过对内存访问权限进行硬件级控制,MPU 能够有效防止非法访问和内存破坏,从而降低软件模块之间发生级联失效的风险。然而,在实际工程项目中,由于硬件资源限制、系统架构历史包袱或项目周期等原因,并非所有系统都能够通过 MPU 实现内存保护。因此,当系统无法使用 MPU 时,仍然需要寻找其他技术手段来实现免于干扰。