我试图理解协议是如何工作的,它来自TEC-微系统设备(DX5100),它说:
CRC:控制和CRC-8的字节。它可能在协议的某些选项中不存在。控制和CRC-8是在整个数据包的填充之前计算的,首先是字节保护,最后是最后一个数据库。如果一个数据包发送一个地址,在计算控制和时,使用它的真值,即不考虑MSB=1。控制和的计算采用多项式。CRC = X8 + X5 + X4 + 1。
当我嗅到他们的软件发送的数据时,我看到这些数据正在被传输:
0xC0 0x81 0x04 0x02 0x02 0x00 0x55如果数据包发送地址,则在计算控制和时使用其真值,即不考虑MSB=1。
这意味着计算CRC所考虑的数据实际上是0xC0 0x01 0x04 0x02 0x02 0x00 (第二个字节是0x01而不是0x81)。
根据我在维基百科上所能找到的,"CRC = X8 + X5 + X4 + 1“意味着他们使用”CRC-8-达拉斯/马克西姆“。
然而,当我使用https://crccalc.com/时,输入C00104020200并点击"CALC-CRC-8“,它报告0x82为"CRC-8/MAXIM",而不是0x55。我是不是遗漏了什么?
更多来自嗅探器的示例:
C0 81 03 02 02 00 D3,所以C0 01 03 02 02 00 CRC是D3C0 81 05 02 02 00 DA,所以C0 01 05 02 02 00 CRC是DA发布于 2020-06-05 08:57:21
通过两个示例,您可以将它们异或,从而消除初始值和最终xor,就好像两者都是00一样:
C0 01 03 02 02 00 CRC is D3
C0 01 05 02 02 00 CRC is DA
---------------------------
00 00 06 00 00 00 CRC is 09这证实CRC多项式为0x31 (反转为0x8C),输入被反射,结果被反映。
使用初始值0xDE不起作用,所以我尝试将位反转到0x7B,这对问题中的三个示例都有效。因此,初始值== 0x7B,多项式也将从0x31位反转到0x8C,但是在线计算器使用的是非反向多项式0x31。如果您单击“显示反射查找表”,计算CRC,然后查看第8字节0行,您将看到0x8C。
https://stackoverflow.com/questions/62195714
复制相似问题