我有旧的串行通信协议,在查找已使用的校验和算法时遇到了一些麻烦。我尝试了几种CRC16算法,但似乎都不起作用。

Tx消息格式如下:格式,但只有1个数据字节。以下是提供的一些示例(将#添加到单独的块中以哈希号表示;十六进制格式):

任何帮助或提示,将不胜感激;)

最好的问候,
Zlatko

EDIT正确的算法是常规CRC16(0x8005多项式)。感谢booto的正确答案。

#1 楼

它是从0x8005之后的字节一直到CRC之前的字节的数据的大尾数CRC16(多项式0x82)。例如,对于最后一个RX帧:

82 00 00 00 ff 00 00 00 01 01 4c 4f 0c 6a 83


{0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x01,0x01,0x4c,0x4f}的CRC16是0x0c6a0x82是“帧尾”标记。然后,我将其余数据(sans crc字段)插入此在线CRC计算应用程序,并且发出的CRC16看起来正确。

然后,我检查了您提供的其他一些帧,并使用其他来源验证了CRC计算。

,瞧……...

评论


出于兴趣,您是如何工作的?

– Cyber​​gibbons
15年8月12日在7:44

我假设0x82是帧开始标记,而0x83是帧结束标记。我将剩余的数据(sans crc字段)插入了lammertbies.nl/comm/info/crc-calculation.html,发出的CRC16看起来正确。然后,我检查了您提供的其他一些框架,并与其他来源一起验证了crc计算。

– booto
15年8月12日在8:23



我已经尝试了一些我还没有发布的示例算法,并且确实可以使用。

–zlajoan
15年8月12日在12:47