USB中CRC5的计算方法

本文详细介绍了USB协议中CRC5校验的计算方法,包括CRC5的生成多项式、计算过程及软件抓包中CRC位的表示方式。通过实例讲解了如何进行CRC5的模2除运算,以及如何得到最终的CRC校验值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下,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

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值