3. 功能安全软件架构设计原则
功能安全软件架构不是把安全机制“堆”到应用层,而是要在软件结构上建立可验证的隔离、可追溯的机制部署和可预测的失效响应。对AURIX TC3xx这类多核锁步MCU而言,架构设计的核心问题是:哪些安全机制由硬件提供、哪些由基础软件封装、哪些由应用层实现,以及它们如何通过分层与分区形成“免于干扰”的边界。本节围绕四条原则展开:安全架构分层、安全机制部署、免于干扰、安全状态与降级策略,并给出在AURIX上的映射方法。
一、安全架构分层:从硬件到应用的四层结构
推荐将AURIX功能安全软件划分为四层。第一层是硬件安全层,包括锁步核、ECC、SMU、安全管理单元、时钟与电压监控等,它们由芯片直接提供,软件只能通过寄存器读取状态、通过SMU报警响应。第二层是安全基础软件层,通常由MC-ISAR Safety Library、SafeTlib或自研安全库构成,负责对硬件机制进行初始化、周期自检和结果封装,向上提供统一的“安全机制状态”接口。第三层是安全服务层,实现端到端保护(E2E)、内存分区保护、程序流监控、安全状态机与降级仲裁。第四层是应用安全层,承载具体功能的安全目标,例如扭矩监控、电机位置合理性判断、制动请求校验等。
分层的意义在于:越靠近硬件的层,机制越通用、越可复用;越靠近应用的层,机制越贴近具体功能的安全目标。分层还决定了故障传播路径——底层检测到的故障应通过统一接口上报,而不是让每个应用模块各自去读SMU寄存器。
二、安全机制部署:按诊断覆盖率与失效模式分配
安全机制部署不是“越多越好”,而是按失效模式与诊断覆盖率(DC)分配。以AURIX TC3xx为例,CPU锁步核覆盖CPU内部逻辑故障,DC可达99%以上;Flash ECC覆盖存储单元位翻转,单比特纠正、双比特报警;RAM ECC覆盖数据存储;SMU负责汇聚报警并触发反应。软件侧需要补充的是:硬件机制无法覆盖的“共因失效”和“时序相关失效”,例如双核同源时钟故障、任务超时、数据流被篡改。
部署时建议建立一张“失效模式—机制—层级—响应”映射表。例如:CPU寄存器位翻转由锁步核覆盖,响应为SMU报警;任务执行超时由看门狗或程序流监控覆盖,响应为任务级降级;CAN报文被篡改由E2E保护覆盖,响应为丢弃报文并进入安全状态。每个机制必须明确:检测对象、检测周期、诊断覆盖率假设、响应动作、响应时间。缺少任何一项,机制就无法在安全论证中闭环。
三、免于干扰:空间隔离、时间隔离与通信隔离
免于干扰(Freedom From Interference, FFI)是混合临界系统的基本要求。在AURIX上,FFI通过三种隔离实现。空间隔离依赖MPU(内存保护单元)和SMU的访问权限配置,将安全相关任务与非安全任务的代码、数据、外设寄存器划分到不同地址区间,禁止跨区写访问。时间隔离依赖OS调度和看门狗,确保安全任务在预算时间内获得CPU,非安全任务不能长期占用核或阻塞中断。通信隔离依赖E2E保护和分区内的数据校验,防止非安全分区篡改安全数据。
实际配置中,通常将安全任务绑定到CPU0,非安全任务绑定到CPU1/CPU2,通过MPU设置CPU0的代码区为只读、数据区为安全区,非安全核只能读取安全核发布的只读结果,不能写入。若发生越权访问,MPU触发异常,由安全服务层捕获并进入降级。FFI的验证方法是:构造非安全任务故意写安全区、故意长时间占用CPU、故意发送错误报文,观察安全机制是否按预期触发。
四、安全状态与降级策略:从报警到可控失效
安全状态不是单一状态,而是一组按严重度排列的降级等级。常见划分是:正常(Normal)、受限(Degraded)、安全停止(Safe Stop)、紧急关闭(Emergency Shutdown)。触发条件来自SMU报警等级、E2E校验失败次数、任务超时次数等。降级策略必须定义“进入条件、保持时间、恢复条件、恢复权限”。例如,单次E2E校验失败可记录并继续运行;连续3次失败则进入受限模式,限制扭矩输出;若SMU报出锁步核比较错误,则直接进入安全停止。
降级过程中要避免“降级本身引入新风险”。例如,关闭输出前必须确认执行器处于安全位置;进入安全停止后,通信仍需保持,以便诊断和恢复。恢复不能自动进行,必须经过明确的自检通过和条件满足,防止故障未排除就重新使能。
五、AURIX上的架构映射方法
将上述原则映射到AURIX,可按以下步骤落地。第一步,确定安全相关核与非安全核的分配,通常CPU0作为安全核,CPU1/CPU2作为非安全核或安全协处理核。第二步,配置MPU区域:安全核代码区只读、安全数据区仅安全核可写、非安全区禁止安全核写入。第三步,配置SMU报警路由:将锁步错误、ECC双比特错误、时钟丢失等报警映射到安全服务层的报警处理函数,并设置报警等级。第四步,部署SafeTlib或MC-ISAR Safety,完成启动自检、周期自检和SMU报警处理。第五步,在安全服务层实现安全状态机,将报警等级映射为降级动作。第六步,在应用层实现E2E保护和功能级监控,并通过接口向安全状态机上报。
映射完成后,需要用故障注入验证:通过SMU强制触发报警、通过MPU构造越权访问、通过E2E注入错误报文,观察系统是否按设计进入对应降级状态,并记录响应时间。只有验证通过的映射,才能作为安全论证的证据。