#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=%
***********************************************************************