CRC-8值不匹配

问题描述 投票:0回答:1

我试图了解协议的工作原理,它来自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
crc
1个回答
2
投票

通过两个示例,您可以对它们进行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。

© www.soinside.com 2019 - 2024. All rights reserved.