【问题标题】:How this CRC (Cyclic Redundancy Check) calculation can be solved?如何解决这个 CRC(循环冗余校验)计算?
【发布时间】:2016-08-05 15:19:09
【问题描述】:

我想向 TCP 105 电路发送数据。

以下十六进制命令可以发送数据123:

7F30001103 313233 45D4

这里,313233 是 123 的十六进制表示,45D4 是 CRC 值。

在计算 CRC 后,我无法获得这个 45D4。在网上搜索了很长时间后,我得到了不同标准的其他CRC值。但是我的 LED 显示电路不接受这些 CRC 值。

请帮助我了解如何从 7F30001103313233 获得 45D4。

提前致谢。

【问题讨论】:

  • 我在 8 个字节上使用我的方法得到 0x9A8F。你应该在 8 个字节上计算 CRC 还是只计算一个 subsdet?即使使用相同的算法,CRC 也取决于您使用的多项式。 CRC反转,这是一个棘手的问题!
  • 我也用 0x9A8F 测试过,但没有成功。可能是它的CRC-16。 CRC 反转将是 D445 而不是 45D4。

标签: hex checksum crc crc16


【解决方案1】:

该命令匹配称为 CRC-16/CMS 的算法。

$ reveng -w 16 -s 7f30001103313233d445
width=16  poly=0x8005  init=0xffff  refin=false  refout=false  xorout=0x0000  ch
eck=0xaee7  name="CRC-16/CMS"

可能是正确的算法,因为您只给出了一个代码字(并且因为我假设 CRC 已被字节交换。)

要生成计算此 CRC 的代码,请参阅 Mark Adler 的 crcany 工具,例如。

【讨论】:

  • 感谢 Regregex 的精彩回复。我希望这会奏效,我会尝试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 2016-10-20
  • 2015-02-25
  • 2017-11-04
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
相关资源
最近更新 更多