循环冗余校验在数据通信中的应用

时间:2011-08-25

  在工业环境中,电子系统通常工作在极端的温度条件下,或处 于电子噪声环境,或是其它恶劣条件,而系统在这种条件下能 否正常工作至关重要。举例来说,如果发送给控制机器臂位置 的DAC 的数据遭到破坏,机器臂就会按非预期的方向移动, 这不仅危险,而且代价巨大。试想一下,机器臂如果砸到生产 线上的新车,或者更糟,砸到生产工人,后果会怎样?

  有几种方法可以确保收到正确数据后才执行动作。简单的方 式就是控制器回读所发送的数据。如果接收的数据与发送的数 据不匹配,则说明其中一者已受到破坏,必须发送新数据并进 行验证。这种方法的确可靠,但产生的开销也很大,每段数据 都必须经过验证,传输的数据量要翻一倍。

  另一种替代方法是循环冗余校验(CRC),即随每个数据包发 送一个校验和(checksum),接收器就会指示是否存在问题, 所以控制器无需验证接收。

  循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。

  校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2R,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2R除以生成多项式G(x)得到的余数就是校验码。

  ADI 公司的众多DAC 都采用了分组差错校验(PEC)的形式 来实现CRC。不需要PEC 功能时,则写入24 位数据。要添加 PEC 功能,24 位数据需增加相应的8 位校验和。如果接收的 校验和与数据不一致,输出引脚被拉低,指示存在错误。控制 器清除错误,使引脚返回高电平,并重新发送数据。图1 所示 为如何用SPI 接口应用数据的示例。表1 列出了能够采用分组 差错校验的ADI 器件示例。

     

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

  表1. 采用分组差错校验的ADI 器件示例

产品型号 描述
AD5360/AD5361 16通道、16 位/14 位、±10 V DAC
AD5362/AD5363 8通道、16 位/14 位、±10 V DAC
AD5748 电流/电压输出驱动器,适合工业应用
AD5749 电流输出驱动器,适合工业应用
AD5750/AD5750-1 电流/电压输出驱动器,输出范围可编程,适合 工业应用
AD5751 电流/电压输出驱动器,适合工业应用
AD5755/AD5735 4通道、16 位、4 mA 至20 mA 电流和电压输出 DAC
AD5757/AD5737 4通道、16 位、4 mA 至20 mA 电流输出DAC
ADT7470 温度传感器集线器和风扇控制器

 

  生成分组差错校验和

  CRC-8 算法采用多项式 C(x) = x8 + x2 + x1 + 1. For 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 公司产品时,只有两段数据都正确到达, 该数据才会被接收。此方法提高了数据传输的可靠性,并可确 保遭破坏的数据几乎永远不会被接收。


  
上一篇:设计GNSS双频圆极化天线
下一篇:分析以太网视频监控设计实现

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料