我必须实现一个通过 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应该就够了,但是不知道这个说法对不对……
有人可以帮助我,我如何确定我的协议的最佳校验和算法?