USB中CRC5的计算方法

记录一下,CRC计算的方法,防止遗忘,以USB中CRC5计算为例。

xxxxxxxxB 说明xxxxxxxx是二进制数。

USB中CRC5的使用主要用于令牌包Setup,Out,In的CRC区域。CRC保护的数据段为非PID的数据段,

在如图所示的数据包类型里,即地址段。

假设有一个Setup包的地址区域,设备地址为0x20,端点为4,那么它的bit序(lsb在前)为00000100010B记为A。

0000000B,CRC5的生成多项式为G(X)= X^5 + X^2 + 1,它所对应的二进制表示为100101B。

开始计算CRC的被除数。A左移五位,低位补0。加上一个系数全1的4(生成多项式的阶数 - 1)阶多项式的二进制表示,此处为1111 1000 0000 0000B,从而得到被除数为1111 1100 0100 0000B。

开始用被除数模2除以生成多项式的二进制表示,模2除即异或运算,详细可以百度下。

这里即1111 1100 0100 0000B除以100101B,得到的余数的首部为0,则左移一位;如果首部为1,则除以100101B;直到余数小于除数100101B,再对此刻得到的余数按位求反,即为最终的CRC检验数,五个bit。

有些软件抓包比如说最后的CRC位计算为01000B,但是软件是会按MSB在前来显示数据,所以就会变成00010,软件会自己补齐低位的0,变为0x10

 

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值