我有旧的串行通信协议,并且在查找已使用的校验和算法时遇到了一些麻烦。我已经尝试了几种 CRC16 算法,但它们似乎都不起作用。
Tx 消息格式如下所示:
start(10B) + messageIndex(1B) + data(5-15B) + checksum(2B) + end(1B)
Rx 消息具有相同的格式,但只有 1 个数据字节。这里提供了几个示例(添加了哈希 # 以分隔块;十六进制格式):
Tx: 82 00 00 00 01 00 00 00 ff c1 # 48 # 56 57 50 41 54 5f 30 5f 31 3d 31 # 7f 12 # 83
Rx: 82 00 00 00 ff 00 00 00 01 01 # 48 # 4f # cc 68 # 83
Tx: 82 00 00 00 01 00 00 00 ff c1 # 49 # 56 57 50 41 4e 5f 30 5f 32 3d 49 55 30 30 30 # f5 16 # 83
Rx: 82 00 00 00 ff 00 00 00 01 01 # 49 # 4f # 5c 69 # 83
Tx: 82 00 00 00 01 00 00 00 ff c1 # 4a # 56 57 50 41 54 5f 30 5f 32 3d 31 # b8 1b # 83
Rx: 82 00 00 00 ff 00 00 00 01 01 # 4a # 4f # ac 69 # 83
Tx: 82 00 00 00 01 00 00 00 ff c1 # 4b # 56 57 41 4b 54 50 4e 5f 30 3d 32 # 60 6f # 83
Rx: 82 00 00 00 ff 00 00 00 01 01 # 4b # 4f # 3c 68 # 83
Tx: 82 00 00 00 01 00 00 00 ff c1 # 4c # 56 57 50 41 4e 5f 31 5f 31 3d 49 4c 30 30 30 # 6a ec # 83
Rx: 82 00 00 00 ff 00 00 00 01 01 # 4c # 4f # 0c 6a # 83
如有必要,我可以提供更多数据。任何帮助或提示将不胜感激;)
最好的问候,兹拉特科
编辑正确的算法是常规的 CRC16(0x8005 多项式)。感谢 booto 的正确答案。