我是新手,所以我请求你的帮助。
我必须解码来自设备的转储数据,因为我想尝试理解数据。
数据采用这种格式,一些信息是已知的:
7E 00 20 10 75 00 00 00 07 5F C7 6F 4F 01 05 C8 .. .. ..(每个数据包的其他一些相同的字节)
7e =开始取景(不改变)
20 =数据包长度(不变)
10 75 =数据包类型(不改变)
00 00 00 07 =增量编号,当它达到 00 00 00 FF 时,下一个是 00 00 01 00,当校验和失败时,设备以相同的编号重试。
5F C7 6F 4F hex timestamp(十六进制转换的unix时间戳)
01 ALTERNATING VALUE 01 或 21(此值在每个接收到的数据包上交替)
05 Mistery BYTE,我稍后会解释
C8校验和用增量数加十六进制时间戳计算,然后取模256,当交替值为21时减去0x03或当交替值设置为01时减去0x23。当结果值为负时,您必须丢弃所有FF FF和取最后一个字节。
问题是神秘字节。
乍一看似乎是:
当时间戳的最后一个字节大于校验和时,神秘字节为:06,否则为05。但有时此值为“07”
这是另一个例子:
7E 00 20 10 75 00 00 00 08 5F C7 71 73 21 06 0F .. .. ..
校验和计算方法:00+00+00+08+5F+C7+71=0x212(十进制530)
530 模 256 = 18
十进制 18 到十六进制 = 12
因为交替值是 21,我必须减去 0x3 -> 12 - 0x03 = 校验和 = 0F
现在校验和的最后一个字节 73 大于 0F,所以神秘字节的结果似乎是正确的 06
当 misery 字段有时是 07 时,问题就出现了。我认为这个值不仅仅是与时间戳的最后一个字节和校验和的比较,而且我错过了一些东西。
7E 00 20 10 75 00 00 00 87 5F C7 7B ED 21 07 12
7E 00 20 10 75 00 00 00 88 5F C7 7B FF 01 07 05
这里还有一些其他示例,似乎 06 与 07 交替出现:
7E 00 20 10 75 00 00 00 D0 5F C7 80 89 01 06直流
7E 00 20 10 75 00 00 00 D1 5F C7 80 8F 21 07 03
7E 00 20 10 75 00 00 00 D2 5F C7 80 95 01 06 EA
7E 00 20 10 75 00 00 00 D3 5F C7 80 96 21 07 0C
7E 00 20 10 75 00 00 00 D4 5F C7 80 9B 01 06 F2
但很快就会有很多行的 07
7E 00 20 10 75 00 00 00 D9 5F C7 80 A9 21 07 25
7E 00 20 10 75 00 00 00 DA 5F C7 80 AA 01 07 07
7E 00 20 10 75 00 00 00 DB 5F C7 80 AA 21 07 28
一些带有“05”神秘字节的例子。
7E 00 20 10 75 00 00 01 09 5F C7 82 00 21 05 AF
7E 00 20 10 75 00 00 01 0A 5F C7 82 05 01 05 95
7E 00 20 10 75 00 00 01 0B 5F C7 82 26 21 05 D7
7E 00 20 10 75 00 00 01 0C 5F C7 82 2C 01 05 BE
关于这个神秘字节的用途的任何线索?