我必须实现一个通过I 2 C运行的通信协议,该协议用于两个分布式微控制器的board2board通信。 为确保数据完整性,我想向通信协议中添加一个校验和,并认为类似CRC-8或CRC-16的格式应该适用,但不幸的是我没有胶水,我应该使用哪种标准来确定最佳算法,并且在下一步是最佳设置(如CRC时的多项式值)。
我的协议非常简单,只定义了一个32位读取和一个32位写入命令:
I 2 C主读取命令:
I 2 C主写命令:
我在一个论坛帖子上看到,CRC的长度取决于应验证的数据大小,因此CRC-8可以充分验证2 8 %8(= 32bit)和2 16 %8(= 8KiB)数据。 如果是这样,那么CRC-8应该足够了,但是我不知道这句话是否正确...
有人可以帮助我,如何确定适用于我的协议的最佳校验和算法?
答案 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