ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

功能安全入门:从IEC 61508到SIL2的Flash诊断机制解析

功能安全入门:从IEC 61508到SIL2的Flash诊断机制解析 功能安全介绍从IEC 61508到SIL2聊聊Flash诊断机制那些事干了十多年嵌入式开发和功能安全相关的工作经常有同行问我功能安全到底怎么入门SIL2等级对存储器的要求到底是什么汽车功能安全和IEC 61508有什么关系说实话刚接触功能安全的时候我也被那一堆标准和文档搞得很头大。什么安全生命周期、失效率、诊断覆盖率、安全完整性等级……每个术语背后都有一大堆讲究。但做过几个项目之后你会发现功能安全的本质其实不复杂就是通过一套系统化的方法把“出错的概率”降到可接受的水平。这篇内容我会结合自己实际做项目的经验从IEC 61508这个功能安全的基石标准讲起梳理功能安全的核心概念然后聚焦到一个非常具体、也非常多人在问的问题上在SIL2等级下Flash存储器应该有什么样的诊断机制这既是标准里的硬性要求也是嵌入式开发中绕不开的实操问题。1. 功能安全到底是什么1.1 一个例子帮你理解功能安全先说个最容易理解的场景。你开车的时候如果安全气囊控制单元检测到碰撞信号它必须在几毫秒内触发气囊展开。如果这个控制单元因为软件跑飞、存储器数据损坏或者传感器信号错误在该展开的时候没展开后果就是灾难性的。功能安全要解决的就是这一类问题当系统发生故障的时候系统能否及时检测到故障并且进入一个安全状态比如报警、停机、降级运行避免对人身、环境或财产造成伤害。注意这里有个关键点功能安全不是消除故障本身而是应对故障的后果。电子设备总会出故障这是物理定律决定的我们做功能安全设计的目标是即便发生了故障系统也能安全地处理不至于酿成事故。用一个生活化的类比家用燃气灶的熄火保护装置。正常情况下它能正常工作但如果火焰异常熄灭了热电偶检测到温度下降会立刻切断燃气阀门。这就是一个典型的安全机制——它不防止火焰熄灭这个“故障”发生但能防止燃气泄漏这个“危害”发生。1.2 风险、SIL与ASIL的核心逻辑功能安全领域里最核心的量化指标就是安全完整性等级。在IEC 61508中叫SILSafety Integrity Level分1到4级在汽车领域用的ISO 26262中叫ASILAutomotive Safety Integrity Level分A到D级。等级越高对系统的安全要求越严格开发和验证的投入也越大。SIL等级由三个因素共同决定后果严重度Consequence Severity出了事有多严重是轻伤还是死亡暴露频率Frequency of Exposure人员暴露在危险环境中的概率有多大可控性Controllability驾驶员或操作人员能否通过其他手段避免伤害这三个因素组合评估后你会得到一个风险等级再映射到对应的SIL或ASIL等级。比如工业设备中某个压力传感器失效可能导致容器爆炸后果严重、暴露频繁、可控性差那它很可能就是SIL3或更高等级的要求。对大多数嵌入式开发者来说日常接触最多的是SIL2这个等级。它比SIL1要求更严格但又不至于像SIL3/4那样需要极高的冗余度和复杂的诊断架构是工业控制、医疗设备、轨道交通等领域的常见要求。我做的几个功能安全项目绝大多数安全功能都落在SIL2。1.3 为什么功能安全现在这么火最近几年功能安全明显热起来了背后有几个原因。一是智能化浪潮的推动。汽车ADAS系统、工业机器人、智能医疗设备这些系统越来越复杂软件的比重越来越大一出问题就是大问题监管和用户都盯得很紧。二是法规强制要求。汽车行业已经有强制性的功能安全审核要求出口欧洲的工业设备也需要满足相应的安全标准。三是市场竞争因素。不少项目的招投标文件里明确写了“供应商需具备IEC 61508或ISO 26262功能安全认证资质”没这个证书连入场资格都没有。所以现在不管是做芯片的、做方案商的还是做终端产品的全都在补功能安全的课。这也是我把这些内容整理出来的原因——希望能帮刚入坑的人少走一些弯路。2. IEC 61508与汽车功能安全标准体系2.1 IEC 61508功能安全的母标准IEC 61508是国际电工委员会发布的功能安全基础标准涵盖了电气/电子/可编程电子安全相关系统的全生命周期要求。它的正式名字叫“Functional safety of electrical/electronic/programmable electronic safety-related systems”来源于各行各业是所有功能安全标准的“母标准”。IEC 61508的框架分成七个部分其中我们做产品开发最常涉及的是第二和第三部分第一部分一般要求定义了安全生命周期和安全管理要求第二部分对电气/电子/可编程电子系统的要求定义了硬件设计、诊断机制、失效率计算等第三部分软件要求定义了软件安全生命周期、开发流程、验证确认要求第四部分术语定义第五部分风险分析和SIL确定方法第六部分第二/三部分的应用指南第七部分技术措施综述这套标准最大的价值在于它把“安全”从一个抽象概念变成了一套可量化、可验证、可追溯的工程流程。你需要做什么分析、采用什么诊断机制、达到多少诊断覆盖率、用什么样的失效率数据来证明平均失效概率达标标准里都有明确的指导。整个安全生命周期要从概念阶段就启动。需求的每个安全功能都会被分配到具体的软硬件组件并通过一系列分析手段比如FMEA、FTA、FMEDA来计算失效率和诊断覆盖率。标准不是等到产品做出来了再“补安全”而是从需求分析的第一天起安全就融入了开发流程的每个环节。2.2 汽车功能安全ISO 26262与IEC 61508的关系汽车行业在IEC 61508的基础上衍生出了自己的功能安全标准ISO 26262名字叫“Road vehicles - Functional safety”。它专门针对乘用车上的电子电气系统2018年发布的第二版还加入了摩托车、卡车、公交车等更多车型以及对半导体也就是芯片本身的功能安全要求。ISO 26262的安全等级叫ASIL分为A、B、C、D四个等级。从大方向来说ASIL B大致对应IEC 61508的SIL2ASIL D大致对应SIL3。当然这不是严格的映射关系因为两个标准的量化指标和评估方法有差异但横向对比可以帮助入门的人建立直觉。我接触过不少做车规芯片的朋友他们经常要在产品需求文档里同时标注SIL和ASIL。比如某款MCU的Flash模块客户会要求它满足ISO 26262 ASIL B同时对应的IEC 61508 SIL2。这时候Flash的诊断机制设计就要同时满足两套标准的要求。2.3 标准不是束缚而是设计指南很多人对功能安全标准的第一印象是“烦”——文档多、流程重、审核严。但你真正按照标准做下来会发现它其实是一份很优秀的设计指南。IEC 61508第二部分里有非常详细的硬件诊断机制推荐表。比如它会对处理器内核推荐什么诊断措施对存储器和总线推荐什么诊断措施对IO接口推荐什么诊断措施以及每种措施能提供多少诊断覆盖率诊断覆盖率DCDiagnostic Coverage。这些内容对于缺乏经验的设计者来说就是非常宝贵的“设计模式库”。换句话说标准没有强制你“必须用某种特定的方案”而是给了你一系列经过验证的方案并告诉每个方案能达到什么效果。你要做的是结合自己的系统架构、成本预算和技术积累选择最合适的组合然后通过量化的分析证明你的整体设计达标。这也是功能安全工程师最有价值的部分——在“达标”和“成本/性能”之间找到平衡点。3. SIL2等级下Flash的诊断机制设计3.1 Flash在功能安全中扮演什么角色接下来聊一个非常具体的问题在SIL2等级下Flash存储器应该有什么样的诊断机制先搞清楚Flash在安全系统中的位置。MCU中Flash的用途主要有两个一是存放程序代码Code Flash二是存放标定数据和掉电保持的参数Data Flash。这两个角色的安全影响不同但在诊断需求上是相似的——Flash里的数据一旦发生位翻转、存储单元故障或地址译码错误轻则程序跑飞重则安全功能失效。Flash的故障模式主要源于这几类第一种是最常见的位翻转Bit Flip通常由辐射、电磁干扰或半导体老化导致。单个bit或多bit发生翻转存储的数据就变了。这个故障的特点是随机性强很难完全避免只能靠冗余和校验手段来检测和纠正。第二种是存储单元退化Cell DegradationFlash的浮栅晶体管经过多次擦写之后电荷保持能力会下降。操作温度高的时候更容易丢数据这也是很多工业设备在高温环境下出现故障的常见原因。第三种是地址译码器故障Address Decoder FaultFlash阵列中某一行或某一列无法访问。这种故障通常导致成片数据出错比单个bit翻转的破坏力大得多但在实际项目中往往容易被忽视。第四种是地址线或数据线的物理短路/断路问题这种属于硬件层面的故障在长期运行中也可能出现。对于SIL2来说你的诊断机制需要覆盖这些故障类型并且达到标准要求的诊断覆盖率。3.2 SIL2对Flash诊断覆盖率的要求IEC 61508把安全相关系统的硬件失效分为两大类安全失效和危险失效。危险失效又可以分为“被诊断机制检测到的”和“未被检测到的”。诊断覆盖率DC的定义是DC 被检测到的危险失效率 / 总危险失效率SIL等级不同对诊断覆盖率的要求也不同。按照IEC 61508-2的推荐整体安全功能的诊断覆盖率要求如下SIL1DC 60% ~ 90%低诊断覆盖率SIL2DC 90% ~ 99%中诊断覆盖率SIL3DC 99% 以上高诊断覆盖率SIL4DC 99.9% 以上超高诊断覆盖率所以SIL2对Flash的存储器诊断覆盖率要求是90%到99%之间。这个数字怎么理解假设你的Flash存储系统所有危险失效的失效率加起来是1000 FIT1 FIT等于10亿小时1次失效那么你的诊断机制需要至少检测其中900到990 FIT的失效剩下的100 FIT以下属于未被检测到的残留风险。你可能会问那我随便用一个简单的校验机制比如对每块数据算个累加和能达到90%的覆盖率吗恐怕不行。因为简单的校验算法对某些故障模式的检测能力很弱。比如32位累加和检测不出两个字数据位置互换的错误也检测不出两个bit恰好同时翻转且值刚好抵消的错误。这也是为什么SIL2推荐使用更加强健的诊断机制。3.3 Flash诊断机制的常见选项与选型项目实践中针对SIL2的Flash诊断有几种主流方案ECC纠错码、CRC循环冗余校验、冗余存储Dual Modular Redundancy以及启动时和运行时的周期性读回测试。下面逐个拆解。ECC硬件级别的实时保护ECC英文全称是Error Correcting Code即纠错码。很多现代MCU芯片内置Flash ECC功能在硬件层面自动计算并校验每个存储单元的校验位。ECC的核心能力有两个单bit错误检测和纠正SECDEDSingle Error Correction Double Error Detection以及双bit错误检测DED。也就是说如果一个bit在存储过程中发生了翻转ECC能够在读取数据时自动把它纠正过来同时产生一个可配置的中断或标志通知软件如果两个bit同时翻转了ECC能发现错误但无法纠正会触发错误报告。在SIL2场景下ECC几乎是Flash诊断的基础配置。原因很简单它在不消耗CPU资源的情况下实时保护每一次读取操作是覆盖率很高的诊断机制。但使用ECC也有一些坑比如Flash模块的ECC校验位是独立于数据区存储的如果你的芯片Flash支持在工厂编程时由用户提供校验位要注意编程工具是否正确计算并烧录了ECC位。某些MCU的Flash ECC保护和DMA访问之间的配合有问题绕过CPU直接从Flash读取数据时ECC错误可能不能及时触发中断。这一点需要在硬件验证阶段重点测试。CRC软件侧的有效补充CRC是专门检测数据完整性问题的算法在功能安全中用于检查Flash中存储的大块数据比如代码段是否完整。CRC可以通过硬件模块或软件实现在SIL2场景下两种方案都可以接受但硬件的处理速度更快。CRC的基本原理是用一个多项式对数据块进行模2除法运算得到一个固定长度的校验值。日后重新计算数据块的CRC如果结果和存储的校验值不一致就说明数据块发生了变化。在Flash诊断中CRC经常和“定期读回”配合使用。也就是说在系统运行的过程中周期性地把Flash中的代码或数据进行CRC计算和上电时记录的基准值比对。一旦发现不一致说明Flash内容可能被破坏了。选择CRC多项式的时候需要注意标准的CRC32多项式比如IEEE 802.3那个0x04C11DB7在面对“大块数据随机错误”时有很好的检测能力但如果你只想保护一小段关键数据选用16位CRC就够了甚至更短的CRC可能也够用。核心原则是CRC的位宽和多项式选择要能覆盖你预期的错误模式。冗余存储用空间换安全冗余存储是最朴素也最可靠的做法之一我经常用“两个本子记同一份账”来比喻。把关键的安全数据存两份或多份在不同的Flash区域读取的时候先读第一份再读第二份两份一致才认为是正确的不一致的话触发恢复流程。冗余存储的最大优势是逻辑简单清晰认证的时候比较容易解释两个独立的存储区域同时发生同样错误的概率极低。但它也有明显的代价Flash空间占用翻倍写入耗时翻倍而且对Flash寿命有额外消耗。因此冗余存储通常只用于关键参数、安全配置字这类“小而精”的数据不会用来保护整个代码区。还有一个细节冗余存储的两个副本不要放在相邻物理位置最好放在完全不同的扇区或Bank这样可以规避某些故障模式导致“连坐”问题。比如某个扇区整体受热损坏如果两份数据都放在这个扇区那就彻底完了。周期性读回测试这个方案我在很多工业控制项目中用到过特别是那些MCU不支持硬件ECC的老平台。它本质上就是周期性从Flash读取每个地址的数据然后和已知的期望值进行比对。读回测试可以检测出的故障类型包括数据线短路/断路、地址线故障、Flash单元的可访问性问题。这些故障用CRC常常检测不到因为CRC是针对“已经读出来的数据”做校验如果地址译码器本身出错了读出来的是错误地址的内容CRC对它无能为力。但读回测试也有个麻烦它需要CPU参与占用一部分运行时间而且如果只是“读”的话无法证明“读出来的就是Flash里存的”。所以读回测试经常和CRC、ECC配合使用ECC负责每次读取的实时保护CRC负责验证数据块的完整性读回测试负责验证存储器和总线本身没有物理故障。三个机制各管一摊配合起来才能覆盖SIL2的90%到99%覆盖率要求。3.4 诊断机制组合设计实例下面用我之前做的一个工业控制器项目来举例说明。项目背景是这样的一台工业设备的主控板使用某款Cortex-M4内核的MCU主频120MHzFlash容量2MB需要满足IEC 61508 SIL2认证。Flash中存放了应用程序代码、设备标定参数、安全配置字三类数据。我们对这三类数据分别设计了诊断机制应用程序代码区大小约1.5MB存放的是编译好的固件。这部分数据量太大不适合冗余存储所以方案是在线运行时使用Flash硬件ECC进行单bit纠错/双bit检测同时系统每10秒由DMA触发一次对整个代码区的CRC32计算使用IEC 802.3标准多项式和上电时计算并保存在RAM中的基准值比对。设备标定参数区大小约64KB存放设备运行参数。这部分数据对系统运行至关重要但数据量又不大。我们采用了双份冗余存储两份数据分别放在Flash的Bank0和Bank1物理不相邻的区域。每次读取时比较两份数据不一致时系统报警并回退到出厂默认参数。安全配置字区大小约8KB存放安全状态配置、诊断使能开关等安全关键数据。这部分采用了“ECC 冗余 定期读回”三重保护因为安全配置字的错误可能直接导致整个安全逻辑失效必须用最高级别的诊断覆盖。整个方案做下来FMEDA分析计算的Flash部分诊断覆盖率约为96到97%超过了SIL2要求的最低90%同时留有一定的设计余量。在认证评审时审核方对这套组合方案的评价是“覆盖思路清晰故障模式分析完整”。4. 实操过程从安全需求到诊断机制的落地4.1 安全需求如何分解到Flash模块在实际项目中Flash诊断机制的设计不是拍脑袋决定的而是从安全需求逐级分解下来的。以IEC 61508为例流程大致是这样的先做危害分析和风险评估确定系统的安全功能和安全完整性等级要求也就是SIL等级。接下来在系统架构设计阶段把安全功能分配到各个子系统比如一个安全功能需要MCU执行一个检测算法并输出信号。这个安全功能就落到了MCU内部。然后是硬件详细设计阶段要对MCU内部的各个模块做失效模式和影响分析FMEA或者失效模式、影响及诊断分析FMEDA。FMEDA会逐模块列出可能的故障模式、故障率、现有诊断机制以及对应的诊断覆盖率。举个例子分析到Flash模块的时候你会列出一个类似这样的表故障模式失效率FIT诊断机制诊断覆盖率存储单元单bit翻转120硬件ECC单bit纠正97%存储单元双bit翻转15硬件ECC双bit检测软件中断90%地址译码器故障8定期读回测试95%数据线短路5CRC对比98%最终把所有故障模式按比例加权计算得到Flash模块整体的诊断覆盖率。这个数字要能够达到SIL2要求的90%到99%并且要能通过安全验证报告向审核方证明。FMEDA分析的一个常见误区是只分析了“数据坏了”这种故障忽略了“诊断机制本身可能也坏掉”的情况。比如ECC电路本身故障了怎么办CRC计算模块被配置错了怎么办这也是为什么功能安全标准要求诊断机制自身要具备自检能力。比如CRC模块可以通过跑一个预定义的测试向量来验证计算正确性ECC模块可以通过注入错误并观察中断来验证检测功能。4.2 具体的Flash安全机制配置流程下面以我之前用的一个具体MCU平台为例说明Flash ECC和CRC功能的上电配置流程和运行流程。这个MCU支持Flash ECC和硬件CRC计算器开发环境是IAR Embedded Workbench。上电阶段完成三件事初始化Flash控制器使能ECC功能配置ECC错误中断的回调函数。要注意的是ECC的两个错误等级可纠正错误和不可纠正错误需要分别配置中断使能位方便软件区分处理。计算整个代码区的CRC基准值。这一步要在实际运行中“算一遍”而不是直接读取出厂存储的CRC因为代码区在烧录后可能被启动引导程序修改过直接使用出厂值会有不一致的风险。将安全配置字从Flash读取到RAM中CPU先按普通方式读取再通过ECC的硬件状态寄存器确认没有任何ECC错误被报告。运行阶段需要周期执行的动作每10秒触发一次CRC校验任务用DMA将代码区数据搬运到CRC计算器计算完成后和基准值比对。CRC校验占用约30毫秒时间对于100ms周期的控制系统来说可以接受。每100毫秒检查一次ECC错误状态寄存器和计数寄存器。如果发现ECC中断发生需要记录是哪块区域地址和错误类型并根据策略决定是否切换到备用程序或进入安全状态。每1秒执行一次Flash读回测试读取几个关键扇区的首尾地址内容和期望值比对。这个测试不校验整个Flash只做抽样主要用来发现地址线故障。这里有个细节要提醒大家ECC错误的中断处理程序一定不能写得太重更不能在中断里做Flash擦写操作。我踩过一个坑某次ECC错误中断里顺手做了个日志记录操作结果日志恰好要写入Flash而Flash在擦写期间ECC读保护机制会暂时失效导致整个系统卡死。后来把日志操作改成了先缓存在RAM中、延迟写入的方案问题才解决。4.3 安全机制如何验证诊断机制设计完了验证环节才是真正考验人的时候。一个常见的验证手段是故障注入测试Fault Injection Testing。故障注入的核心思想是人为地在系统中制造故障然后检查诊断机制是否能按预期检测到故障并触发正确的响应。对于Flash诊断来说常用的故障注入方法有以下几种第一修改某个Flash地址的存储内容。比如通过调试器在烧录后直接修改一个字节的数据然后触发读操作或CRC校验验证诊断机制能否发现数据不符合预期。第二通过MCU的ECC测试模式注入错误。很多MCU提供了ECC自动纠错测试功能可以通过测试寄存器向某段Flash注入单bit或双bit错误然后读取数据观察是否触发对应的ECC中断。第三模拟存储单元退化。可以通过在Flash即将达到擦写寿命上限时进行ECC和CRC测试观察诊断机制在“边缘工况”下的表现。第四通过地址线故障仿真。某些平台允许用户把Flash映射到不同的地址区间借此模拟地址译码异常验证读回测试的检测能力。我在做SIL2认证的测试阶段发现了一个有意思的问题CRC基准值的计算方法在不同编译器优化等级下结果不一致。原因是编译器在-O2优化下可能改变代码段的布局导致CRC计算的范围和基准值计算时不一致。这个问题的教训是CRC基准值的计算必须放在代码中启动阶段重新做一遍不能依赖编译时生成的固定值。后来我们在启动代码里加入了“CRC基准备注”每次上电都是从当前运行的代码区重新计算基准值彻底规避了这个问题。4.4 安全手册与文档的编写经验功能安全项目除了代码实现还有一个重要产出就是安全手册或安全分析文档。SIL2认证审核时审核方通常会要求提供以下内容安全需求规格书System Safety Requirements Specification硬件设计说明与安全架构描述Hardware Safety Architecture DescriptionFMEDA分析报告包括故障模式、失效率、诊断覆盖率计算过程诊断机制的详细设计说明对每种诊断机制的实现原理、配置参数、触发条件进行详细说明验证与确认报告包括测试用例、测试结果、故障注入测试记录很多嵌入式工程师觉得写文档是最痛苦的部分但我的经验是好的文档其实能反向提升你的设计质量。当你能把每个诊断机制的实现逻辑、为什么用这种方法、覆盖率是如何计算的写清楚你对系统的理解就会更加透彻也更容易发现设计中的漏洞。文档建议从项目一开始就维护而不要等到开发快结束才补。可以画一个“需求追踪矩阵”从顶层的安全目标逐级追踪到具体的硬件设计元素和测试用例。审核方几乎一定会要求看到这条追踪链路提前维护好后面会省很多力气。5. 常见问题与排查技巧实录5.1 典型问题速查表下面是我在多个功能安全项目中遇到的典型问题整理成速查表供大家参考。现象可能原因排查与解决运行中偶发ECC可纠正错误中断环境辐射、供电波动或Flash单元老化记录错误地址和时间统计错误频率若持续增长考虑降额或更换存储方案CRC比对偶发失败CRC计算范围不一致或DMA配置错误检查CRC引擎的字节序设置、DMA搬运长度确认代码区大小没有包含未初始化区域双份冗余存储不一致写入顺序异常或掉电时序问题使用“先写备份、延迟写主副本”的顺序并增加关于两个副本写入顺序的注释说明Flash读回测试在高速时钟下误报时序裕量不足降低读回时钟频率或改用CPU直接读取的方式ECC中断处理卡死系统中断处理程序执行了Flash擦写中断处理中仅记录信息并置位标志延后处理链接脚本变更后CRC失效链接脚本修改了代码段布局增加启动时的CRC基准值重算逻辑不依赖链接时固定值5.2 我的几条独家避坑经验第一千万不要在启动阶段同时开启Flash ECC和关闭代码预取缓存。某些MCU的预取缓存和ECC纠错之间有交互问题同时开启可能导致数据读取错乱。安全规范的做法是启动阶段先关闭缓存初始化ECC等系统稳定后再开启缓存。第二CRC校验的周期选择和系统控制周期要结合起来。如果控制周期是10毫秒而你每100毫秒才做一次CRC校验那么这个“空窗期”内的Flash故障是无法被及时发现的。我一般建议CRC校验间隔不要超过控制周期的10倍这样即使数据被破坏也能在相对短的时间内被检测到。第三安全等级认证中“软件看门狗”和“Flash诊断”经常被混淆。看门狗负责检测程序流程错误Flash诊断负责检测数据完整性二者不是一回事也不能互相替代。我见过有的项目只是加了个看门狗就声称满足SIL2这是明显的设计遗漏认证的时候肯定通不过。第四使用外置Flash比如SPI NOR Flash来扩展存储时也需要考虑诊断机制。外置Flash的故障模式更复杂因为还多了一层通信链路——SPI总线的干扰可能被误认为是Flash数据错误。这种情况下建议在数据格式中增加序列号和时间戳避免陈旧数据被当作有效数据使用。5.3 从实际测试中发现的设计改进有一次做高低温循环测试系统温度从零下40度升到85度的过程中偶发出现Flash ECC纠正事件。一开始怀疑是温度导致Flash单元电荷泄漏但数据量和日志分析后发现问题实际上出在电源上高低温变化时电源模块的输出纹波变大导致Flash读取电压不稳引发了错误。这个案例给了我们两个教训第一遇到Flash相关的偶发错误不要第一时间只盯住Flash本身要沿着“电源-时钟-总线-存储”这条链路逐个排查。第二诊断机制记录的信息越详细越好——不仅记录“哪个地址发生了错误”还要记录“错误发生时的系统状态”这些数据在故障定位时会起到决定性的作用。写在最后的一点体会功能安全这个方向入门看起来有门槛但其实核心逻辑并不复杂理解风险、量化风险、控制风险、验证控制措施有效。Flash诊断机制只是其中一个很小的技术点但透过它你能看到整个功能安全体系运作的方式——从危害分析到具体实现再到验证闭环。我个人在做功能安全项目的这几年里最大的收获不是学会了多少诊断技术的细节而是养成了一种“系统化思考”的习惯。拿到任何一个新设计第一反应不再是“功能上能不能实现”而是“如果这里出故障了会发生什么我应该怎么防护”这种思维方式对于每一个从事嵌入式开发和电子系统设计的人来说都非常有价值。如果你正在准备做一个功能安全相关的项目我的建议是先别急着选芯片和写代码花点时间把标准和需求吃透。明确你的系统属于哪个SIL等级明确这个等级对存储、CPU、总线和IO有什么具体要求然后再去选型、设计、开发。磨刀不误砍柴工这个道理在功能安全领域体现得尤为明显。
返回列表