任何帧均使用相同的16位CRC X-25

时间:2019-06-20 19:41:08

标签: crc crc16

我对自己在开发应​​用程序期间所做的观察很好奇。 长话短说,我正在开发一款可从智能电表读取数据的应用程序。他们的请求框架如下:

7E [hex-address] [crc1] [cmd] [crc2] 7E

CRC的算法是CRC-16 / X-25,它们应计算不含7e的整个帧的左部分,因此crc2包括crc1。我注意到,crc2的所有时间cmd始终是相同的,甚至具有不同的hex-address。 我使用了crccalc工具来确保。重现步骤:

  • 放置任意(甚至任意大小)十六进制数组
  • 计算CRC-16 / X-25
  • 交换CRC字节
  • 将此交换后的CRC放入数组结尾
  • 再次计算CRC

此CRC对于任何字节数组都是相同的。为什么这样?这种现象有什么名字吗?

1 个答案:

答案 0 :(得分:1)

  

再次计算CRC

如果将CRC附加到数据中并再次计算,则结果为常数。如果CRC不是后补(xorout = 0),则结果为零,但在这种情况下,它是后补(xorout = 0xffff),因此结果是非零常量,在这种情况下为0x0f47(假设否)。发生错误)。