精品译文 | 关于ECC错误纠正码,那些常见的具体问题

发布于 2023-10-9 10:53
浏览
0收藏

精品译文 | 关于ECC错误纠正码,那些常见的具体问题 -汽车开发者社区

精品译文 | 关于ECC错误纠正码,那些常见的具体问题 -汽车开发者社区

译文  关于ECC错误纠正码,那些常见的具体问题


原文 : ECC (Error Correction Codes)


译文审核:卢萍


➡本文主要内容分为5个部分(约2300字,12分钟阅读)


错误纠正码是一种检测和纠正数字数据错误的方法,广泛应用于检测和校正存储器中的数据来保证数据传输的一致性。


在这篇文章中,我们回答了一些安全初学者经常问到的关于ECC的具体问题:

从功能安全的角度来看,ECC的目的是什么?

ECC是强制性的安全机制吗?

ECC是一个不受干扰或独立的机制?

在使用ECC功能硬件(存储器和通信总线)的系统中,必须考虑哪些方面?

精品译文 | 关于ECC错误纠正码,那些常见的具体问题 -汽车开发者社区

从功能安全角度来说,使用ECC的目的是什么?

ECC的广泛目的是使存储器和传输更加稳定和可靠,这就是为什么ECC不仅应用于汽车、航空、国防等安全关键系统,而且还应用于在与安全无关的“最大可用性”系统中,如文件服务器和关键数据库。


ECC使用汉明码来检测硬错误和软错误。什么是硬错误和软错误?硬错误是永久性错误,由温度或功率变化等物理因素以及硬件上的应力引起的,它们会导致硬件电路的永久性故障。软错误是瞬态的,由电磁干扰甚至宇宙射线引起。由于硬错误是永久性的,ECC无法纠正它们,只能检测到。然而,即使在应用程序不知情的情况下,软错误也可以被HW检测和纠正。最常见的ECC实现是基于汉明码“SECDED”(Single Error Correct Double Error Dection),可以检测1位和2位错误,并纠正1位错误。一些微控制器还提供DECTED双(位)错误校正和三(位)错误检测)。这里对SECDEC的工作原理有个很好的解释。


从功能安全的角度来看,ECC支持系统满足该系统ASIL级别所需的定量单点故障指标。ECC为SECDEC方案的存储器提供高达90%的诊断覆盖率,为DECTED(double-error correction / triple-error detection)方案提供高达99%的诊断覆盖率。

ECC是安全关键系统的强制性要求吗?

ISO26262从未强制要求任何特定的安全机制。没有硬件ECC的系统仍然可以满足特定ASIL级别所需的硬件目标。话虽如此,我们个人的意见是,ECC必须为所有可用的内存启用,无论是否需要量化指标,因为这是确保可靠性的基本方法。尽管与部署复杂的软件安全机制相比,启用ECC可能是处理单位和双位失效的一种更简单的方法,但易用性不应该是决定任何安全机制的主要动机。

ECC选举投诉委员会是一个不受干扰或独立的机制?

是的,ECC可以作为一种安全机制来实现不受干扰(FFI)或独立性。


让我们假设两个场景:

1. 一个内存区域变成不正常(由于位翻转),该失效级联到一个安全组件,并导致违反安全目标。这是一个干扰的案例。


2.这个“坏”内存区域由多个SW组件同时使用,因此会同时导致多个失效。如果这些失效是在分解的路径,那么它会导致没有实现独立性。


在这两种情况下,ECC将有助于纠正位翻转并恢复内存区域中的正确值。

在使用ECC硬件(存储器和通信总线)的安全关键系统中,必须考虑哪些方面?

最明显的第一步是完全利用所用硬件提供的ECC功能,通过启用硬件支持的任何程度的ECC校正和检测。这意味着在微控制器支持的所有存储器(闪存、SRAM、DRAM、高速缓存和其他外围存储器缓冲区和寄存器)和接口中启用ECC。当然,如果这些内存和接口中的任何一个与安全目标无关,那么(从功能安全的角度来看)为它们启用ECC不是强制性的。


在某些情况下,启用ECC可能会导致减少可用内存容量或降低内存性能。在这种情况下,必须分析安全性/可靠性与性能/资源之间的权衡,以做出决定。


系统应采取适当的预防措施,以避免ECC错误。一些常用的预防措施包括:


总是在使用前初始化内存——通常在上电复位时内存内容是随机的,包括 ECC 位。


周期性地刷新缓存——刷新缓存触发指令或数据的重新加载,从而清除累积的失败比特。


在发生2位ECC错误的情况下执行系统重置——重置系统会触发内存内容的重新初始化,从而清除位错误。虽然这看起来更像是一种响应措施,但它是预防性的,因为它可以防止故障位的积累到可能无法检测到的程度(例如,3位错误)。因此,它也减少了更多这样的ECC错误的发生。


强烈建议与微控制器/处理器/存储器供应商讨论,以了解必须实施什么样的预防措施。


必须按照ASIL标准开发支持ECC的SW组件。此外,如果微控制器提供了一个功能来通知其ECC操作,那么保持一个计算由微控制器执行多少ECC校正和检测是一个好主意。这将是一个有用的诊断,以评估内存的质量,并在软件中采取必要的行动如抛出诊断故障代码,如果有太多的错误更正或检测。这种DTC可用于在运行过程中快速检测出有故障的HW。


通常,微控制器提供寄存器来测试ECC特性,以检测安全机制中的潜在故障。人们可以把它看作是一个“假的”故障注入测试。可以设置一个寄存器来引入位翻转,如果检测到并纠正了“位翻转”,则可以通过读取ECC状态寄存器来验证。如果由供应商提供,则应利用该特性。


如果系统在没有ECC的情况下运行,并且在程序的中途如果ECC被启用,那么建议重复EMI/EMC测试。为什么需要这样做?在EMI/EMC测试中,模拟磁场、电磁浪涌、ESD等电磁现象,这些情况可能会导致内存中的位翻转。人们可以把它看作是ECC机制的真正的“故障注入测试”。理想情况下,如果我们有一块SW,可用来计数ECC纠正和检测的数量,这可以给我们一个提示,在测试期间是否纠正或检测到位翻转。但另一面是,这不是一个确定的测试,因为我们不知道在测试过程中引入了多少位翻转(或者即使没有导致位翻转),所以我们不去任何地方计算ECC校正和检测的数量。然而,人们可以把它看作是一种措施,它是在审查ECC配置/代码和做潜在故障测试之上的。

精品译文 | 关于ECC错误纠正码,那些常见的具体问题 -汽车开发者社区

结论

当我们思考ECC的未来是什么,它会留下来还是会被其他技术取代时,我们开始思考汽车行业的发展方向,以及我们相对较新的ECU将使用什么类型的内存。趋势显然是向带宽和计算密集型系统发展。一方面是ADAS、DMS和自动驾驶车辆,另一方面是用于HUD和域控制器上的复杂显示器。这样的系统使用大量的DRAM作为一种使能技术来提供所需的带宽和容量。随着我们在DDR存储器(DDR4、LPDDR4、DDR5、LPDDR5)中不断进步ECC仍将继续保持作为关键内存RAS(可靠性、可用性和可维护性)特性。因此,几乎可以肯定的是,ECC将继续存在。


文章转载自公众号:Sasetech

分类
收藏
回复
举报
回复
相关推荐