自制通信协议的校验和

时间:2019-05-22 11:49:10

标签: protocols checksum i2c crc error-detection

我必须实现一个通过I 2 C运行的通信协议,该协议用于两个分布式微控制器的board2board通信。 为确保数据完整性,我想向通信协议中添加一个校验和,并认为类似CRC-8或CRC-16的格式应该适用,但不幸的是我没有胶水,我应该使用哪种标准来确定最佳算法,并且在下一步是最佳设置(如CRC时的多项式值)。

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

  • I 2 C主读取命令:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

根据此表Best CRC polynomial,最合适的CRC取决于数据大小和汉明距离。 汉明距离越大,CRC处理的数据就越少。 您必须(尽可能多地)预测HD是否包含在范围内。

但是,我不明白您的说法: x幂y mod z = x ^ y-(x ^ y / z * z)= 2 ^ 8-(2 ^ 8/8 * 8)= 0