0

我必须实现一个通过 I 2 C 运行并用于两个分布式微控制器的板对板通信的通信协议。为了确保数据完整性,我想在通信协议中添加一个校验和,并认为应该适合 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 可以充分验证 CRC-16 的 2 8 % 8 (=32bit) 和 2 16 % 8 (=8KiB) 数据. 如果真是这样的话,CRC-8应该就够了,但是不知道这个说法对不对……

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

4

1 回答 1

0

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

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

于 2019-05-22T23:01:20.827 回答