我正在尝试解释发送串行数据的旧(20年)电子设备。消息是HEX格式,每个22字节。 20个字节是数据(我检查它们是否根据特定功能而改变),最后2个字节是某种校验和。
以下是示例消息。
消息1:16 16 16 16 02 FE 4E 8F 04 00 00 00 B0 83 7E 7C 7D 7F 7F 7F 7F SUM 75 FC 消息2:16 16 16 16 02 FE 4E 8F 04 00 00 00 B0 12 7E 7C 7D 7F 7F 7F 7F SUM E4 FA 消息3:16 16 16 16 02 FE 4E 8F 04 00 00 00 B0 94 7E 7C 7D 7F 7F 7F 7F SUM 62 FA 消息4:16 16 16 16 02 FE 4E 8F 04 00 00 00 B0 93 7E 7C 7D 7F 7F 7F 7F SUM 65 FC 消息5:16 16 16 16 02 FE 4E 8F 04 00 00 00 B0 92 7E 7C 7D 7F 7F 7F 7F SUM 64 FA 消息6:16 16 16 16 02 FE 4E 8F 04 00 00 00 B0 8C 7E 7C 7D 7F 7F 7F 7F SUM 7A 0A 消息7(特殊):16 16 16 16 02 FE 4E 50 SUM E2 80
我只更改了一个字节,以便更容易检测到“校验和”中的更改,我确认SUM中的第一个字节是LRC,通过对数据字节进行异或,但我无法解释第二个字节及其如何计算(我已经尝试过CheckSum8 Modulo 256 / CheckSum8 2s补充和CRC-8)。
注意:串行通信为8位,偶校验。
答案 0 :(得分:1)
我认为你应该采取" sum"的第一个字节。在计算" sum"的第二个字节时要考虑到。注意改变的字节和"和"的第一个字节的总和。对于具有相同的和的最后一个字节的所有行,它们是相同的。例如。对于以FC结尾的行:83 + 75 = 93 + 65(十六进制)。所以,它应该是非常简单的东西,如总和或类似。事实上,从你提供的样本行看来,每行中的最后一个字节只是所有前面字节的总和(包括总和的第一个字节)加上A8(当然所有模数为256)。不确定A8来自哪里。假设它是一种非零种子,这是很常见的事情。