智能汽车安全新媒体
目前为止,我们涉及到的ECC 有两个意思:
一是椭圆曲线加密算法,是一种加密算法方向,目前多在我们公司信息安全方向提及。
二是一种内存错误检测纠正机制Error Checking and Correction(ECC),是针对MCU的ROM和RAM的纠错保护机制,目前多在我们公司功能安全方向提及。以及调试芯片初期遇到上电异常reset现象提及。
这里简述的是内存错误检测纠正机制Error Checking and Correction(ECC)。
目的
底色:存储器中的数据,会失效。
比如RAM中存着一下数据:
但是宇宙中突然出现高能的γ射线,打在MCU上,0x2000处的一个bit电荷出了点问题,值反转了。就变成了0b 000 0011。
以上的故事是为了让大家感性的认识到,存储器中的数据会出错,和空间射线,静电,EMC干扰,温湿度,芯片工艺,晶圆品质,等等等等都有关系。
我们的代码用了数以兆计的存储器,他们如果状态从0变成了1,也就是打开变成关闭,可以是近光灯打开状态突然变成熄灭状态,也可以是刹车状态变成不刹车状态。
原理简述(为快速懂,不为100%准确)
定义我们常用到的RAM,以4个byte为一个块,每个byte有8个bit,这样就有128*8的矩阵。
蓝色为存储器实际状态,黄色为横纵数据的校验位,奇数为1,偶数为0。假设其中一位错了:因为是二进制只能是0和1之间改变。
(1,2)从0 跳变为了1
行1的奇偶校验和列2的奇偶校验,都会出错
就可以找到(1,2)发生跳变,就可以自动纠正为正确值
总结,单片机如果按照一定的规模定义块,然后每一个块都用类似的方法定义校验位,就可以用很少的校验数据校验,纠正,保护很多数据。
以上的例子可以看到,单比特出错时可以纠正的,但是多比特出错用这个方法就很困难,这里的举例只是为了让大家快速了解,并不是100%准确。但概念是一致的,想深入的小伙伴欢迎深挖。
单片机的运用
有ecc保护的RAM的mcu,一定有一块校验数据区域,只是这些区域我们不可用。
每次我们写操作的时候,比如a=0x01。实际上不仅仅写了数值到&a地址,也会更新这个地址的ECC校验数据。
每次读数据的时候,比如b=a。单片机会自动校验a数据的ECC校验值,如果正确,我们无感;如果错误,就会触发类似单bit纠正,多比特进错误中断,或者reset之类的。
特殊说明
MCU上电,RAM是随机值,ECC校验数据显然也是可读写的,上电也是随机值。
上电后不做任何操作,直接读RAM,大概率是会触发ECC多比特保护,比如reset。
所以MCU上电需要通过将RAM全部写一遍的方式来更新正确的ECC校验位。
每个芯片ECC单比特和多比特出错后的机制是不一样的,需要具体芯片具体分析。
如何测试
单片机有特殊寄存器,可以临时使能某个地址的的值,修改值但是不更新ECC校验位。
可以手动修改值单比特错误或者多比特错误。然后读该变量。就可以触发错误。
内容来源:
https://mp.weixin.qq.com/s/i3Wc3_S81Fv6cGuBkiyQnw
- THE END -
专业社群
精品活动推荐
因文章部分文字及图片涉及到引用,如有侵权,请及时联系17316577586,我们将删除内容以保证您的权益。