有几种方法可以确保收到正确数据后才执行动作。最简单的方 式就是控制器回读所发送的数据。如果接收的数据与发送的数 据不匹配,则说明其中一者已受到破坏,必须发送新数据并进 行验证。这种方法的确可靠,但产生的开销也很大,每段数据 都必须经过验证,传输的数据量要翻一倍。
另一种替代方法是循环冗余校验(crc),即随每个数据包发 送一个校验和(checksum),接收器就会指示是否存在问题, 所以控制器无需验证接收。校验和一般通过向数据应用一个多 项式方程式来生成。应用于一个24 位字时,crc-8 可产生一 个8 位校验和。将校验和与数据组合在一起,全部32 位都发 送到能够分析该组合的器件,并指示是否出错——这种方法虽 然不是无可挑剔解决方案,但却比读写方法更加高效。
adi 公司的众多dac 都采用了分组差错校验(pec)的形式 来实现crc。不需要pec 功能时,则写入24 位数据。要添加 pec 功能,24 位数据需增加相应的8 位校验和。如果接收的 校验和与数据不一致,输出引脚被拉低,指示存在错误。控制 器清除错误,使引脚返回高电平,并重新发送数据。图1 所示 为如何用spi 接口应用数据的示例。表1 列出了能够采用分组 差错校验的adi 器件示例。
图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 演示了推演校验和的方法。
图2. 生成24 位数((0x654321))的校验和
结论
图2 中的示例采用(十六进制)值0x654321 作为24 位数据字。 对该数据应用crc-8 多项式可生成校验和0x86。数据和校验 和发送至兼容的adi 公司产品时,只有两段数据都正确到达, 该数据才会被接收。此方法提高了数据传输的可靠性,并可确 保遭破坏的数据几乎永远不会被接收。
推荐阅读:
hdmi收发器简化家庭影院系统设计
升压电源和高压dac为天线和滤波器提供调谐信号
宽动态范围的高端电流检测:三种解决方案
通信电源知识超级汇总!!!
利用多通道dds实现相位相干fsk调制
编辑:wenwei来源:电子元件技术网