循环冗余校验确保正确的数据通信

数据通信

6人已加入

描述

 

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

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

  另一种替代方法是循环冗余校验(CRC),即随每个数据包发 送一个校验和(checksum),接收器就会指示是否存在问题, 所以控制器无需验证接收。校验和一般通过向数据应用一个多 项式方程式来生成。应用于一个24 位字时,CRC-8 可产生一 个8 位校验和。将校验和与数据组合在一起,全部32 位都发 送到能够分析该组合的器件,并指示是否出错——这种方法虽 然不是无可挑剔解决方案,但却比读写方法更加高效。

  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 公司产品时,只有两段数据都正确到达, 该数据才会被接收。此方法提高了数据传输的可靠性,并可确 保遭破坏的数据几乎永远不会被接收。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分