ARM单片机应用系统软故障改善设计探讨

引言

随着电子技术在人类生活各领域的广泛应用,对电子设备安全性的要求日益严格。这一趋势推动了对符合特定安全标准的工艺流程的需求。

安全标准的主要目标是防止人员伤亡、保护环境,同时也要考虑到技术流程的损失、关键数据或通讯的丢失,以及电子控制设备故障导致的客户不满等问题。 遵循国内外安全标准来开发流程是一项复杂的工作,它涉及到行业经验、市场需求、保险覆盖以及全球化贸易和商业活动等多个因素。这些安全标准通常由专门的立法和执行机构制定,并通过公认的测试机构进行安全检查和验证。

MCU通常支持两个基础的通用安全标准级别,特别是针对特定汽车产品的ISO26262功能安全标准:

  • IEC 60730 & IEC 60335:针对家用电器的特定标准,这些电器在电力和电子控制下运行,通常被称为“B类”或“C类”标准;
  • IEC 61508:一个更为通用的工业标准,针对汽车行业中称为“SIL”或“ASIL”的安全完整性级别。

对于前者,MCU一般主要提供B类级别的支持。后者则是一个通用的工业“母”标准,衍生出许多针对不同应用领域的子标准,如汽车、健康、铁路、航空等。MCU通常需要支持这一标准下至SIL3级别的应用。 在安全目标应用中,通过正确集成一些预认证的嵌入式自检测软件模块,可以加快软件开发进程。在应用设计阶段,利用内置的硬件特性和恰当的软硬件方法,可以降低危险事件的概率,这得益于对组件故障的有效和早期诊断。一些硬件方法甚至能够提升组件的可靠性。

1 故障的分类基础

安全规范要求我们必须同时考虑系统性故障和随机性故障。 系统性故障是可以预测的,通过在整个电子元件的生命周期内,以及在固件或软件开发过程中严格执行正确的操作流程,可以有效应对。

在MCU设计和制造企业,这些要求被整合进内部的质量文件中,涵盖了从生产、操作流程、设计(包括验证和测试)、物料管理、质量控制、软件开发、文件发布、市场反馈、问题追踪等一系列活动。这些内部规章的遵循情况,会受到国际认可的机构进行的定期审查和审计。

然而,对于限制那些不可预测的随机性故障,我们需要采用特定的软硬件设计技术和方法,这些内容是本文讨论的重点。

从产品的角度来看,故障可以分为单点故障、潜在故障和共同原因故障三种类型。单点故障的影响是直接且立即的,而潜在故障则隐匿不显,可能会与其他故障累积。共同原因故障尤其需要我们特别留心,因为它们有可能导致即便是非常复杂的安全结构也失去作用,尤其是在多个组件同时受损的情况下。对于共同原因故障最为敏感的结构通常是一些共享系统,比如电源线路、时钟分配网络或共用的控制与同步信号等。在极端的环境温度、低功耗模式,或在特定的电磁、辐射或机械应力条件下,这些结构可能会遭受更严重的影响。

2 随机故障处理方法

并不是所有的随机故障都会引发危险事件。如果这些故障没有潜在地与其他错误或故障相关联,它们在给定的安全任务中就被视为“安全”的故障。标准主要要求我们监控那些与既定安全任务直接或间接相关,并且有可能在电子控制的设备上造成危险情况或其后果升级的危险故障。 当更多的危险错误能够及时被发现并得到预防(即被检测到),同时在系统中潜伏未被检测到的危险错误数量被最小化时,故障演变为危险事件的概率就会降低。 故障演变为故障周期的过程可以用图1来展示,图中包括:

  • 故障状态:指的是出现了可能引起系统故障的异常情况;
  • 错误状态:指正确/真实值与测量/观察/计算值之间的差异(这是可能被检测到的必要条件);
  • 故障状态:当系统无法执行其所需的功能,从而无法防止危险事件时,就会发生故障。

图1. 故障在故障周期中的传播过程

 

检测与预防措施需要适应应用程序中可利用的整个过程安全时间(PST),以防止危险故障发生时出现任何危害事件。这一时间间隔必须涵盖所有可能的延迟和系统响应时间,包括传感器和执行器的反应时间。在计算PST时,必须考虑所有延迟,其中也包括诊断测试间隔(DTI),即执行具有特定诊断覆盖范围的测试所需的时间。为了量化,标准机构确认了一种确定的故障率分布模式(见图2),并基于这种分类计算了一些量化因子,具体包括:

  • 安全故障比(SFF):涵盖所有已检测到的危险故障的总故障率与总故障率之比;
  • 诊断覆盖率(DC):已检测到的危险故障率与总危险故障率之比。 SFF是根据不同错误类别的发生率(近似概率)计算得出的,并且与DC密切相关,如以下公式所示:
  • SFF = (∑λS + ∑λDD) / (∑λS + ∑λD) DC = ∑λDD / ∑λD 其中:
  • ∑λS 代表安全故障(无论是否被检测到)的总发生率,等于 ∑λSD + ∑λSU;
  • ∑λD 代表危险故障(无论是否被检测到)的总发生率,即 ∑λDD + ∑λDU;
  • ∑λDD 代表已检测到的危险故障的总发生率,等于 ∑λD 乘以 DC;
  • ∑λDU 代表未被检测到的危险故障的总发生率,即 ∑λD 乘以 (1-DC)。

图2. 故障率分布的示例图

 故障率的计算基于系统在连续或高需求模式下运行时的每小时故障概率(PHF),即安全任务是永久性或常规性要求的;或者基于系统在低需求模式下工作时的按需故障概率(PFD),即安全任务并非系统性要求,例如紧急按钮被按下。这些比率强烈依赖于应用和安全任务的定义,这意味着部分硬件会影响安全性。

随机故障可能导致永久性(硬)或可恢复(软)错误。 随机硬故障会导致组件的永久性物理破坏。系统无法在没有任何损伤补偿的情况下继续正常运行。如果无法补偿,系统必须被置于安全状态,直到修复(错误被钝化)。通常,信号可能会卡住或与其他信号短路。硬故障的标准发生率预计在每设备1-100 FIT的范围内。

注: 1 FIT(每10亿小时的故障次数)是指设备运行10亿小时出现一次故障。 随机软故障是可逆的,通常可以适用某种恢复过程。典型的触发器门、寄存器或SRAM单元可能因电磁干扰(EMI)或单粒子效应(SER)——宇宙射线或其他粒子流(如α粒子或中子粒子,或间歇性)而受到可恢复的影响。这可能导致潜在弱点、噪声、串扰或信号尖峰。极少数情况下,高能粒子也可能导致永久性物理缺陷。宇宙射线(中子通量)取决于地理位置(纬度)和海拔,因此部分可预测。α粒子通量强烈依赖于几个技术参数(例如,模具化合物、发出同位素的焊接材料),因此难以估计或计算(材料污染增加了更多变量)。

辐射水平以每小时每平方厘米(cph/cm2)计数表示,通量范围从0.001到100 cph/cm2,取决于所用材料的污染水平。 技术使用的依赖性很强。随着组件密度的增加和130纳米以下的布局规则,软错误越来越成为问题,特别是在SRAM上(通常微控制器的其他逻辑块不使用如此激进的设计规则,且并非所有这些块中的翻转都会导致错误)。

其他最不利的因素包括较低的供电电压、较低的单元电容、更高的时钟速度、设计复杂性和使用频率。

甚至纬度和海拔也会影响暴露水平(后者更为重要),因此对于航空和宇宙系统专用的电子设备,这可能是一个严重的问题。

另一方面,位线缩短、晶圆减薄、辐射硬化技术和使用辐射防护材料是积极的影响因素。多亏了这些缓解技术,特别是标准纬度系统在当今常用的技术范围内(180-40纳米),缩放趋势几乎保持平坦。 软故障的发生频率远高于硬故障。它们通常以每百万比特的FIT(故障率)来衡量,对于90纳米技术,预计在200到2000 FIT/Mbit的范围内,主要影响触发器门(内部逻辑)和SRAM单元(存储器、寄存器、缓冲区等)。对于具有大容量存储器的设备,这可能成为一个严重的问题。

软故障可以是闩锁型或瞬时型。可以使用仅检测方法来处理它们,该方法可以与补偿集成,即基于检测的更复杂的过程,允许系统对错误具有抵抗力并继续正常运行。通常,这两种方法都基于系统中存在的最低限度的冗余。

闩锁故障可以通过硬件和软件来管理,而瞬时故障需要快速的硬件方法才能被捕获。软件测试不能确保有效全面覆盖这些暂时性和短寿命的错误,因为它们本质上更慢,且受限于执行时间(DTI)。这就是为什么软件测试的诊断覆盖率永远无法达到内置专用硬件测试或补偿结构所提供的覆盖率水平。

3 随机故障控制技术

原则上,随机故障可以通过检测来管理,并可选择性地随后进行补偿。

3.1 检测方法

当系统中存在冗余时,最简单的方法是比较两个独立的计算结果、输入、数据等。如果将功能结果与某些一致性约束进行比较,基于验收测试(例如有效的区间、范围或值组合)的检测方法也很有价值。另一种检测方法是将多个组件的结果相互比较,或与特定计算的预期结果进行比较(例如用于RAM测试的正交测试)。

当仅能应用检测方法时,检测到危险错误后,系统应停止并置于安全状态,或通过重置、回滚或其他特定检查(如更换受影响的组件)等确保性恢复过程来钝化错误。在某些可容忍的情况下,系统可以继续以某种降级模式运行,或提供错误/无效的结果,向其环境表明它已经失败。

3.2 补偿方法

补偿方法通常允许系统继续正常运行。补偿可以通过错误纠正或掩蔽来提供。在纠正模式下,使用冗余信息(例如ECC)从错误结果计算出正确结果。在掩蔽模式下,忽略错误结果,并在可用时使用冗余资源(下一个通道、输入、输出或数据)。可以根据确定组件的不良和正确部分,或损坏和正确数据的确定性投票过程的结果,来确定正确结果。

标准认可硬故障容忍度(HFT - 系统在继续正常运行时可以吸收的最大错误数量)。 除了特定的功能测试外,冗余是基本的诊断原则。大多数检测和补偿技术需要一定程度的冗余才能有效。补偿比检测要求更高,因为不仅要识别差异,还要额外识别正确的状态。为此,必须应用特定的比较和投票机制及其逻辑。

图3. 没有(HFT=0,1oo1)和内置(HFT=1,1oo2d)冗余的系统

 注: 我们使用NooM表示法来描述系统中的输出数量和冗余通道的数量。 这里的1oo2d指的是两个通道具有内置的诊断功能(通过投票系统)共用一个输出。 同样地,2oo2系统可以在使用两个独立执行器代替直接连接到系统A和B输出的单个执行器的情况下使用(例如,两个顺序排列的通风口关闭管道,或两个串联的独立断路器中断一个信号或电力线路)。

4 可应用的冗余策略

通过多种不同的方法和技术可以实现所需的冗余级别。这些技术可以单独通过硬件或软件实现,也可以将两者结合使用,以提高效率和诊断的覆盖范围。在需要进行补偿的情况下,输出的额外比较和特定的投票机制是冗余系统实现中不可或缺的部分。

4.1 结构冗余

结构冗余采用并行的相同(对称)结构同时执行相同的任务。 在系统层面,可以采用双寄存器、存储器、CPU乃至整个内置微控制器。在应用层面,关键的输入或输出可以进行双重或三重配置(包括数字和模拟类型),也可以使用成对的协同微控制器、双重传感器、执行器、通信总线等。

4.2 功能冗余

功能冗余使用并行的不同(非对称)硬件结构或不同的软件方法来执行单一任务。 例如,可以通过特定的内置硬件检查器来监控CPU的行为,或者一个执行主要任务的32位微控制器可以被一个外部的、更简单的8位微控制器所监控,后者检查一些交错的计算结果或保护主系统行为的特定方面,同时比较其输入输出。软件也可以采用简化的算法重新计算并核对某些复杂流程点的结果,如使用固定点的整数计算或与复杂逻辑决策方案的结果进行比较。

4.3 时间冗余

当同一方法由同一硬件或软件在不同时间段多次应用时,就实现了时间冗余。 一个典型的例子是锁步工作的双核心微控制器,每个核心在核心时钟脉冲的不同阶段执行相同的任务。在应用层面,软件可以顺序多次重复相同的计算或逻辑任务,并进行结果比较。

4.4 信息冗余

信息冗余是最常见的冗余形式,通过在数据中添加额外信息并由硬件或软件进行合规性评估来实现(例如,实现奇偶校验位、纠错码ECC、循环冗余校验CRC、数据协议、数据副本等)。

5 应用的策略

5.1 MCU厂商的着眼点

从安全性的视角来看,微控制器是一个需要满足相关标准特定要求的复杂可编程电子元件。 在提供微控制器的安全支持时,厂商会将其视为一个脱离最终应用环境的组件,因为其最终应用和安全任务往往是预先未知的。目标是确保组件的整体可靠性,并实现标准为特定安全完整性水平所设定的诊断覆盖率总目标。

像微控制器这样的复杂元件,可以被视为参与安全任务的多个部分。每个部分通过其自身的诊断覆盖率和权重,为整个组件的安全预算贡献力量。

维持所需的整体安全预算的有效策略是,集中关注微控制器中关键且通用的模块,尤其是那些对安全预算贡献最大、被大多数应用广泛使用的模块。这些模块的任何微小安全改进,由于其重要性和较大的权重,都将为组件的整体安全预算带来显著增益,从而让所有应用受益。

对于软错误,最关键的部分是SRAM,它占据了芯片很大一部分面积,并且几乎所有应用都会用到。因此,本应用说明特别注意了适用于易失性存储器的方法。 根据安全标准,软错误的定义应包含可恢复的能力。例如,我们可以以可编程非易失性存储器(NVM)中的数据保持失败为例。一旦通过内置的ECC或软件检查检测到这类故障,可以在软件驱动的适当恢复过程中,将正确的模式重新写入存储器(如果已知)。

5.2 用户的着眼点

用户在将微控制器纳入应用设计,并明确了安全任务之后,可以更高效地分配安全支持,以覆盖所需的安全案例所涉及的具体部分。

基于对应用需求、设计、控制过程和设备的深入了解,可以采用许多高效的策略。冗余和对系统行为的理解是关键原则,可以单独应用或结合使用。输入和输出可以通过反馈循环进行倍增或检查,以测试逻辑状态、值或预期响应的趋势和时间间隔。

通信数据可以通过冗余信息甚至复制来加固。流程可以监控其正确的时序和流程顺序,以确保控制序列的正确性和完整性。基于来自冗余和独立流程的结果、分析、计算或数据的比较,可以做出正确的决策。

5.3 应对软错误的策略概览

表1概述了适用于MCU微控制器中处理软错误的硬件和软件方法,以及这些方法与IEC 60355标准要求之间的关联。请注意,此概览仅用于提供信息。列表中的大多数项目和方法存在交集,因为它们直接或间接地满足了多样化的诊断需求。

表1. MCU硬件特性支持的应对软错误的适用方法

硬件特性或软件方法目标方法IEC 60355 - 标准 B类引用
ARM Cortex® 核心异常 / 周期性核心自检测影响核心功能的永久故障、不可预测的软件或系统行为或故障捕获处理系统异常中断,测试操作核心寄存器的指令序列IEC 60335 R.1.1– H.2.16.5– H.2.16.6– H.2.19.6
检查应用程序中断系统预期和意外的中断检查检查缺失或过于频繁的应用程序中断IEC 60335 R.1.7.2– H.2.18.13
时钟测量和检查检测错误或缺失的频率,特定XTAL检查时钟安全系统CSS控制,独立看门狗,内部时钟交叉参考测量IEC 60335 R.1.3– H.2.18.10.1– H.2.18.10.4
Flash存储器/不可变存储器上的ECC / 自我测试(由内置CRC模块支持的自测试)影响系统Flash存储器单元和地址解码器的永久故障ECC或CRC签名计算在内存块内定期执行DTIIEC 60335 R.1.4.1– H.2.19.3.1– H.2.19.3.2– H.2.19.8.2
SRAM / 可变存储器上的奇偶校验位 / 自我测试影响系统SRAM存储器单元和地址解码器的永久故障单比特每8位字节在字节读取或周期性Walkpath测试中检查IEC 60335 R.1.4.2, 1.4.3– H.2.19.6– H.2.19.8.2
控制流监控程序计数器失控或挂起运行时控制应用软件流程和相关时序,处理看门狗超时IEC 60335 R.1.6.3– H.2.18.10.2– H.2.18.10.4– H.2.18.18
独立 & 窗口看门狗永久性和瞬态故障对用作数字输入和输出的GPIO线路应用程序设计IEC 60335 R.1.7– H.2.18.13
双重GPIO数字输入或输出,数字输出的回环方案影响ADC和多路复用器的永久故障应用程序设计IEC 60335 R.1.2– H.2.16.5– H.2.18.10.4
通信加固处理协议错误协议化、双通道、CRC校验、重复消息IEC 60335 R.1.6–H.2.19.8.1–H.2.19.4.1–H.2.18.2.2–H.2.18.14

安全关键数据的信息冗余

栈加固技术

数据传输中的错误

MCU内部传输的冗余,易失性存储器保持安全关键信息

安全变量的验证

通过参数的合理性

IEC 60335 R.1.5–H.2.19.8.2

电源监控(POR, PDR, BOR)

内部温度监测

选项字保护

SRAM保护

配置锁定 / 定期读取回配置寄存器(包括未使用的外设)

确保系统所有部分在安全条件下正确运行中断调用紧急关机任务或保持设备在复位状态,验证所有安全关键系统配置

5.4 应用于SRAM的特定硬件方法

一种高效的方法是采用双RAM结构和比较器。RAM被分为两个区块,所有数据都被镜像复制。每次读取操作之前,硬件都会先比较两个区域的值。另一种效率略低的方法是使用EDC(错误检测码)或ECC(错误更正码)保护数据。通常,应用的是汉明码,其距离大于3(每个32位字必须添加一定数量的校验位),至少实现SEC-DED(单错误更正和双错误检测)。

一些MCU微控制器使用奇偶校验位(每个8位字一个校验位),应用于整个或部分RAM,这足以识别受保护字的单比特或奇数比特错误。由于并非所有多位错误都被覆盖,当应用分布式设计,将比特分散收集到单个字中时(设计多路复用因子——两个逻辑相邻比特所在的两列的物理距离应保持大于4),该方法效率较高。在这种情况下,一次粒子流或电磁干扰攻击期间同时发生多位错误的概率相对较低。累积比特错误是另一种情况,即通过两次连续的攻击在不同时间出现在同一个字中,可能会发生两次单比特错误。因此,建议将硬件奇偶校验与定期清除SRAM中不常使用的区域相结合,特别是由软件完成的清除,可以通过及时检测单比特错误来防止这种累积错误,图4展示了一个例子。

图4. RAM清洗算法

 此外,这种清洗方法不仅能够预防多位错误,还能够提前发现SRAM中的潜在错误(以及可能随之而来的数据差异),例如,在执行关键的安全操作之前。

软件可以仅执行奇偶校验检测,或者根据定义的条件编译参数,添加补偿方法。在补偿的情况下,算法会在RAM工作区清洗过程中备份工作数据。这种方法适用于工作区数据不频繁变动的情况,因此不适用于专门用于栈的区域。

当RAM的工作部分检测到奇偶校验错误时,可以从其备份副本中恢复正确数据。 奇偶校验错误检测会触发硬故障中断。处理这一中断有些复杂,因为在从中断处理程序返回之前,必须通过特定的包装器恢复正确的返回地址,以及被测试地址的指针,否则测试流程会被中断,无法继续正常执行。 该包装器仅为应用LDMIA或LDR指令的情况以及CPU执行的内存访问(DMA执行的访问是另一种情况)进行了简化。

用户可以通过设置适当的参数(间隔),在调用清洗函数时将待检查区域分割成多个部分,并在独立的步骤中确保对该区域的控制。在这种情况下进行补偿时,用户需要注意备份区域的相应位置,因为该过程还会在清洗过程中自动刷新备份内容。 为了防止清洗过程失败,待检查区域在上电后必须初始化为任意内容。初始化工作由软件通过调用RAM_奇偶校验初始化函数完成:该函数会覆盖整个RAM的内容,包括栈。最好在系统启动时调用此函数。如果在使用清洗程序之前没有对RAM区域进行初始化,一些单元可能会模拟硬件奇偶校验错误事件,因为整个RAM的内容是一致的。

5.5 针对SRAM的特定软件方法

奇偶校验功能并不适用于所有MCU微控制器,也可能不适用于所有可用的存储区域。另外,除了检验存储内容外,相关标准还要求对数据路径的正确性进行验证。

鉴于大多数MCU设备并未在总线上实施特定的硬件检测,建议在应用初始化阶段或定期进行路径测试(Walkpath test)。这项测试应在合理的时间内完成,以尽量减少对性能的影响。虽然亚伯拉罕(Abraham)或加尔帕特(Galpat)测试能提供更高的诊断覆盖率,但它们需要更多的步骤,因此会带来更大的性能开销和更长的执行周期。

众多的MCU固件采用了破坏性和非破坏性的路径测试。破坏性测试在系统启动时使用,用于对整个RAM进行测试;而非破坏性测试则在运行时使用,仅针对存储关键数据的区域,并且是逐步进行的,测试内存单元的小的重叠块,并收集连续的地址。无论如何,路径测试确保了那些不支持奇偶校验功能的SRAM区域也能得到覆盖。

此外,当关键数据的部分以互补值的形式被双重存储时(每个关键值可以存储在一对非相邻的内存地址变量中,以保持值及其补数),可以结合使用冗余原则。软件必须确保关键数据部分的有效备份副本得到维护。在该区域的每次读写操作中,必须使用特定的程序来执行正确的数据镜像(对于写入操作)和一致性检查(对于读取操作)。如果在运行时没有执行路径测试,可以定期在后台进行一些常规的“清洗”操作(即区域内容的比较),以便提前发现可能影响关键数据的潜在错误。 同样,也可以应用栈加固技术,比如在传递所有关键参数时采用冗余方式,并进行比较,或者在调用子程序的入口处检查它们的合理性。还可以定期检查栈区域的边界,确保存储在那里的特定模式没有被破坏,以保证栈指针不会超出其指定的区域。

6 总结

软错误对于具有大容量存储器的微控制器来说可能是致命的,而奇偶校验或CRC校验是用于检测这些错误的有效硬件技术(尽管它们不能纠正错误)。对于关键数据的纠错,最有效的硬件方法是使用纠错码(ECC)。要深入了解这些技术以及其他间接支持特性,硬件和软件开发人员应仔细阅读所使用产品的具体参考手册和安全指南。

除了这些检测和纠正机制,设计人员还应该从设计层面采取了缓解措施,以确保在技术不断进步的同时,保护水平得到提高。 可以采用多种额外的硬件和软件方法来应对最终应用中的软错误。这些方法主要基于一定程度的冗余,它们的复杂性取决于系统所要求的安全完整性水平,以及是否需要同时进行错误检测和纠正。 有些方法可以用于检测和纠正两种情况,然而,只有深入了解应用场景和安全任务的具体要求,才能确定最有效的诊断措施。

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MUKAMO

你的鼓励是我们创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值