请选择 进入手机版 | 继续访问电脑版
正在上传图片(0/1)

M100协议中的CRC校验问题。。。。。。。。。

 0
手机看帖 6 4225
onboard API的协议格式中的帧头CRC16校验是怎样得出来的啊?我不知道生成式是什么。。。。
我把程序发送的帧截取下来了,这个是帧头加CRC校验位 AA 3E 00 02 00 00 00 00 06 00 C2 8F,其中C2 8F是CRC16校验的数据, AA 3E 00 02 00 00 00 00 06 00是帧头。

我在网上下载了4个CRC16校验工具,把帧头AA 3E 00 02 00 00 00 00 06 00输入得出的CRC结果,4个工具得出4个不同的CRC结果,没有一个和C2 8F对的上,唉 我被搞糊涂了。




请教大神来指教一下。。。。这个CRC16是如何得出来的??
QQ截图20150903141602.png

评论
上传
你需要登录之后才能回帖    登录 | 注册
DJI-PSY   2015-9-6 2#
你好,CRC16的函数在官方代码里可以找到。
https://github.com/dji-sdk/Onboa ... c/DJI_Pro_Codec.cpp
一些加密过程的解释:
加密只加密data段
加密之后data段的长度变了,所以帧长度LEN也变了,这样帧头就变了。
所以要生成一个新的帧头的CRC16,
最后再根据新的帧头和加密的data段生成新的CRC32
楼主   2015-9-7 3#
DJI-PSY 发表于 2015-9-6 11:24
你好,CRC16的函数在官方代码里可以找到。
https://github.com/dji-sdk/Onboard-SDK/blob/master/Onboard_S ...
谢谢你的回复,我现在还有一个问题请教你,我已经把官方CRC校验函数拿出来用了,我发现CRC16校验帧头完全正确,但是我用CRC32去校验  帧头(包括CRC16在内)+数据段,发现得出的校验码和飞控发回的校验码不一样,你帮我看看好吗?
这是飞控发给电脑的帧:AA 12 00 22 00 00 00 00 0A 00   2A 8C   03 00    D5 8C CD 34     (2A 8C是CRC16校验码,03 00是data,D5 8C CD 34是CRC32校验码




我把帧头AA 12 00 22 00 00 00 00 0A 00 放到CRC16校验函数中校验得出2A 8C,完全正确,和飞控发给电脑的完全一样........................................................................... crc16.png


但是我我把
AA 12 00 22 00 00 00 00 0A 00   2A 8C   03 00      放到CRC32函数中校验得出的结果2D 02 90 72,和大疆飞控后面的校验码 D5 8C CD 34   完全不一样啊。

QQ截图20150907113400.png
DJI-PSY   2015-9-7 4#
你好请用官方的CRC32函数
楼主   2015-9-7 5#
DJI-PSY 发表于 2015-9-7 20:39
你好请用官方的CRC32函数
你好,我后台就是官方的CRC32校验函数的,没有任何修改,直接使用了这2段函数。
crc32.png crc322.png

DJI-PSY   2015-9-9 6#
你好,输入的数据串pMsg可能有结构体对齐的问题。请问你怎么把字符给进去的?
X43A   2015-9-9 7#
数据帧对其做了没???
收藏 点赞 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表