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
。我错过了什么吗?
来自嗅探器的更多示例:
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
有两个例子,你可以对它们进行异或运算,这会消除初始值和最终异或,就好像两者都是 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。
我试图了解协议的工作原理,它来自 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
。我错过了什么吗?
来自嗅探器的更多示例:
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
有两个例子,你可以对它们进行异或运算,这会消除初始值和最终异或,就好像两者都是 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。