原创 循环冗余检验应用

2012-3-7 22:16 1036 10 11 分类: 模拟

    在工业环境中,电子系统通常工作在极端的温度条件下,或处于电子噪声环境,或是其它恶劣条件,而系统在这种条件下能否正常工作至关重要。举例来说,如果发送给控制机器臂位置的DAC的数据遭到破坏,机器臂就会按非预期的方向移动,这不仅危险,而且代价巨大。试想一下,机器臂如果砸到生产线上的新车,或者更糟,砸到生产工人,后果会怎样?
    有几种方法可以确保收到正确数据后才执行动作。最简单的方式就是控制器回读所发送的数据。如果接收的数据与发送的数据不匹配,则说明其中一者已受到破坏,必须发送新数据并进行验证。这种方法的确可靠,但产生的开销也很大,每段数据都必须经过验证,传输的数据量要翻一倍。
    另一种替代方法是循环冗余校验(CRC,Cyclic Redundancy Check),即随每个数据包发送一个校验和(checksum),接收器就会指示是否存在问题,所以控制器无需验证接收。校验和一般通过向数据应用一个多项式方程式来生成。应用于一个24位字时,CRC-8可产生一个8位校验和。将校验和与数据组合在一起,全部32位都发送到能够分析该组合的器件,并指示是否出错——这种方法虽然不是无可挑剔解决方案,但却比读写方法更加高效。

                     图1. 采用和不采用分组差错校验的SPI写入

CRC-8算法采用多项式C(x) = x8 + x2 + x1 + 1。x = 2时,此式等于二进制值100000111。要生成校验和,需将24位数据左移8位,产生一个后8位为逻辑0的32位数。对齐CRC多项式,使其MSB与该32位数据最左侧的逻辑1对齐。对该数据施加一个异或(XOR)函数,以产生一个新(更短)的数字。(数字匹配得到逻辑0,不匹配得到逻辑1。)再次对齐CRC多项式,使其MSB与第一个结果最左侧的逻辑1对齐,重复上述步骤。最后,原始数据将减少至小于CRC多项式的值。此值即是8位校验和。图2演示了推演校验和的方法。

                    图2. 生成24位数((0x654321))的校验和

    图2中的示例采用(十六进制)值0x654321作为24位数据字。对该数据应用CRC-8多项式可生成校验和0x86。数据和校验和发送时,只有两段数据都正确到达,该数据才会被接收。此方法提高了数据传输的可靠性,并可确保遭破坏的数据几乎永远不会被接收。

 

参考自:ADI模拟期刊20120220:《循环冗余校验确保正确的数据通信》  作者:Ken Kavanagh

crc

文章评论1条评论)

登录后参与讨论

用户403664 2012-3-13 16:02

好文章,谢谢分享!
相关推荐阅读
asus119_412419641 2013-07-17 23:41
Allegro使用小结
1、解决Allegro在大鼠标模式下的拖影问题(尤其在Win7系统下) 大鼠标去掉拖影的设置方法:在env文件里面一句set infinite_cursor_bug_nt 注意:在pcbe...
asus119_412419641 2013-07-15 23:37
FPGA代码设计规范整理
  1、设计中的FIFO、状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉。 a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,...
asus119_412419641 2013-07-15 22:03
FPGA代码设计规范整理
  1、设计中的FIFO、状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉。 a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,...
asus119_412419641 2013-07-15 21:58
FPGA代码设计规范整理
  1、设计中的FIFO、状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉。 a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,...
asus119_412419641 2013-06-30 23:28
Cadence Allegro导网表的错误问题解决
  在Allegro导入网表的时候,有时候会出现这样一个错误问题,如下:   ------ Oversights/Warnings/Errors ------   #1   E...
asus119_412419641 2013-04-24 17:22
[博客大赛]关于OrCAD Capture CIS导网表出现问题的解决方法
在Capture CIS中完成原理图编辑修改后,导出网表时,出现了以下错误:   #192 ERROR(ORCAP-36004): Conflicting values of part n...
我要评论
1
10
关闭 站长推荐上一条 /2 下一条