0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何对长期运行的嵌入式设备采取软错误保护呢?

麦克泰技术 来源:麦克泰技术 2024-03-25 13:57 次阅读

所谓软错误,指的是由物理效应引起的数据偏差,受影响的内存单元并没有被破坏,系统重启后此错误会被修复,我们将这种软错误的发生称为单粒子翻转(SEU)。

应用中的软错误?

软错误在应用中以特定的频率存在,这种软件错误率(SER)取决于很多环境和技术参数。

一个长期运行的工业设备,假设系统中集成了一个2MB SRAM,已连续运行20年,以每位小时1e-12个错误的SER,我们可以计算:

1e-12errors/bit*h*2Mbyte*8bit/byte*175.200h = 2.9 errors

我们意识到,对于长期运行的安全关键系统来说,这不仅仅是一个物理理论,我们很有可能会因为一个软错误而失去安全功能!

这是不可接受的。我们必须避免或至少能检测长期运行的工业设备中的软错误。

越来越多的软错误

为理解、检测或纠正硬件中的这些软错误,许多研究正在进行。根据Tezzaron的论文,组件对错误率的敏感性将随着以下情况上升:

· 复杂性的增加将提升错误率

· 高密度(高容量)芯片更容易出错

· 低压设备更容易出错

· 更高的速度(较低的延迟)导致更高的错误率

· 较低的电池容量(存储电荷较少)将导致较高的错误率

这些情况匹配嵌入式市场的当前发展趋势,我们应该让系统为越来越多的软错误做好准备。

硬件措施

在航空航天和卫星系统使用的一些辐射加固硬件组件具有高度的SEU免疫力,但如果在工业应用中使用这些组件,系统成本将超过可接受的限度。

可以使用为解决IT服务器内存错误设计的chipkill技术,该技术基于冗余机制。

硬件供应商也意识到了这一挑战。在过去的几年里,已经发布了几款带有软错误缓解技术的微控制器

ECC内存保护

ECC内存设备使用纠错码来存储数据,这些编码被归类为SEC-DED。该方法基于汉明编码,可以发现2位错误,纠正1位错误。

当使用ECC保护内存时,软件在启动期间只需要少量操作。系统上电后,我们必须将内存初始化为已知状态。否则,会收到ECC错误的通知,而ECC错误实际上是内存单元的随机内容。之后,硬件在常规操作中透明地修复软错误。大多数ECC内存提供修复通知,我们用它来监控内存。

有了这种优秀的硬件支持,我们已经为软错误做好了充分的准备。

软件措施

基于系统或硬件工程原因,我们需为没有硬件机制的系统准备软件,例如:使用的控制器不支持ECC内存,或者我们需要没有ECC的外部内存。

我们建议在项目中针对软错误敏感执行数据存储分析,这种分析有助于决定对数据存储使用哪种措施来避免、恢复或检测软错误,分析内容包含:

· 使用的内存数量(使用的内存越多,软错误概率越高)

· 数据寿命(寿命越长,出现软错误的概率越高)

· 软错误导致的最坏情况系统行为(影响越严重,我们需要的错误检出率越高)

在这种分析中,未使用的内存单元中的软错误是可以接受的。通过这种方法,我们保持了尽可能高的性能和可用性,同时保护系统免受软错误的影响。存储数据可以分类为:

· 常量数据(如操作码、配置表)

· 枚举数据(如系统状态和模式)

· 动态数据(如过程值)

· 临时数据(如局部变量,不断刷新内存)

归类为临时数据的变量是非关键的,可以在没有进一步保护措施的情况下保持不变。因此,从独立数据源周期性更新数据是一个很好的策略。

9aded032-e800-11ee-a297-92fbcf53809c.png

常量数据保护

为了保护内存中的常量数据(如应用操作码或配置表),我们计算数据的哈希值,并使用存储的预期值检查结果。

保护的强度取决于哈希值中使用的比特位数。最常用的是CRC32算法。哈希碰撞是两个不同的常量数据内存映像可能产生相同的哈希值的效应。杰夫·普雷辛提供了一份关于碰撞概率的概述。随着常量数据内存中字节数的增加,CRC32碰撞的概率也会增加。对于实际项目,这导致了诸如“CRC32最多可以保护4096字节”这样的限制(字节的数量取决于安全完整性级别)。

因此,更好的选择是支持32位到1024位可变长度的FVN-Hash值,这是一种快速高效的计算哈希值的方法,下面的伪代码显示了算法:

9ae975be-e800-11ee-a297-92fbcf53809c.png

offset_basis和FNV_prime为固定值,取决于hash值的位宽度。

枚举数据保护

我们在存储枚举数据时避免使用“1、2、3,…”这样的值,因为一次位翻转可以将有效数据更改为其它的有效值,我们没有办法检测到这个位翻转。

我们可以选择特定的值,确保一次位翻转的结果是无效值。如果需要至少两次位翻转才能将一个有效值更改为另一个有效值,我们将选择称为:“汉明距离(HD)为2的值。”

HD =不同位的数量

实际项目中,我们选择汉明距离为4的值。参见以下十六进制字节值:

9afca148-e800-11ee-a297-92fbcf53809c.png

理论上,我们可以通过搜索具有最小汉明距离的值来纠正单个位翻转。这个值很可能是正确的值。

以0x3c为例,假设位1翻转-我们得到0x3e。首先,这是一个无效值。其次,我们可以检查该值到所有有效数据的汉明距离(在下面的括号中):

9b0d21d0-e800-11ee-a297-92fbcf53809c.png

如果只有1位翻转得到0x3e,最低HD的值是0x3c为正确的值。事实上,我们不知道有多少比特被翻转了。这是被分类很可能正确的原因。

我们对安全关键软件中最有可能正确(most likely)的值不满意。出于这个原因,我们通常会提出一个安全异常,即关闭或重启设备。

动态数据保护

对于动态数据,任何值都是有效值。我们必须添加冗余来检测值的变化(如位翻转)。一个简单的方法是将变量镜像存储在不同的内存区域中。实现伪代码如下:

9b17fd76-e800-11ee-a297-92fbcf53809c.png

我们现在可以在任何时候用引入的冗余检查动态变化的变量:

9b22b31a-e800-11ee-a297-92fbcf53809c.png

注意:当使用中断、多线程环境、DMA传输、数据缓存或多处理器设备时,这段伪代码会变得复杂(并需要运行时间)。

总结

我们讨论了对长期运行的嵌入式设备采取软错误保护措施的必要性。

广泛使用的硬件和软件措施概述包括:

· 内存设备的ECC保护

· 常量数据内存的哈希值

· 枚举值的汉明距离

· 动态数据内存的冗余

所有措施可以分类到哈希值、汉明码和冗余三个大类,这是自检测算法和系统可信性监测中使用的三个主要测量方法。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7544

    浏览量

    151325
  • 多处理器
    +关注

    关注

    0

    文章

    22

    浏览量

    8920
  • 嵌入式设备
    +关注

    关注

    0

    文章

    110

    浏览量

    16955
  • 十六进制
    +关注

    关注

    2

    文章

    32

    浏览量

    37731
  • CRC32
    +关注

    关注

    0

    文章

    8

    浏览量

    8227

原文标题:如何对长期运行的嵌入式设备采取软错误保护

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式编程错误处理机制设计

    本文主要总结嵌入式系统C语言编程中,主要的错误处理方式。文中涉及的代码运行环境如下。
    发表于 04-28 09:59 764次阅读
    <b class='flag-5'>嵌入式</b>编程<b class='flag-5'>错误</b>处理机制设计

    嵌入式系统中的外设是什么?

    的外围设备的功能,真正达到以代硬的目的。外设的出现给产品的开发带来了极大的灵活性,不但使系统体积变得更小,而且使系统的升级换代变得更为方便,从而真正实现SOC。本文介绍外设的设计
    发表于 09-17 06:59

    如何构造运行良好的嵌入式设备的驱动程序?

    嵌入式系统需要支持的外部设备种类繁多,如何构造运行良好的嵌入式设备的驱动程序,对嵌入式操作系统的
    发表于 09-25 07:44

    为什么将编译好的程序在嵌入式设备运行的时候报错

    目录问题叙述解决方法chmod用法详解语法问题叙述在虚拟机上使用对应交叉编译工具链编译过的程序按道理来说应该可以在嵌入式Ubuntu设备运行了,但是我在将编译好的程序在嵌入式
    发表于 12-21 06:44

    嵌入式PLC技术具有哪些优点

    嵌入式PLC技术是什么?嵌入式PLC技术具有哪些优点
    发表于 12-24 07:48

    什么是嵌入式嵌入式设备有哪些

    什么是嵌入式嵌入式设备有哪些
    发表于 12-24 07:47

    什么是嵌入式Linux?

    Linux到底是什么嵌入式linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。简单来说,是除了电脑之外可以
    发表于 10-11 13:47

    如何在嵌入式设备运行高性能Java

    如何在嵌入式设备运行高性能Java
    发表于 03-28 09:43 16次下载

    嵌入式PLC系统的研究和实现

    介绍嵌入式PLC 硬件设计平台和软件设计平台,利用梯形图、硬件接口映射及模块化设计技术开发面向工业控制嵌入式PLC系统。PLC 系统由
    发表于 04-25 10:22 37次下载

    基于ARM嵌入式系统PLC的研究

    嵌入式PLC是嵌入式系统与PLC相结合的产物,PLc作为一个嵌入式应用程序
    发表于 09-01 11:53 18次下载
    基于ARM<b class='flag-5'>嵌入式</b>系统<b class='flag-5'>软</b>PLC的研究

    嵌入式PLC核的通用保护平台设计

    提出了基于嵌入式PLC核的通用配网保护平台设计方案。针对传统保护软件编程灵活性差,现场可配置能力弱的问题,在分析嵌入式PLC
    发表于 01-17 16:03 0次下载
    <b class='flag-5'>嵌入式</b>PLC<b class='flag-5'>软</b>核的通用<b class='flag-5'>保护</b>平台设计

    如何实现嵌入式PLC系统的研究与应用

    嵌入式PLC硬件设计平台和软件设计平台,利用梯形图,硬件接口映射及模块化设计技术开发面向工业控制嵌入式PLC系统。PLC系统由开发系统
    发表于 06-16 17:40 18次下载
    如何实现<b class='flag-5'>嵌入式</b><b class='flag-5'>软</b>PLC系统的研究与应用

    基于CoDeSys的嵌入式PLC系统设计与实现

    基于CoDeSys的嵌入式PLC系统设计与实现(嵌入式开发发展前景)-该文档为基于CoDeSys的嵌入式PLC系统设计与实现总结文档,是
    发表于 07-30 16:58 44次下载
    基于CoDeSys的<b class='flag-5'>嵌入式</b><b class='flag-5'>软</b>PLC系统设计与实现

    嵌入式PLC系统的研究和实现

    嵌入式PLC系统的研究和实现(嵌入式开发武汉)-该文档为嵌入式PLC系统的研究和实现总结文档,是一份很不错的参考资料,具有较高参考价值,
    发表于 08-04 10:59 4次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软</b>PLC系统的研究和实现

    嵌入式linux设备中应用运行日志的实现

    嵌入式linux设备中应用运行日志的实现      最近在做一个项目时,需要记录设备运行中情况,以方便对故障进行跟踪定位,完善.所以决定采用
    发表于 11-01 17:22 8次下载
    <b class='flag-5'>嵌入式</b>linux<b class='flag-5'>设备</b>中应用<b class='flag-5'>运行</b>日志的实现