高级自动驾驶中央域控制器的设计过程需要充分掌握其中的安全设计原则,因为前期设计中,无论是架构、软件、硬件还是通信都是需要充分掌握其设计规则才能充分发挥出相应的优势,同时规避掉一定的设计问题的。
这里我们讲的高阶域控制器功能安全设计主要是指包含前端研发中预期功能安全所涉及的场景分析和后端功能安全所涉及的所有子项。首先以硬件基础层面为连接基点,通过数据通信端实现整个系统架构通信、数据流传输,软件则是烧录到硬件上,以硬件为载体,通信单元负责相互之间的模块调用。因此对于域控制器的安全设计端来说。从整车安全能力分析上看,主要的分析过程也包括如下三个方面:系统理论分析 STPA(Systems Theoretic Process Analysis)、失效模式与影响分析FMEA、故障树分析(Fault Tree Analysis, FTA) 。
对于架构核心中的域控制器来讲,其中涉及到非常强大的功能安全等级。我们可以总体分为三个层面:数据通信安全、硬件基础安全、软件基础安全三个层面。而具体到相应的分析过程却需要充分考虑到包含硬件基础层面功能安全、软件基础层面功能安全以及数据通信能力等几个方面,且每个方面的分析都需要面面俱到。
数据通信安全
通信端作为连接和数据流入流出端,对整个系统架构通信起着举足轻重的作用,对于数据通信层面来说,其功能安全要求主要指通用数据完整性机制、在线计数机制(Rolling Counter)、系统诊断数据刷新、时间戳信息(Time Stamp)、时间溢出(CheckSum)、管理授权代码、数据冗余、网关等几大方面。其中,对于数据通信来讲,诸如在线计数、诊断、时间溢出校验等都和传统的点对点Canbus信号是一致的,而对于下一代自动驾驶来说,数据冗余、中央网关管理优化、数据授权访问等则是需要重点关注的方面。
他们在功能安全的整体要求如下:
硬件基础层面
硬件基础层面的功能安全要求主要是指微控制器模块、存储模块、电源支持、串行数据通信等几大模块。
微控制器模块安全
这里的微控制器也就是我们常说的AI芯片(SOC)、浮点运算芯片(GPU)以及逻辑运算芯片(MCU)几个运行于车端域控制器的主要运算单元。从功能安全设计的角度上讲,各类不同的微控制器模块包含通用设计模块、锁步核校验(包含锁步核比较、锁步核自检)、时钟校验(包含时钟比较、时钟自检)、程序流监控、心跳监控、硬件看门狗功能、中断保护、内存/闪存/寄存器监控/自检、电源监控和自检、通信保护等几大方面。
需要说明的是微控制器应通过硬线向监控单元提供“活动心跳”周期性切换信号。切换信号应由安全看门狗管理,该看门狗还提供程序流监控功能。仅允许安全看门狗在看门狗服务期间切换“活动心跳”。微控制器安全软件则应在每次为内部安全看门狗服务期间切换“活动心跳”,这向监控单元指示微控制器正在运行并且安全看门狗定时器正在运行。系统后台应通过检查信号切换和高低状态的时间都在有效范围内来监控“活动心跳”切换信号。一旦检测到“活动心跳”故障,SMU 将激活安全降级。
对于看门狗程序来说,应在系统初始化期间进行测试,以避免潜在的故障。过程中应测试以下故障类型:
- 不正确的看门狗触发时间(在关闭窗口中触发);
- 没有看门狗触发;
存储模块安全
存储模块是整个域控不可或缺的一部分,在整个芯片运算过程中,主要用于进行临时性、常用的文件存储,以及运算过程中的数据交换,比如我们的操作系统启动程序就是存放在一个SOC/MCU外挂的存储单元中,又如我们下一代自动驾驶产品中必须用到行车/泊车高精地图,通常也是外挂于芯片的存储单元进行存储的,还有一些底层软件中的诊断、日志类的文件也是放到我们外挂的芯片中进行存储的。那么对于整个存储单元而言,需要满足什么样的条件才能确保达到合适的功能安全条件呢?如下图做具体说明。
整个存储单元的安全主要包括寄存器监控、通用存储单元、RAM/内存 ECC、ECC自检、闪存冗余、寄存器写保护、范围保护、寄存器自检等多个方面。
电源供给完整性
电源供给的完整性安全方法测试主要是通过对整个电源运行状态的。通过故障注入,并实时监测来进行的。
一种测试方法示例是配置较高或较低的监控阈值,以强制监控器检测欠压或过压故障并验证是否正确检测到故障。注入故障时,电源监视器应激活辅助关闭路径。微控制器应监控辅助关断路径,如果辅助关断路径的行为与预期的测试程序一致,则仅考虑测试“通过”,否则视为“失败”。一旦检测到失败,微控制器将激活安全降级。该测试可由专用 BIST 功能支持,并且必须由微控制器软件根据详细程序进行配置。
软件基础安全
关于软件基础安全层面的设计考虑,主要是对车载智能驾驶软件开发过程中可能出现的软件故障进行的综合考虑。其中包括软件文档设计、软件语言和风格、安全关键变量、故障探测和纠错、软件架构、安全关键代码、程序流程监控、变更管理等几个大方面。所有层面的软件设计描述均应使用自然语言,以定义模型或代码目的。比如,当多个变量间的独立性对系统的安全至关重要时,不应将这些变量组合为一个使用变量公共地址的数据要素。这可能导致涉及结构中所有要素的共模系统性失效。如果变量已经分组,则应针对安全关键函数进行恰当论证。
本文从功能安全的角度出发,从各个不同的方面详细分析了整个自动驾驶域控制器设计综合要素及流程。其中,包含硬件基础、软件方法、数据通信等各个方面。这些功能安全设计能力都是在关注整个架构层面的同时,充分关注其内部各个部件之间的联系,确保设计过程的合规性和完整性,避免在设计后期出现不可预估的后果。因此,作为详细的安全设计细则,可以为开发工程师提供必要的参考。