我一直在尝试解码CRC或校验和算法,该算法用于无人机与其摄像头之间的串行通信大约一个星期,但运气不佳,我想知道这里是否有人看到我丢失的东西或有什么建议。
典型的数据包如下所示:
FE1A390100020001AE0BE0FF090046250B00040000004E0D32080008540D8808F4016B54
它们始终以0xFE开头。第二个字节是数据包的总大小减去10个字节。数据包大小各不相同,但我想我对0x1A大小特别感兴趣。字节3似乎是一个数据包计数器,因为它通常会增加1,但是有时我已经看到它在几个增量的数据包(通常是更改为0x22大小的数据包)之前跳到一个完全不同的数字,然后恢复以1的顺序递增。最后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个数据包,reveng会回来,但找不到模型。
但是,如果我删除数据包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
有什么想法吗?有什么建议吗?这让我发疯了一个星期