首页 > 解决方案 > 解码未知的 CRC 或校验和?

问题描述

我一直在尝试解码用于无人机与其相机之间的串行通信的 CRC 或校验和算法大约一周,但运气不佳,我想知道这里是否有人看到我遗漏的东西或有任何建议.

典型的数据包如下所示:

FE1A390100020001AE0BE0FF090046250B00040000004E0D32080008540D8808F4016B54

它们总是以 0xFE 开头。第 2 个字节是数据包的总大小减去 10 个字节。数据包大小各不相同,但我认为我对 0x1A 大小特别感兴趣。字节 3 似乎是一个数据包计数器,因为它通常增加 1,但有时我看到它在恢复增加 1 个序列之前为几个数据包跳到一个完全不同的数字(通常是在更改为 0x22 大小的数据包时)。最后 2 个字节总是在变化,我相信是校验和或 CRC。除非我操纵无人机无线电控制,否则所有其余字节似乎从一个 0x1A 数据包到下一个数据包都保持不变。

开机后有一系列数据包,我假设它们用于初始化通信。它们是最短的数据包,它们之间的变化最少,所以看起来它们可能是最容易看到的。这是开机后发送的前 7 个字节。

From Drone to camera
Time:
8.3982205   FE030001000000010200018F68
8.39934725  FE03010100000001020001A844
8.400473958 FE03020100000001020001C130
8.401600708 FE050301000000000000000001AAE8
8.402900792 FE1A040100020001000000000000000000000C000300000853060008AB028808F4014629
8.406020958 FE22050100030002000000000000000000000000000000000000B3FFFFFFDE22006300FF615110050000C956
8.4098345   FE1A060100020001000000000000000000000C000300000853060008AB028808F40180A9

如果我使用 -w 16 -s 将前 3 个数据包放入 reveng,那么它会返回:

reveng: warning: you have only given 3 samples
reveng: warning: to reduce false positives, give 4 or more samples
width=16  poly=0x1487  init=0x0334  refin=false  refout=false  xorout=0x0000  check=0xa5b9  residue=0x0000  name=(none)

如果我添加第 4 个数据包,它会找到相同的多边形,但其余部分看起来不同:

width=16  poly=0x1487  init=0x417d  refin=false  refout=false  xorout=0x5582  check=0xbfa2  residue=0xb059  name=(none)

如果我添加第 5 个数据包,则返回时未找到模型。

但是,如果我删除数据包 4,然后使用数据包 1、2、3 和 5 运行它,如果再次找到相同的多边形,但其余的值不同:

width=16  poly=0x1487  init=0x804b  refin=false  refout=false  xorout=0x0138  check=0x7dcc  residue=0xc8ca  name=(none)

大多数包含 0x1A 大小的数据包和我通过 reveng 运行的前 3 个初始化数据包的组合都返回“未找到模型”。到目前为止,每次我只用 0x1a 大小的数据包运行 reveng 时,都找不到模型。

我认为有可能在初始化数据包之后,它如何将从相机接收到的信息合并到从无人机到相机的数据的 CRC 计算中,但是这些数据包中没有很多数据. 这是从相机发送到无人机的前 9 个数据包。在无人机发送第一个 0x1A 数据包之前,摄像头发送的唯一数据似乎是 0x7D0001。

From camera to drone:
Time
3.474456792 FE0500020000000000007D00013D40
4.475220208 FE0501020000000000007D000168C5
5.476483875 FE0502020000000000007D00018642
6.477295958 FE0503020000000000007D0001D3C7
7.4783405   FE0504020000000000007D00014B45
8.479420458 FE06050200010003FA078538B838B3
8.480811667 FE0506020000000000007D0001F047
9.48057875  FE0507020000000000007D0001A5C2
9.481883    FE06080200010003F9078638B8386037

我尝试将 0x7D0001 合并到数据包中并通过 reveng 运行它们,但这似乎没有帮助。

我还尝试了 reveng -w 8 -s 对各种数据包组合,但没有找到模型。而且我手动尝试了各种校验和算法(可能不正确)但没有成功。

我在这里捕获了更多数据: https ://drive.google.com/open?id=1v8MCaXOvP_2Wv_hcaqhUZnXvqNI1_2Ur

有任何想法吗?建议?这已经让我发疯了一个星期

标签: crc

解决方案


推荐阅读