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



Ken Kavanagh

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

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

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

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

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

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

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

生成分组差错校验和

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 演示了推演校验和的方法。

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

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

结论

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

作者

Ken Kavanagh 是ADI 公司精密DAC 部的应用工程师。Ken 自1994 年起一直在应用部门工作,目前负责 为nanoDAC®和denseDAC®产品系列提供应 用支持。他1999 年毕业于利默里克大学,获 得工学学士学位。

点击这里,获取更多电机控制设计信息

最新文章