新人学习USB,出现枚举问题,请高手帮忙!

[复制链接]
12670|9
 楼主| jjphero 发表于 2011-11-29 09:20 | 显示全部楼层 |阅读模式
大家好,我初次接触USB,用的是ATmel公司的AT90USB162单片机作为USB设备,希望将设备配置成鼠标,这样可以避免驱动的编写,但是在枚举过程出现问题,以下是用Bus Hound抓取到的设备插入USB接口后的枚举过程:
Bus Hound 6.01 capture on Windows XP Service Pack 3 (x86). Complements of www.perisoft.net
  Device - Device ID (followed by the endpoint for USB devices)
            (18) JTAGICE mkII
            (19) USB 人体学输入设备
            (20) USB 人体学输入设备
            (21) HID-compliant mouse
  Phase  - Phase Type
            CTL   USB control transfer      
            IN    Data in transfer           
            USTS  USB status                 
  Data   - Hex dump of the data transferred
  Descr  - Description of the phase
  Cmd... - Position in the captured data

Device  Phase  Data                                                Description       Cmd.Phase.Ofs(rep)
------  -----  --------------------------------------------------  ----------------  ------------------
  19.0  CTL    80 06 00 03  00 00 ff 00                            GET DESCRIPTOR           1.1.0(2)     
  19.0  IN      04 03 09 04                                         ....                     1.2.0        
  19.0  CTL    80 06 02 03  09 04 ff 00                            GET DESCRIPTOR           2.1.0(2)     
  19.0  IN      16 03 69 00  53 00 43 00  4f 00 50 00  45 00 20 00  ..i.S.C.O.P.E. .         2.2.0        
                    55 00 53 00  42 00                                  U.S.B.                   2.2.16      
  19.0  CTL    80 06 00 01  00 00 12 00                            GET DESCRIPTOR           5.1.0        
  19.0  IN      12 01 00 02  00 00 00 40  eb 03 13 20  00 01 01 02  .......@... ....         5.2.0        
                    03 01                                               ..                       5.2.16      
  19.0  CTL    80 06 00 02  00 00 09 00                            GET DESCRIPTOR           6.1.0        
  19.0  IN      09 02 22 00  01 01 00 80  64                        ..".....d                6.2.0        
  19.0  CTL    80 06 00 02  00 00 22 00                            GET DESCRIPTOR           7.1.0        
  19.0  IN      09 02 22 00  01 01 00 80  64 09 04 00  00 01 03 00  ..".....d.......         7.2.0        
                   02 00 09 21  11 01 00 01  22 34 00 07  05 81 03 08  ...!...."4......         7.2.16      
                   00 02                                               ..                       7.2.32      
  19.0  CTL    00 09 01 00  00 00 00 00                            SET CONFIG               8.1.0        
  19.0  CTL    21 0a 00 00  00 00 00 00                            SET IDLE                 9.1.0        
  19.0  CTL    81 06 00 22  00 00 74 00                            GET DESCRIPTOR          10.1.0(3)     
  19.0  USTS   c0000004                                            stall pid               10.2.0      
我又特意用一个USB鼠标作为对比,以下是鼠标的枚举数据:
Bus Hound 6.01 capture on Windows XP Service Pack 3 (x86). Complements of www.perisoft.net
  Device - Device ID (followed by the endpoint for USB devices)
            (18) JTAGICE mkII
            (19) USB 人体学输入设备
            (20) USB 人体学输入设备
            (21) HID-compliant mouse
  Phase  - Phase Type
            CTL   USB control transfer      
            IN    Data in transfer           
            USTS  USB status                 
  Data   - Hex dump of the data transferred
  Descr  - Description of the phase
  Cmd... - Position in the captured data

Device  Phase  Data                                                Description       Cmd.Phase.Ofs(rep)
------  -----  --------------------------------------------------  ----------------  ------------------
  20.0  CTL    80 06 00 03  00 00 ff 00                            GET DESCRIPTOR           1.1.0(2)     
  20.0  IN      04 03 09 04                                         ....                     1.2.0        
  20.0  CTL    80 06 02 03  09 04 ff 00                            GET DESCRIPTOR           2.1.0(2)     
  20.0  IN      24 03 55 00  53 00 42 00  20 00 4f 00  50 00 54 00  $.U.S.B. .O.P.T.         2.2.0        
                   49 00 43 00  41 00 4c 00  20 00 4d 00  4f 00 55 00  I.C.A.L. .M.O.U.         2.2.16      
                   53 00 45 00                                         S.E.                     2.2.32      
  20.0  CTL    80 06 00 01  00 00 12 00                            GET DESCRIPTOR           5.1.0        
  20.0  IN      12 01 10 01  00 00 00 08  3a 09 10 25  00 01 01 02  ........:..%....         5.2.0        
                    00 01                                               ..                       5.2.16      
  20.0  CTL    80 06 00 02  00 00 09 00                            GET DESCRIPTOR           6.1.0        
  20.0  IN      09 02 22 00  01 01 04 a0  32                        ..".....2                6.2.0        
  20.0  CTL    80 06 00 02  00 00 22 00                            GET DESCRIPTOR           7.1.0        
  20.0  IN      09 02 22 00  01 01 04 a0  32 09 04 00  00 01 03 01  ..".....2.......         7.2.0        
                   02 00 09 21  11 01 00 01  22 3e 00 07  05 81 03 04  ...!....">......         7.2.16      
                   00 0a                                               ..                       7.2.32      
  20.0  CTL    00 09 01 00  00 00 00 00                            SET CONFIG               8.1.0        
  20.0  CTL    21 0a 00 00  00 00 00 00                            SET IDLE                 9.1.0        
  20.0  USTS   c0000004                                            stall pid                9.2.0        
  20.0  CTL    81 06 00 22  00 00 7e 00                            GET DESCRIPTOR          10.1.0        
  20.0  IN     05 01 09 02  a1 01 05 09  19 01 29 03  15 00 25 01  ..........)...%.        10.2.0        
                  95 03 75 01  81 02 95 01  75 05 81 03  05 01 09 01  ..u.....u.......        10.2.16      
                  a1 00 09 30  09 31 15 81  25 7f 75 08  95 02 81 06  ...0.1..%.u.....        10.2.32      
                  c0 09 38 15  81 25 7f 75  08 95 01 81  06 c0        ..8..%.u......          10.2.48      
  20.0  CTL    80 06 00 01  00 00 12 00                            GET DESCRIPTOR          11.1.0        
  20.0  IN     12 01 10 01  00 00 00 08  3a 09 10 25  00 01 01 02  ........:..%....        11.2.0        
                  00 01                                               ..                      11.2.16      
  20.0  CTL    80 06 00 02  00 00 09 00                            GET DESCRIPTOR          12.1.0        
  20.0  IN     09 02 22 00  01 01 04 a0  32                        ..".....2               12.2.0        
  20.0  CTL    80 06 00 02  00 00 22 00                            GET DESCRIPTOR          13.1.0        
  20.0  IN     09 02 22 00  01 01 04 a0  32 09 04 00  00 01 03 01  ..".....2.......        13.2.0        
                  02 00 09 21  11 01 00 01  22 3e 00 07  05 81 03 04  ...!....">......        13.2.16      
                  00 0a                                               ..                      13.2.32      
  20.0  CTL    00 09 01 00  00 00 00 00                            SET CONFIG              14.1.0        
  20.0  CTL    21 0a 00 00  00 00 00 00                            SET IDLE                15.1.0        
  20.0  USTS   c0000004                                            stall pid               15.2.0        
  20.0  CTL    81 06 00 22  00 00 7e 00                            GET DESCRIPTOR          16.1.0        
  20.0  IN     05 01 09 02  a1 01 05 09  19 01 29 03  15 00 25 01  ..........)...%.        16.2.0        
                  95 03 75 01  81 02 95 01  75 05 81 03  05 01 09 01  ..u.....u.......        16.2.16      
                  a1 00 09 30  09 31 15 81  25 7f 75 08  95 02 81 06  ...0.1..%.u.....        16.2.32      
                  c0 09 38 15  81 25 7f 75  08 95 01 81  06 c0        ..8..%.u......          16.2.48      
  20.1  IN     00 f1 01 00                                         ....                    17.1.0         
我比较了两者的数据,发现自己的设备在进行到USTS   c0000004   stall pid 这个步骤就停止了,很奇怪不知道怎么回事?也不清楚USTS   c0000004   stall pid是什么意思?请哪位高手指点一下,告诉我是哪里的问题?应该如何修改我的固件程序?谢谢了!
pingis58 发表于 2011-11-29 19:09 | 显示全部楼层
我的也有BUS HOUND测试 了,很奇怪,第一个包为什么会是
CTL    80 06 00 03  00 00 ff 00                            GET DESCRIPTOR           1.1.0(2)     
  19.0  IN      04 03 09 04                                         ....                     1.2.0        
  19.0  CTL    80 06 02 03  09 04 ff 00                            GET DESCRIPTOR           2.1.0(2)     
  19.0  IN      16 03 69 00  53 00 43 00  4f 00 50 00  45 00 20 00  ..i.S.C.O.P.E. .         2.2.0        
                    55 00 53 00  42 00                                  U.S.B.                   2.2.16      


而不是读设备描述符。不过我不是做鼠标,只是给自己设备摸拟通信用
pingis58 发表于 2011-11-29 19:12 | 显示全部楼层
本帖最后由 pingis58 于 2011-11-29 19:14 编辑

你那个难道是端点停滞的握手包?后面的()内的3表示重发 了三次,错误三次就停了?
 楼主| jjphero 发表于 2011-11-30 07:44 | 显示全部楼层
是的,我也很奇怪,但是现在问题不在这里,而是在后面啊! 2# pingis58
 楼主| jjphero 发表于 2011-11-30 08:10 | 显示全部楼层
你所说的端点停滞的握手包具体是指什么呢?难道就是主机发出的c0000004??那意思是我的固件程序需要针对c0000004做相应的处理?那该如何回应主机呢?谢谢! 3# pingis58
pingis58 发表于 2011-11-30 13:20 | 显示全部楼层
我也不太明白,根据查资料的瞎猜测,USTS应该只是显示的一个USB状态。这个STALL你可以查USB2.0协议,大致估计可以是访问你的端点出问题了,查看下是否设置错了。仅共参考
 楼主| jjphero 发表于 2011-11-30 16:44 | 显示全部楼层
谢谢你的帮助! 6# pingis58
xiaozhu2014 发表于 2016-11-10 11:13 | 显示全部楼层
楼主最后那个问题怎么解决的
jiayou0054 发表于 2016-11-28 22:00 | 显示全部楼层
81 06 00 22 ..... 好像是索要报表描述符,这可是重点啊。你没有返回。
小先锋 发表于 2016-12-5 09:50 | 显示全部楼层
观摩,学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部