1

我有一个传感设备,它传输一个 6 字节消息以及一个 1 字节计数器和一个校验和。

数据看起来像这样:

------DATA----------- -Counter- --Checksum?--

55 FF 00 00 EC FF ---- 60---------- 1F

计数器中的最后四位始终设置为 0,即这些位可能未使用。最后一个字节被假定为校验和,因为它具有非常特殊的性质。它往往会随着数据的变化而随机变化。

现在我需要找到基于--DATA-- 来计算这个校验和的算法。我尝试的是所有可能的 CRC-8 多项式,对于每个多项式,我都尝试反映数据、切换它、使用非零值启动它等等。我得出的结论是,我不是在处理正常的 crc-算法。我也尝试了一些 flether 和 adler 方法但没有成功,来回异或东西,但我仍然不知道如何生成校验和。

我最关心的是,计数器是如何使用的???相同的数据但具有不同的计数器值会生成不同的校验和。我试图将计数器包含在我的计算中,但没有任何运气。

以下是其他一些数据样本:

55 FF 00 00 F0 FF A0 38  
66 0B EA FF BF FF C0 CA  
5E 18 EA FF B7 FF 60 BD  
F6 30 16 00 FC FE 10 81  

可能值得一提的另一件事是数据中的最后一个字节仅取值 FF 或 FE

请,如果您有任何提示或技巧,我可以尝试将它们发布在这里,我真的很绝望。

谢谢

4

1 回答 1

0

一些随机的想法:

  1. 位排序:您当前将数据表示为八位字节,但这不是 CRC 算法所看到的。CRC 对表示为位数组而不是八位字节数组的多项式进行运算。因此,设备执行 CRC 可能使用与您使用的不同的位排序方案。
  2. 根据设备的不同,我会说计数器很可能包含在 CRC 计算中。
  3. 如果这是一个嵌入式设备,它可能会使用一些其他代码,例如 BCH。

是否可以提供有关该设备的任何其他信息?

这可能会说明使用了多么强大的编码。例如,某些 CRC-12 (0x8F8) 提供的汉明距离为 5,数据字长最多为 53 位(在您的数据中,数据字可能是 52 位,假设 CRC 大小为 12 位)。

编辑:请参阅我如何猜测校验和算法 中的答案?一些额外的想法。

于 2010-05-24T13:20:15.923 回答