我试图了解协议的工作原理,它来自TEC-Microsystem device (DX5100),它说:
CRC:控制和CRC-8的字节。在某些选项中可能不存在 该协议。控制和CRC-8是在 填充整个数据包,从字节FEND开始,然后 最后一个数据字节结束。如果数据包发送地址, 在计算控制和时,使用其真实值,即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-Dallas / Maxim”。
但是,当我使用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是D3
C0 81 05 02 02 00 DA
,所以C0 01 05 02 02 00
CRC是DA
通过两个示例,您可以对它们进行XOR,从而消除了初始值和最终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。