CRC-8 值不匹配

CRC-8 value mismatch

我试图了解协议的工作原理,它来自 TEC-Microsystem device (DX5100),它说:

CRC: Byte of the control sum CRC-8. It can be absent in some options of the protocol. The control sum CRC-8 is calculated before the stuffing for the entire packet, beginning with the byte FEND and finishing with the last databyte. If a packet transmits an address, when calculating the control sum, its true value is used, i.e. MSB=1 is not taken into account. For the calculation of the control sum the polynomial is used. CRC = X8 + X5 + X4 + 1.

当我嗅探他们的软件发送的数据时,我看到正在传输以下数据:

0xC0 0x81 0x04 0x02 0x02 0x00 0x55

If a packet transmits an address, when calculating the control sum, its true value is used, i.e. MSB=1 is not taken into account

这意味着计算 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。我错过了什么吗?

来自嗅探器的更多示例:

有两个例子,你可以对它们进行异或运算,这会消除初始值和最终异或,就好像两者都是 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。如果单击 "show reflected lookup table",计算 CRC,然后查看第 8 行第 0 字节,您将看到 0x8C。