校验和自制通信协议

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (32)

我必须实现一个通过I 2 C 运行的通信协议,并用于两个分布式微控制器的board2board通信。为了确保数据完整性,我想在通信协议中添加一个校验和,并认为像CRC-8或CRC-16这样的东西应该适合,但遗憾的是我没有粘合剂,我应该使用哪个标准来确定最佳算法并且在下一步,最佳设置(如CRC的情况下的多项式的值)。

我的协议非常简单,只定义了一个32位读取和一个32位写入命令:

  • I 2 C Master Read命令:
    • 请求(I 2 C WR):2字节内存索引+校验和
    • 响应(I 2 C RD):4字节数据+校验和

  • I 2 C主写命令:
    • 请求(I 2 C WR):2字节内存索引+ 4字节数据+校验和

我在论坛帖子上看到,CRC长度取决于应该验证的数据大小,因此CRC-8可以充分验证CRC-16的2 8%8(= 32位)和2 16%8(= 8KiB)数据。如果这是真的,CRC-8应该足够了,但我不知道这个陈述是否正确......

有人可以帮助我,我如何确定我的协议的最佳校验和算法?

提问于
用户回答回答于

根据该表,最佳CRC多项式最佳拟合CRC取决于数据大小和汉明距离。汉明距离越远,CRC处理的数据就越少。如果HD包含在范围内,您将必须预测(尽可能多)。

但是,我不明白你的陈述:x power y mod z = x ^ y - (x ^ y / z * z)= 2 ^ 8 - (2 ^ 8/8 * 8)= 0

扫码关注云+社区

领取腾讯云代金券