zhiyuan
驱动牛犊
驱动牛犊
  • 注册日期2003-03-20
  • 最后登录2003-10-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1894回复:3

关于usb的crc校验问题

楼主#
更多 发布于:2003-05-29 11:14
我对usb的crc校验一直搞不懂:
例如:addr=3,endpoint=2,计算出来的crc是0xf,到底是怎么算的呢?
一个连续的比特流是这样的:01 e1 03 79
表示同步码,pid,地址,端点,crc5
这个crc到底是怎么算的呢?
生成多项式是X^5+X^2+1
iamchine
驱动小牛
驱动小牛
  • 注册日期2002-11-18
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-29 11:37
把同步去掉,这是一个OUT令牌包:e1 03 79
二进制:1110 0001   0000 0011   0111 1001
按USB规范,LSb在前,即 (1000 0111)  (1100 000 0) (1001 1110)
再按Token包定义:(1000 0111) (1100 000) (0100) (11110)
PID=0001 ~PID=1110即OUT TOKEN
ADDR=000 0011即3
EP=0010即2
CRC5=01111即0xF
zhiyuan
驱动牛犊
驱动牛犊
  • 注册日期2003-03-20
  • 最后登录2003-10-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-29 14:39
谢谢iamchine
我今天算了一下,addr=3,endpoint=2时crc应该时0x1e
即:1 1110
按照usb的crc规范,好像是高位在前,这和别的正好相反,因此得到
(1100 000) (0100) (11110)
 addr       endp    crc5

iamchine
驱动小牛
驱动小牛
  • 注册日期2002-11-18
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-29 15:01
不会吧?!USB规范里那章说了CRC是MSb在前?好像它的比特流都是LSb在前啊。是不是计算还有问题?按你前一次计算结果倒是对的
游客

返回顶部