汽车安全机-ECC

之前咱们介绍过汽车安全ECC-针对瑞萨的ECC的模块介绍,接下来我对小伙伴门介绍下下面的安全构架。

首先我们了解一些相关的知识:内存的失效模式

主要介绍为

内容损坏,一般通过ECC来诊断。ECC可以由硬件实现,可以由软件实现。

非法读写,一般通过内存管理机制来实现,但需要支持MPU或MMU的硬件来配合实现。

对于ECC下面做介绍,就是要够纠正单bit故障,探测多bit故障。

双冗余是没法纠正故障的,要达到纠正故障的效果得多路表决,ECC这个机制为探测内存故障付出了三倍冗余的代价吗?但一般存储或通信的冗余数据比原始数据要小啊,它是怎么以较小的数据做到纠正错误的呢? 

ECC前任

奇偶校验

下面我们就一步步来走进神奇的ECC。

对于内存,当操作时序和电路稳定性正常时,一般不会造成整个存储单元不能读取或者全部出错,而是整个存储单元只有一个或几个比特出错,比如常见的由封装衰变的α粒子或者中子等引起的软错误影响范围局限于几个比特。

在ECC技术出现之前,内存中应用最多的就是“奇偶校验”不带“奇偶校验”的内存中的每个字节(byte)只有8位,若它的某一位存储出了错误,就会使其中存储的相应数据发生改变而导致应用程序发生错误。而带有“奇偶校验”的内存在每一字节(8位)外又额外增加了一位用来进行错误检测,用它使这组代码中“1”的个数为奇数(奇校验)或偶数(偶校验)。

注:Bit0~Bit7为原始数据位,CP0为校验位

存在明显的不足—无法修正错误:只知道8比特中有部分比特发生错误,无法判断哪个比特。

单比特修正

要进行单比特修正,首先要解决两个问题:

到底是原始数据故障还是校验位故障

如果是原始数据位故障,到底是哪一位发生故障。

要定位8bit中哪一个bit发生了故障,需要多少bit的校验位呢?

单bit错误有8+1种情况(无单bit错误),因而至少需要log29=4个校验位来进行定位,可以设计如下:

注:图中CP0为对CP0为Bit0, Bit2, Bit4, Bit6的奇偶校验结果,其他CPx含义以此类推

 图2:定位故障的奇偶校验 

当Bit2翻转时,CP0、CP1、CP3发生变化,但Bit1发生翻转时,CP3发生变化。这样,通过CPx的不同组合,就可以定位哪一位发生了故障。

多路表决

但这样没解决问题1,例如,根据原始数据计算出的CP3/CP2和自带的CP3/CP2不一致时,无法确认是原始数据Bit1/Bit5故障还是校验数据故障。此时,我们来个“多路表决”,设计如下:

 图3:定位故障+区分原始数据/校验数据故障的奇偶校验 

当bit5发生翻转时,将带来CP1, CP2, CP5翻转。此时,就解决了两个问题:

区分原始数据故障还是校验数据故障:原始数据故障,将导致3个CPx发生变化;校验数据故障,单个CPx发生变化;

定位原始数据哪个bit发生故障:通过CPx的特定组合实现。将原始数据区从1行扩展到多行,针对单bit故障,不增加校验位,同样可定位故障发生列。

以一个2kb的带ECC的EEPROM为例,Page分为Main和Spare区,如图4所示。Main是用来保存数据的。Spare区一般用来标记坏块和保存对Main区数据的ECC校验码。

 带ECC的EEPROM数据块示例 

ECC校验

我们可以用上面的思路来进行校验位的设计。在具体的诊断实践中,一般是针对256 字节数据(256*8的矩阵)做ECC校验,生成6个比特的列校验数据,16个 (即) 比特的行校验数据。其他两位用1补足,共3字节的校验数据,存在于OOB (Out Of Band) 区内,如图5所示。

针对256字节数据的OOB结构

其中CP0~CP5为6个比特位,表示Column Parity(列极性)。每一个列极性为4列共1024位的异或结果,如CP0为第0、2、4、6列的异或结果。

其中RP0~RP15为16个比特位,表示Row Parity(行极性)。每一个行极性为128行共1024位的异或结果,如RP0位第0、2、4、6、…、252、254字节的异或结果。

故障定位分两步:列定位和行定位,以简单的列定位为例,将256行简化为2行,假设待校验的数据为2个字节,0x45(二进制为0100 0101)和0x38(二进制为0011 1000),其列校验码如下表5-10所示:

两字节列校验码示例 

从表中可以计算出CP5~CP0的值,列在表2的第1行(原始数据)。

假设现在有一个数据位发生变化,0x38变为0x3A,也就是Byte1的Bit1由0变成了1,计算得到新的CP5~CP0值放在表5-11第2行(变化后数据)。

新旧校验码求异或的结果放在表5-11第3行。可见,当Bit1发生变化时,将引起相关联的列校验值中的CP1、CP2、CP4发生变化,而与之无关的CP0、CP3、CP5 无变化。

两字节单Bit翻转列校验结果 

ECC执行时,将从OOB区中读出的原ECC校验和新ECC校验和按位异或,有以下几种结果:

①.全为0,则表示不存在错(或是出现了 ECC无法检测的错误);

②.1个比特位为1,表示 OOB区出错;

③.11个比特位为1,表示存在一个比特错误,且可纠正;

④.其他情况均表示出现了无法纠正的错误。

总结

自此,我们归纳ECC能够用较小的校验场实现纠错的原因:

校验场更小是因为对1024比特做了异或处理,仅用1比特进行奇偶校验;

能够确保是数据场位翻转而非校验场位翻转,是因为校验场数据具有典型特征,可以首先对校验场是否发生翻转做判断

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值