在工业环境中运行的电子系统必须经常承受极端温度、电气噪声环境或其他恶劣条件,然而,它们正常工作至关重要。例如,如果发送到控制机械臂位置的DAC的数据被破坏,则该臂可能会向意想不到的方向移动。这不仅危险而且代价高昂:想象一下,在生产线上,手臂撞到一辆新车的侧面,或者更糟糕的是,撞到生产工人。
有几种方法可用于确保在采取行动之前收到正确的数据。最简单的方法是让控制器读回发送的数据。如果接收到的数据与发送的数据不匹配,则其中一个已损坏,必须发送和验证新数据。这种方法是可靠的,但它也有很大的开销:每条数据都必须经过验证,使传输的数据量翻倍。
另一种方法是循环冗余校验 (CRC),即为每个数据包发送校验和。接收设备将指示是否出现问题,因此控制器不需要验证接收。校验和通常是通过对数据应用多项式方程来生成的。CRC-8 在应用于 24 位字时产生 8 位校验和。将校验和与数据相结合,将所有32位传输到可以分析组合的设备,并指示发生的错误(尽管不是一个完全完美的解决方案),比写入和读取方法更有效。
许多ADI公司的DAC以数据包错误检查(PEC)的形式实现CRC。当不需要 PEC 功能时,将写入 24 位数据。为了添加 PEC 函数,24 位数据通过相应的 8 位校验和进行扩充。如果收到的校验和与数据不一致,则输出引脚调低以指示错误。控制器清除错误,返回引脚高电平,然后重新发送数据。图 1 显示了如何使用 SPI 接口应用数据的示例。表1列出了可以使用数据包错误检查的ADI器件示例。
图1.SPI 写入时带或不带数据包错误检查。
表 1.使用数据包错误检查的ADI器件示例
部件号 | 描述 |
AD5360/AD5361 | 16 通道、16/14 位、±10V DAC |
AD5362/AD5363 | 8 通道、16/14 位、±10V DAC |
AD5748 | 工业电流/电压输出驱动器 |
AD5749 | 工业电流输出驱动器 |
AD5750/AD5750-1 |
具有可编程范围的工业电流/电压输出驱动器 |
AD5751 |
工业电流/电压输出驱动器 |
AD5755/AD5735 | 4通道、16位、4mA至20mA电流和电压输出DAC |
AD5757/AD5737 | 4通道、16位、4mA至20mA电流输出DAC |
ADT7470 | 温度传感器集线器和风扇控制器 |
生成数据包错误校验和
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产品时,只有在两条数据都正确到达时,才会接受数据。此方法提高了数据传输的可靠性,并确保几乎永远不会接受损坏的数据。
审核编辑:郭婷
-
控制器
+关注
关注
112文章
16197浏览量
177386 -
dac
+关注
关注
43文章
2269浏览量
190830
发布评论请先 登录
相关推荐
评论