首页>>科技 >>内容

循环冗余检查算法,循环冗余检查确保正确的数据通信

发布时间:2023-08-25 19:46:08编辑:温柔的背包来源:

很多朋友对循环冗余检查算法,循环冗余检查确保正确的数据通信不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

循环冗余检查算法,循环冗余检查确保正确的数据通信

在工业环境中运行的电子系统必须经常承受极端温度、电噪声环境或其他恶劣条件,然而,它们的正常运行是非常重要的。例如,如果发送到控制机械臂位置的DAC的数据被破坏,机械臂可能会向意想不到的方向移动。这不仅危险而且昂贵:想象一下,在生产线上,你的手臂撞到了一辆新车的侧面,或者更糟,撞到了生产工人。

有几种方法可以确保您在采取行动之前收到正确的数据。最简单的方法是让控制器读回发送的数据。如果接收的数据与发送的数据不匹配,则其中一个数据被损坏,必须发送并验证新数据。这种方法是可靠的,但也有很大的开销:每条数据都必须经过验证,使传输的数据量增加一倍。

另一种方法是循环冗余校验(CRC),即对每个数据包发送一个校验和。接收设备将指示是否存在问题,因此控制器不需要验证接收。校验和通常通过对数据应用多项式方程来生成。当应用于24位字时,CRC-8产生8位校验和。将校验和与数据结合,将所有32位传输到可以分析该组合的设备并指示错误(虽然不是完美的解决方案),比读写方法更有效。

ADI公司的许多DAC以包错误校验(PEC)的形式实现CRC。当不需要PEC功能时,将写入24位数据。为了增加PEC功能,24位数据被相应的8位校验和扩展。如果收到的校验和与数据不匹配,输出引脚会降低以指示错误。控制器清除错误,使引脚返回高电平,然后重新发送数据。图1显示了如何使用SPI接口应用数据的示例。表1列出了可以使用包错误检查的ADI器件示例。

图一。SPI写操作有无包错误检查。表1。使用包错误检查的模拟设备示例

产品型号描述AD5360/AD536116通道、16/14位10V DACAD5362/AD53638通道、16/14位10V DACAD5748工业电流/电压输出驱动器AD5749工业电流输出驱动器AD5750/AD5750-1具有可编程范围的工业电流/电压输出驱动器AD5751工业电流/电压输出驱动器AD5755/AD57354通道、16位

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展示了如何开发校验和。

图二。生成一个24位数的校验和(0x654321)。结论图2所示的示例使用(十六进制)值0x654321作为示例24位数据字。对数据应用CRC-8多项式会产生0x86的校验和。当数据和校验和发送到兼容的ADI产品时,只有当两种数据都正确到达时,才会接受数据。这种方法提高了数据传输的可靠性,并确保损坏的数据几乎永远不会被接受。审计郭婷

以上知识分享希望能够帮助到大家!