打印
[数据传输]

USB的CRC5校验疑惑

[复制链接]
4193|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lykiller 于 2015-8-14 17:30 编辑

为了 CRC 的发生和校检,发生器和检验器里的移位寄存器置成为全 1型。对于每个被发送或者被收到的数据位,当前余项的最高一位和数据位进行异或( XOR ),然后,余项是左移 1 位,并且,最低一位置零。如果异或的结果是 1 ,余项和生成多项式作异或。当检查的字段最后的一位被发送的时候,发生器里的 CRC 被颠倒,再以最高位( MSb )在前发给检验器。
以上摘自USB2.0协议层
对**crc校验的步骤我的理解是,
一、5位CRC校验寄存器全置1,
二、数据每发送一位,该位与CRC校验寄存器首位异或,之后CRC校验寄存器左移一位,并用0补位,
三、如果二中异或的结果是1,则CRC校验寄存器与生成多项式(即00101)异或
四、重复二,三步骤,直到发送完最后一个数据
五、将最后的CRC校验寄存器取反,则即为发送的CRC(MSB在前)

但是楼主用上述个人理解的方法手算出的CRC总是不对,求大神来答疑解惑

相关帖子

沙发
lykiller|  楼主 | 2015-8-14 17:24 | 只看该作者
本帖最后由 lykiller 于 2015-9-1 09:23 编辑

给出一个从USB通行中实际采到的SOF数据串,
sync+pid+帧数+crc5+eop (之前为sync+sof+crc5+eop,是有误的)
pid:10100101     帧数:11010011011   crc5:01111
其中发送的帧数为11位,低位在前,代表的数据为6CBh,   
crc5为5位,高位在前,代表的数据是应为0Fh,但是截图中显示的为1Eh(LSB)

另附截图蓝色为USB+,黄色为USB-,上述的数据楼主已进行了NRZI解码

QQ截图20150814172312.jpg (121.5 KB )

QQ截图20150814172312.jpg

使用特权

评论回复
板凳
lykiller|  楼主 | 2015-8-14 17:27 | 只看该作者
lykiller 发表于 2015-8-14 17:24
给出一个从USB通行中实际采到的数据串,
sync+sof+crc5+eop
sof:11010011011   crc5:01111

对了,我按照我的理解,11010011011计算出的CRC是00011,取反后是11100,和实际的发送值01111差远了。。。

求大神解答啊

使用特权

评论回复
地板
lykiller|  楼主 | 2015-8-17 09:16 | 只看该作者
跪求大神解答

使用特权

评论回复
5
hevry| | 2015-8-21 20:39 | 只看该作者
楼主的NRZI解码有问题,SOF的PID应该是0xA5
对应到波形应该是
10100101....

使用特权

评论回复
6
lykiller|  楼主 | 2015-9-1 10:08 | 只看该作者
hevry 发表于 2015-8-21 20:39
楼主的NRZI解码有问题,SOF的PID应该是0xA5
对应到波形应该是
10100101....

图中的SOF的PID确实为0xA5,即10100101,我是把PID和帧数搞混了,现在已经做了更正,感谢坛友的帮助

使用特权

评论回复
7
BROQ| | 2017-9-9 18:57 | 只看该作者
按网上的算法,crc5,sof包算的都不对啊,但是in包,out包算的是对的。我也不知道怎么回事

使用特权

评论回复
8
BROQ| | 2017-9-10 14:47 | 只看该作者
数据采集错了吧,6CB应该是1739帧sof包,我采集的这一包的数据是A5 CB 3E,所以crc应该是00111

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝