资讯动态

ADAS/自动驾驶处理器功能安全深度拆解:从ISO 26262到锁步核与安全岛实战

发布时间:2026/10/9 4:40:14 来源:尧图企业网站定制
1. 从一颗芯片说起ADAS/自动驾驶处理器的功能安全到底在防什么我第一次真正意识到“功能安全”这四个字的分量是在一个做前视一体机的项目里。当时我们选了一颗当时算力还算不错的SoC跑基础的L2功能AEB、ACC、LKA这些。硬件同事拍着胸脯说芯片是车规级温度范围、振动、EMC都过了。结果在功能安全评审会上一位做了十几年底盘的老师傅问了一句“如果这颗芯片内部的一个乘法器因为老化翻转了你的AEB还能不能保证不误刹、不漏刹”全场安静。这就是ADAS和自动驾驶处理器功能安全的核心命题。它不是问“芯片会不会坏”而是问“芯片坏了之后系统还能不能保证安全”。普通消费电子里手机处理器算错一个像素顶多是照片颜色不对但自动驾驶处理器算错一个目标距离可能就是一条人命。所以功能安全本质上是一套“承认硬件一定会失效”的工程哲学然后围绕这个前提去设计检测、冗余和降级机制。这篇文章我想把ADAS/自动驾驶处理器功能安全这件事从头到尾拆一遍。从为什么车规芯片和消费芯片是两回事到ISO 26262到底要求了什么再到一颗SoC内部是怎么做安全岛、锁步核、ECC和BIST的最后落到实际选型和开发中那些文档里不会写的坑。适合正在做域控制器、行泊一体或者高阶智驾方案的硬件工程师、系统架构师和功能安全工程师参考也适合刚入行想搞清楚“功能安全到底在做什么”的朋友。2. 先搞清楚ADAS处理器和手机处理器根本不是一个物种2.1 消费级芯片的失效模型坏了就重启手机处理器天梯图2026上的那些旗舰芯片跑分动辄几百万制程先进、频率高、缓存大。但它们的设计目标里“可靠性”的优先级排在性能、功耗、面积之后。一颗手机SoC如果某个核心算错了系统可能直接死机用户重启一下就行。整个软件栈对硬件错误的容忍策略就是“崩溃-重启”因为后果可控。消费级芯片的失效模型建立在“失效可接受”的基础上。它不需要知道自己是哪里坏了也不需要保证坏的时候输出是对的。它只需要在大多数时候输出是对的坏了让用户感知到并重启即可。这个逻辑在手机、平板、笔记本上完全成立因为最坏结果就是用户体验下降。2.2 车规芯片的失效模型坏了也必须输出安全结果ADAS处理器面对的场景完全不同。一辆车在高速上以120公里每小时行驶AEB系统从感知到执行只有几百毫秒。如果处理器在这个窗口内发生了瞬态故障比如SRAM某一位翻转导致目标距离算错而系统没有任何检测机制那AEB可能该触发时不触发或者不该触发时误触发。前者是漏刹后者是幽灵刹车两个都是严重的安全事故。所以车规处理器的失效模型是“失效必然发生但失效必须被检测并导向安全状态”。这个安全状态可能是降级到人工驾驶、可能是限制功能范围、也可能是输出一个安全的默认值。关键在于系统必须知道自己在什么时候不可信了。2.3 功能安全不是零失效而是可控失效这里有一个很多人会误解的点。功能安全不是要求芯片永远不坏也不是要求把失效率降到零。它的目标是当随机硬件失效发生时系统能够检测到并且在足够短的时间内进入安全状态使得失效不会导致不可接受的风险。用生活化的类比来说普通芯片像是一个没有刹车的自行车骑得快但一旦出问题就只能摔。功能安全芯片像是一辆有双回路刹车、有ABS、有刹车片磨损报警的车它也会出问题但出问题的时候你知道而且还能控制住。这个理念落到标准上就是ISO 26262。它定义了汽车安全完整性等级ASIL从A到DD最高。ADAS和自动驾驶处理器通常需要达到ASIL-B到ASIL-D具体取决于功能的风险等级。比如AEB通常要求ASIL-D因为它的失效后果最严重而一些舒适性ADAS功能可能只需要ASIL-A或QM。3. ISO 26262对处理器到底提了什么要求3.1 ASIL等级是怎么定出来的ASIL等级由三个维度决定严重度S、暴露率E、可控性C。严重度从S0到S3S3最严重暴露率从E0到E4E4最高频可控性从C0到C3C3最难控制。三个维度组合查表得出ASIL等级。举个例子AEB在高速场景下的失效严重度S3可能致命暴露率E4高速行驶是常见场景可控性C3驾驶员几乎无法在毫秒级接管组合下来就是ASIL-D。而泊车辅助的失效严重度可能S2暴露率E3可控性C2组合下来可能只需要ASIL-B。这个定级过程不是拍脑袋而是要在项目早期做危害分析和风险评估。我见过不少团队在项目后期才发现某个功能需要ASIL-D结果硬件选型根本不支持只能推倒重来。所以功能安全必须从架构设计第一天就介入。3.2 对处理器的具体技术需求ISO 26262对处理器的要求可以归纳为几个层面。第一是随机硬件失效的量化指标包括单点故障度量SPFM和潜伏故障度量LFM。ASIL-D要求SPFM大于等于99%LFM大于等于90%。这两个指标直接决定了芯片内部需要多少冗余和检测机制。第二是架构层面的要求。处理器需要具备自检能力比如上电自检、周期性自检、以及运行时的错误检测。对于ASIL-D的核通常要求锁步双核或者至少是具备错误检测能力的单核。锁步的意思是两个核跑同样的代码每个周期比较输出一旦不一致就报错。第三是软件层面的配合。硬件提供了检测机制软件需要响应这些错误信号并在规定的时间内进入安全状态。这个时间叫故障处理时间间隔FTTI是从故障发生到可能导致危害的时间窗口。FTTI决定了诊断覆盖率需要做到多高。3.3 安全岛处理器里的“安全特区”现代ADAS处理器通常采用异构架构里面有大算力的应用核跑感知和规划也有专门的安全岛跑安全监控和降级逻辑。安全岛本身通常是锁步核达到ASIL-D而应用核可能只做到ASIL-B或者通过安全岛来监控。这种架构的逻辑是大算力核负责性能安全岛负责安全。安全岛不追求算力追求的是确定性和可靠性。它监控应用核的心跳、内存访问、输出范围一旦发现异常就接管控制把系统导向安全状态。我参与过的一个行泊一体项目里安全岛是一颗独立的锁步MCU通过SPI和主SoC通信。主SoC每10毫秒发一次心跳和关键状态安全岛校验这些数据的合理性。如果连续三次心跳异常安全岛就切断主SoC对执行器的控制权切换到降级模式。这个设计看起来简单但实际调试时发现SPI通信本身的故障模式也需要考虑后来加了CRC和超时重传才稳定下来。4. 一颗ADAS处理器内部的功能安全机制拆解4.1 锁步核最核心的冗余手段锁步核是功能安全处理器最标志性的技术。它的原理很简单两个完全相同的核输入相同的时钟和复位跑相同的代码每个周期比较关键输出。如果输出不一致说明其中一个核发生了故障硬件立即报错。但锁步核的实现有很多细节。首先是比较的粒度是每个周期都比较还是每隔几个周期比较。每个周期比较检测延迟最低但功耗和面积开销大。其次是比较的范围是只比较输出总线还是包括内部状态。只比较输出可能漏掉一些内部错误比较内部状态又太复杂。实际芯片里通常采用延迟锁步或者分时锁步。延迟锁步是两个核错开几个周期运行避免共因失效。分时锁步是定期比较而不是每周期比较降低功耗。这些取舍取决于芯片的目标ASIL等级和应用场景。注意锁步核只能检测随机硬件失效不能检测系统性失效。如果两个核跑的是同一份有bug的代码锁步是发现不了的。所以软件层面的安全机制同样重要。4.2 ECC内存和总线的守护者ADAS处理器里有大量的SRAM、DRAM和总线互连。这些存储单元和传输路径都可能发生位翻转。ECC就是用来检测和纠正这些错误的。ECC分几种。SEC-DED可以纠正一位错误、检测两位错误是最常用的。对于更高级别的安全需求还有SECDED加交织、或者更复杂的纠错码。ECC的覆盖率直接影响SPFM指标。如果所有SRAM都带ECC总线的传输也带ECC那内存相关的单点故障就能被大幅覆盖。但ECC不是万能的。它只能处理一定位数的错误而且ECC本身的逻辑电路也可能失效。所以高安全等级的芯片会对ECC逻辑本身也做冗余或者自检。另外ECC报错后的处理策略也很关键。是纠正后继续运行还是记录错误并上报还是直接进入安全状态取决于错误的类型和频率。4.3 BIST上电和运行时的自检BIST分为上电自检和运行时自检。上电自检在芯片启动时跑一遍检查核心逻辑、内存、总线是否正常。运行时自检在系统运行过程中周期性执行检测那些上电时正常但运行中可能失效的部件。LBIST用于逻辑电路通常通过扫描链注入测试向量检查逻辑输出是否符合预期。MBIST用于内存通过写入和读取特定模式来检测存储单元的故障。这些自检的覆盖率、执行时间和执行频率都需要在安全概念里定义。实际项目中上电自检的时间直接影响系统的启动时间。如果自检要跑几百毫秒那倒车影像可能就要等这么久才能出来。所以很多芯片支持分区自检关键部件先检非关键部件后检或者后台检。4.4 时钟和电源监控最基础的保障时钟和电源是处理器工作的基础。时钟频率漂移、占空比异常、电源电压超出范围都可能导致逻辑错误。所以功能安全处理器通常有独立的时钟监控电路和电压监控电路。时钟监控通常用独立的RC振荡器或者晶振作为参考比较主时钟的频率是否在允许范围内。电压监控用ADC或者比较器检测核心电压和IO电压。这些监控电路的输出会送到安全岛或者错误管理单元触发相应的响应。这些机制看起来简单但实际调试时经常出问题。比如电压监控的阈值设置太紧正常波动就触发报警设置太松真正异常时又检测不到。这个阈值需要根据芯片的datasheet和实际电源质量来调。5. 从需求到落地功能安全处理器的选型和开发实操5.1 选型第一步明确你的ASIL目标选型之前必须先明确每个功能的ASIL等级。不是所有ADAS功能都需要ASIL-D。前视L2的AEB通常ASIL-D但盲区监测可能ASIL-B就够了。把功能按ASIL分类然后看处理器能不能支持。一个常见的误区是“选最高等级的芯片就对了”。ASIL-D的芯片贵、功耗高、开发周期长。如果功能只需要ASIL-B选ASIL-D芯片是浪费。反过来如果功能需要ASIL-D但选了只支持ASIL-B的芯片那整个安全论证就做不下去。我一般建议做一个ASIL分配表列出每个功能、对应的ASIL等级、需要的安全机制、以及候选芯片是否支持。这个表在项目早期就要和功能安全经理一起评审。5.2 看芯片的安全手册不要只看数据手册数据手册告诉你芯片能做什么安全手册告诉你芯片在失效时能做什么。安全手册里会有FMEDA的结果列出每个模块的失效率、诊断覆盖率、以及假设的安全机制。这些数据是做安全论证的基础。看安全手册时要重点关注几个东西。第一是假设的安全机制芯片厂商假设你在系统层面会做什么。比如芯片假设你会定期读错误寄存器如果你没读那诊断覆盖率就达不到宣称的值。第二是安全机制的详细说明比如锁步核的比较周期、ECC的纠错能力、BIST的执行时间。第三是安全手册里明确标注的“假设”和“依赖”这些是系统集成时必须满足的条件。5.3 硬件设计电源、时钟和PCB布局的安全考量功能安全不只是芯片的事硬件设计同样关键。电源方面通常需要独立的电源监控芯片监控核心电压和IO电压。时钟方面需要独立的时钟监控检测时钟丢失或频率异常。PCB布局方面关键信号需要做冗余或者保护避免单点故障。我踩过的一个坑是电源监控芯片的响应时间。当时选了一颗监控芯片响应时间典型值是10毫秒但我们的FTTI只有5毫秒。这意味着电源异常发生后监控芯片还没反应过来系统已经可能出问题了。后来换了一颗响应时间1毫秒以内的才满足要求。另一个坑是PCB上的过孔和走线。如果关键信号只走了一根线那这根线断了就是单点故障。对于ASIL-D的信号通常需要双路走线或者通过其他方式做冗余。这个在layout阶段就要考虑后期改板成本很高。5.4 软件架构安全机制的分层设计软件层面的功能安全通常分三层。第一层是硬件抽象层的安全机制比如读ECC错误寄存器、配置看门狗、响应BIST完成中断。第二层是中间件的安全机制比如数据完整性校验、程序流监控、内存保护。第三层是应用层的安全机制比如输出合理性检查、多传感器融合的一致性校验。程序流监控是软件功能安全里很实用的一个技术。它的原理是在代码里插入检查点定期检查程序是否按预期路径执行。如果程序跑飞了检查点序列就会乱系统就能检测到。这个技术对CPU核的瞬态故障特别有效。内存保护是另一个关键机制。通过MPU或者MMU把不同安全等级的任务隔离防止低安全等级的任务破坏高安全等级的数据。比如感知任务不能写安全岛的内存安全岛可以读感知任务的输出但不能被感知任务修改。提示软件安全机制的诊断覆盖率通常比硬件低因为软件本身也可能有bug。所以软件安全机制更多是补充不能替代硬件安全机制。6. 常见问题与排查技巧实录6.1 锁步核报错但找不到原因这是调试中最常见的问题之一。锁步核报错说明两个核的输出不一致但不一致的原因可能有很多。可能是其中一个核真的坏了也可能是共因失效比如时钟抖动、电源毛刺、温度异常。排查思路是先看错误寄存器的详细信息。很多芯片会记录是哪个比较器报的错、错误发生的地址、错误发生时的上下文。然后看错误是偶发还是必现。偶发的话重点查电源和时钟质量必现的话重点查代码和配置。我遇到过一次锁步核偶发报错查了两周才发现是电源纹波在特定负载下超标。后来在电源输出端加了滤波电容才解决。这个问题的教训是功能安全的调试不能只看数字逻辑模拟电路的质量同样关键。6.2 ECC错误频繁上报ECC错误频繁上报通常说明内存的某个区域在持续发生位翻转。可能的原因包括内存颗粒本身有问题、工作温度过高、电源电压偏低、或者宇宙射线等环境因素。排查时先看错误地址是否集中。如果集中在某个区域可能是那个区域的颗粒有问题。如果分散可能是环境因素。然后看错误类型是单比特错误还是多比特错误。单比特错误ECC能纠正多比特错误通常只能检测不能纠正。处理策略上如果单比特错误频率在可接受范围内可以记录并继续运行。如果频率超过阈值或者出现多比特错误就需要进入安全状态。这个阈值需要在安全概念里定义不能拍脑袋。6.3 BIST执行时间过长影响启动上电自检的时间直接影响系统启动时间。如果BIST要跑500毫秒那倒车影像可能就要等半秒才能出来用户体验很差。优化思路有几个。第一是分区自检关键模块先检非关键模块后台检。第二是降低自检覆盖率从99%降到95%时间可能减半。第三是用硬件加速有些芯片有专门的BIST加速器。第四是并行自检多个模块同时检。但降低覆盖率会影响SPFM指标需要重新做安全论证。所以这个取舍要在项目早期和功能安全经理一起决定。6.4 安全岛和应用核通信异常安全岛和应用核之间的通信是功能安全的关键路径。通信异常可能导致安全岛误判应用核的状态或者应用核收不到安全岛的指令。常见问题包括SPI通信的CRC校验失败、通信超时、数据不一致。排查时先看物理层用示波器看波形是否正常。然后看协议层CRC配置是否正确、超时时间是否合理。最后看应用层数据格式是否匹配、状态机是否同步。我一般建议在通信协议里加序列号和确认机制。每条消息带一个递增的序列号接收方检查序列号是否连续。如果发现跳号说明有消息丢失可以触发重传或者报错。这个机制在调试时特别有用能快速定位是发送方的问题还是接收方的问题。6.5 功能安全文档和实际开发脱节这是很多团队的通病。功能安全文档写得很漂亮但实际开发根本没按文档做。等到评审时发现文档和代码对不上又要花大量时间补。解决方法是把功能安全活动嵌入到开发流程里。需求阶段就写安全需求设计阶段就做安全分析编码阶段就实现安全机制测试阶段就验证安全机制。每个阶段都有对应的文档输出而不是最后补。另外功能安全文档要可追溯。每条安全需求要能追溯到危害分析每个安全机制要能追溯到安全需求每个测试用例要能追溯到安全机制。这个追溯链是功能安全评审的核心。7. 一些实际项目中的经验体会功能安全这件事做久了会发现它不只是技术问题更是流程和文化问题。技术上的机制其实就那些锁步、ECC、BIST、监控但能不能把这些机制用对、用好取决于团队有没有把安全当回事。我见过最离谱的一个项目芯片选了ASIL-D的但软件里把错误寄存器读出来之后直接清零既不记录也不处理。问为什么答曰“怕报警太多影响功能”。这就是典型的把功能安全当负担而不是当保障。另一个体会是功能安全的成本在项目早期最低越往后越高。早期改架构可能只是改几行代码后期改架构可能要重新流片。所以功能安全经理一定要在项目第一天就介入而不是等到硬件回来才开始。还有一点功能安全不是一个人或者一个团队的事。它需要系统、硬件、软件、测试、质量多个团队配合。安全经理的角色更像是协调者和推动者而不是所有安全工作的执行者。这个角色定位如果搞错了要么安全经理累死要么安全工作没人做。最后说一个具体的技巧。在做FMEDA的时候不要只依赖芯片厂商提供的数据。厂商的数据是典型值实际系统的失效率还取决于工作环境、电源质量、散热条件。有条件的话做加速寿命测试或者现场数据收集用实际数据来修正FMEDA。这个工作很繁琐但对安全论证的可信度提升很大。功能安全这个领域标准是死的但工程是活的。ISO 26262告诉你“做什么”但“怎么做”需要每个团队根据自己的产品、流程和文化去摸索。没有一劳永逸的方案只有持续改进的过程。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑