返回该小组首页 回复主题
kaiserempire

kaiserempire

小组等级:     E币:143  (E币换礼)

#1楼主:关于hid设备枚举奇怪现象

文章发表于:2008-08-06 11:28

最近一直在弄hid设备,采用的是ST给的标准例程。但在实验过程中发现ST的设备在第一次插入xp主机时(VID,PID,SERNUMBER从未在主机上出现过即可,换过多台机器,现象都这样),会出现设备无法启动显现,再插一次现象消失(以后都可以了,重启也没问题)。

下面是我在BusHood上抓取的第一次,第二次的USB信息以及我自己从C-M3上走得串口调试信息。

附件里是文本格式的数据,请大家帮我看下,多谢。

=============================================

Bus Hound 5.00 capture. Complements of www.perisoft.net

PID2009,第一次插入总线数据

  Device - Device ID (followed by the endpoint for USB devices)
            (9) Intel(R) 82801G (ICH7 Family) USB Universal Host Controller - 27C8
            (10) USB Root Hub
            (24) USB 人体学输入设备
  Phase  - Phase Type
            CTL   USB control transfer      
            DI    Data in                   
            LEN   Data length               
            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)
------  -----  ------------------------  ----------------  ------------------
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS               1.1.0(2)    
  10.0  LEN    04 00 00 00               4                        1.2.0       
  10.0  DI     01 01 01 00               ....                     1.3.0       
  10.0  CTL    23 01 10 00  01 00 00 00  CLEAR FEATURE            3.1.0       
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS               4.1.0(2)    
  10.0  LEN    04 00 00 00               4                        4.2.0       
  10.0  DI     01 01 00 00               ....                     4.3.0       
  10.0  CTL    23 03 04 00  01 00 00 00  SET FEATURE              6.1.0       
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS               7.1.0       
  10.0  LEN    04 00 00 00               4                        7.2.0       
  10.0  DI     03 01 10 00               ....                     7.3.0       
  10.0  CTL    23 01 14 00  01 00 00 00  CLEAR FEATURE            8.1.0       
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS               9.1.0(2)    
  10.0  LEN    04 00 00 00               4                        9.2.0       
  10.0  DI     03 01 00 00               ....                     9.3.0       
  10.0  CTL    23 03 04 00  01 00 00 00  SET FEATURE             11.1.0       
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS              12.1.0       
  10.0  LEN    04 00 00 00               4                       12.2.0       
  10.0  DI     03 01 10 00               ....                    12.3.0       
  10.0  CTL    23 01 14 00  01 00 00 00  CLEAR FEATURE           13.1.0       
  10.0  CTL    80 06 00 03  00 00 ff 00  GET DESCRIPTOR          14.1.0       
  10.0  LEN    04 00 00 00               4                       14.2.0       
  10.0  DI     04 03 09 04               ....                    14.3.0       
  10.0  CTL    80 06 03 03  09 04 ff 00  GET DESCRIPTOR          15.1.0       
  10.0  LEN    1e 00 00 00               30                      15.2.0       
  10.0  DI     1e 03 50 00  43 00 2d 00  ..P.C.-.                15.3.0       
               50 00 61 00  79 00 54 00  P.a.y.T.                15.3.8       
               65 00 72 00  6d 00 69 00  e.r.m.i.                15.3.16      
               6e 00 61 00  6c 00        n.a.l.                  15.3.24      
  10.0  CTL    80 06 00 02  00 00 ff 00  GET DESCRIPTOR          16.1.0       
  10.0  LEN    22 00 00 00               34                      16.2.0       
  10.0  DI     09 02 22 00  01 01 00 c0  ..".....                16.3.0       
               32 09 04 00  00 01 03 00  2.......                16.3.8       
               00 00 09 21  00 01 00 01  ...!....                16.3.16      
               22 22 00 07  05 81 03 40  "".....@                16.3.24      
               00 20                     .                       16.3.32      
  10.0  CTL    a3 00 00 00  02 00 04 00  GET STATUS              17.1.0       
  10.0  LEN    04 00 00 00               4                       17.2.0       
  10.0  DI     00 01 00 00               ....                    17.3.0       
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS              18.1.0(2)    
  10.0  LEN    04 00 00 00               4                       18.2.0       
  10.0  DI     03 01 00 00               ....                    18.3.0       
  10.0  CTL    23 03 04 00  01 00 00 00  SET FEATURE             20.1.0       
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS              21.1.0       
  10.0  LEN    04 00 00 00               4                       21.2.0       
  10.0  DI     03 01 10 00               ....                    21.3.0       
  10.0  CTL    23 01 14 00  01 00 00 00  CLEAR FEATURE           22.1.0       
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS              23.1.0       
  10.0  LEN    04 00 00 00               4                       23.2.0       
  10.0  DI     03 01 00 00               ....                    23.3.0       
  24.0  CTL    80 06 00 01  00 00 12 00  GET DESCRIPTOR          24.1.0       
  24.0  USTS   05 00 00 c0               no response             24.2.0       
  10.0  CTL    23 01 01 00  01 00 00 00  CLEAR FEATURE           25.1.0       
=====================================================================================
Reset__
Reset__
Reset__
%=GetDeviceDesp=%
$$InSentDataStage$$       <--进入发送函数
%=GetDeviceDesp=%
%=DataSentOver=%       <--离开发送函数
$$InSentDataStage$$
%=DataSentOver=%
*******************************************************************
Reset__
Set_Address__
                                    <--获得的usb地址
%=SETADDR=%          <--地址设置成功
*******************************************************************
%=GetDeviceDesp=%    <--获取设备描述符
$$InSentDataStage$$
%=GetDeviceDesp=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
*******************************************************************
%=GetConfigDesp=%     <--获取配置描述符
$$InSentDataStage$$
%=GetConfigDesp=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
******************************************************************
%=GetLanString=%      <--获取语言描述符
$$InSentDataStage$$
%=GetLanString=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
******************************************************************
%=GetSerString=%    <--获取设备串号描述符
$$InSentDataStage$$
%=GetSerString=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
******************************************************************
%=GetConfigDesp=%  
$$InSentDataStage$$
%=GetConfigDesp=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
$$InSentDataStage$$   <--至此,大约2秒后,Bushood中显示No response

======================================================

下面是第二次插入后采集的数据,正常枚举。

Bus Hound 5.00 capture. Complements of www.perisoft.net

PID2009,第二次插入总线数据

  Device - Device ID (followed by the endpoint for USB devices)
            (9) Intel(R) 82801G (ICH7 Family) USB Universal Host Controller - 27C8
            (10) USB Root Hub
            (24) USB 人体学输入设备
            (25)
  Phase  - Phase Type
            CTL   USB control transfer      
            DI    Data in                   
            LEN   Data length               
            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)
------  -----  ------------------------  ----------------  ------------------
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS               1.1.0(2)    
  10.0  LEN    04 00 00 00               4                        1.2.0       
  10.0  DI     01 01 01 00               ....                     1.3.0       
  10.0  CTL    23 01 10 00  01 00 00 00  CLEAR FEATURE            3.1.0       
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS               4.1.0(2)    
  10.0  LEN    04 00 00 00               4                        4.2.0       
  10.0  DI     01 01 00 00               ....                     4.3.0       
  10.0  CTL    23 03 04 00  01 00 00 00  SET FEATURE              6.1.0       
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS               7.1.0       
  10.0  LEN    04 00 00 00               4                        7.2.0       
  10.0  DI     03 01 10 00               ....                     7.3.0       
  10.0  CTL    23 01 14 00  01 00 00 00  CLEAR FEATURE            8.1.0       
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS               9.1.0(2)    
  10.0  LEN    04 00 00 00               4                        9.2.0       
  10.0  DI     03 01 00 00               ....                     9.3.0       
  10.0  CTL    23 03 04 00  01 00 00 00  SET FEATURE             11.1.0       
  10.0  CTL    a3 00 00 00  01 00 04 00  GET STATUS              12.1.0       
  10.0  LEN    04 00 00 00               4                       12.2.0       
  10.0  DI     03 01 10 00               ....                    12.3.0       
  10.0  CTL    23 01 14 00  01 00 00 00  CLEAR FEATURE           13.1.0       
  10.0  CTL    80 06 00 03  00 00 ff 00  GET DESCRIPTOR          14.1.0       
  10.0  LEN    04 00 00 00               4                       14.2.0       
  10.0  DI     04 03 09 04               ....                    14.3.0       
  10.0  CTL    80 06 03 03  09 04 ff 00  GET DESCRIPTOR          15.1.0       
  10.0  LEN    1e 00 00 00               30                      15.2.0       
  10.0  DI     1e 03 50 00  43 00 2d 00  ..P.C.-.                15.3.0       
               50 00 61 00  79 00 54 00  P.a.y.T.                15.3.8       
               65 00 72 00  6d 00 69 00  e.r.m.i.                15.3.16      
               6e 00 61 00  6c 00        n.a.l.                  15.3.24      
  10.0  CTL    80 06 00 02  00 00 ff 00  GET DESCRIPTOR          16.1.0       
  10.0  LEN    22 00 00 00               34                      16.2.0       
  10.0  DI     09 02 22 00  01 01 00 c0  ..".....                16.3.0       
               32 09 04 00  00 01 03 00  2.......                16.3.8       
               00 00 09 21  00 01 00 01  ...!....                16.3.16      
               22 22 00 07  05 81 03 40  "".....@                16.3.24      
               00 20                     .                       16.3.32      
  10.0  CTL    a3 00 00 00  02 00 04 00  GET STATUS              17.1.0       
  10.0  LEN    04 00 00 00               4                       17.2.0       
  10.0  DI     00 01 00 00               ....                    17.3.0       
  24.0  CTL    80 06 00 01  00 00 12 00  GET DESCRIPTOR          18.1.0       
  24.0  LEN    12 00 00 00               18                      18.2.0       
  24.0  DI     12 01 10 01  00 00 00 40  .......@                18.3.0       
               52 ef 09 20  27 02 01 02  R.. '...                18.3.8       
               03 01                     ..                      18.3.16      
  24.0  CTL    80 06 00 02  00 00 09 00  GET DESCRIPTOR          19.1.0       
  24.0  LEN    09 00 00 00               9                       19.2.0       
  24.0  DI     09 02 22 00  01 01 00 c0  ..".....                19.3.0       
               32                        2                       19.3.8       
  24.0  CTL    80 06 00 02  00 00 22 00  GET DESCRIPTOR          20.1.0       
  24.0  LEN    22 00 00 00               34                      20.2.0       
  24.0  DI     09 02 22 00  01 01 00 c0  ..".....                20.3.0       
               32 09 04 00  00 01 03 00  2.......                20.3.8       
               00 00 09 21  00 01 00 01  ...!....                20.3.16      
               22 22 00 07  05 81 03 40  "".....@                20.3.24      
               00 20                     .                       20.3.32      
  24.0  CTL    00 09 01 00  00 00 00 00  SET CONFIG              21.1.0       
  24.0  CTL    21 0a 00 00  00 00 00 00  SET IDLE                22.1.0       
  24.0  USTS   04 00 00 c0               stall pid               22.2.0       
  24.0  CTL    81 06 00 22  00 00 62 00  GET DESCRIPTOR          23.1.0       
  24.0  LEN    22 00 00 00               34                      23.2.0       
  24.0  DI     06 a0 ff 09  01 a1 01 09  ........                23.3.0       
               02 a1 00 06  a1 ff 09 03  ........                23.3.8       
               09 04 15 80  25 7f 35 00  ....%.5.                23.3.16      
               45 ff 75 08  95 40 81 02  E.u..@..                23.3.24      
               c0 c0                     ..                      23.3.32      
==================================================================================
Reset__
Reset__
Reset__
%=GetDeviceDesp=%
$$InSentDataStage$$
%=GetDeviceDesp=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
*******************************************************************************
Reset__
Set_Address__

%=SETADDR=%
*******************************************************************************
%=GetDeviceDesp=%
$$InSentDataStage$$
%=GetDeviceDesp=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
*******************************************************************************
%=GetConfigDesp=%
$$InSentDataStage$$
%=GetConfigDesp=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
******************************************************************************
%=GetLanString=%
$$InSentDataStage$$
%=GetLanString=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
******************************************************************************
%=GetSerString=%
$$InSentDataStage$$
%=GetSerString=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
*******************************************************************************
%=GetConfigDesp=%
$$InSentDataStage$$
%=GetConfigDesp=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
******************************************************************************
%=GetLanString=%
$$InSentDataStage$$
%=GetLanString=%
%=DataSentOver=%
$$InSentDataStage$$
%=DataSentOver=%
***********************************************************************

kaiserempire

   小组等级:    E币:143  (E币换礼)

#2

文章发表于:2008-08-06 16:04

终于搞定了,xp不知道为什么在获取字符串描述符时给了我个0xEE的偏移,导致我的CM3直接跑飞了~

computer00

   小组等级:    E币:9832  (E币换礼)

#3

文章发表于:2008-08-06 21:45

嘿嘿……说明你的程序处理不完善...我昨天调试时也收到一个索引为0xEE的字符串请求,不知道怎么回事,就出现过一次,后来就没了。当时我的程序反应是“未定义的字符串索引值”。

kaiserempire

   小组等级:    E币:143  (E币换礼)

#4

文章发表于:2008-08-07 13:49

恩,我这里就只有第一次插入时会这个样。
虽然不知道为什么xp会发送0xee,不过现在设备终于能启动了~~

总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML