首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CRC-8值错配

CRC-8值错配
EN

Stack Overflow用户
提问于 2020-06-04 13:21:59
回答 1查看 438关注 0票数 0

我试图理解协议是如何工作的,它来自TEC-微系统设备(DX5100),它说:

CRC:控制和CRC-8的字节。它可能在协议的某些选项中不存在。控制和CRC-8是在整个数据包的填充之前计算的,首先是字节保护,最后是最后一个数据库。如果一个数据包发送一个地址,在计算控制和时,使用它的真值,即不考虑MSB=1。控制和的计算采用多项式。CRC = X8 + X5 + X4 + 1。

当我嗅到他们的软件发送的数据时,我看到这些数据正在被传输:

代码语言:javascript
复制
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是D3
  • C0 81 05 02 02 00 DA,所以C0 01 05 02 02 00 CRC是DA
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-05 08:57:21

通过两个示例,您可以将它们异或,从而消除初始值和最终xor,就好像两者都是00一样:

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62195714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档