阅读:1855回复:14
什么情况下主机才会发送Get_Descriptor命令呢?
我设置好设备后,连接该设备到主机上,用那个BUS Hound 5.0来抓包,得到的情况如下:
Bus Hound 5.00 capture. Complements of www.perisoft.net Device - Device ID (followed by the endpoint for USB devices) (6) Intel(R) 82801DB/DBM USB Universal Host Controller - 24C2 (7) USB Root Hub (8) Intel(R) 82801DB/DBM USB Universal Host Controller - 24C4 (9) USB Root Hub (10) Intel(R) 82801DB/DBM USB Universal Host Controller - 24C7 (11) USB Root Hub Phase - Phase Type CTL USB control transfer DI Data in 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) ------ ----- ------------------------------------- ---------------- ------------------ 11.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 1.1.0(2) 11.0 DI 01 01 01 00 .... 1.2.0 11.0 CTL 23 01 10 00 02 00 00 00 CLEAR FEATURE 3.1.0 11.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 4.1.0 11.0 DI 00 01 00 00 .... 4.2.0 11.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 5.1.0(2) 11.0 DI 01 01 00 00 .... 5.2.0 11.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 7.1.0 11.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 8.1.0 11.0 DI 03 01 10 00 .... 8.2.0 11.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 9.1.0 11.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 10.1.0(2) 11.0 DI 03 01 00 00 .... 10.2.0 11.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 12.1.0 11.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 13.1.0 11.0 DI 03 01 10 00 .... 13.2.0 11.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 14.1.0 11.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 15.1.0 11.0 DI 03 01 00 00 .... 15.2.0 11.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 16.1.0 11.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 17.1.0 11.0 DI 03 01 10 00 .... 17.2.0 11.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 18.1.0 11.0 CTL 23 01 01 00 02 00 00 00 CLEAR FEATURE 19.1.0 感到很疑惑,怎么主机就是不发送Get_Descriptor命令过来呢? 而且BH5.0抓的包怎么我觉得跟USB SPEC不对应呢? bRequest这个字段为04怎么回事GET_STATUS呢, bRequest为00怎么又会既是CLEAR_FEATURE有是SET_FEATURE呢? 谢谢了。请帮忙看看呀。 |
|
沙发#
发布于:2004-04-16 19:35
//bmRequestType bRequest wValue windex wLength
CTL a3 00 00 00 02 00 04 00 GET STATUS 你看:这个是控制请求setup阶段中的8个字节的数据 第一个字节为A3h 二进制为1 01 0,0011 最高位1表示数据阶段的数据传输方向 为设备到主机 下面两位是请求的类别:00为标准 01为类请求 10为厂商定义的请求 其实你捕捉的是集线器的数据而不是设备的数据 其余的低五位表示接受方是设备,接口 或者端点 上面的数据为3,表示其他 第二个字节为00,表示get_status请求 其余的wvalue是根据命令不同而不同,对于get_status为0 windex 表示为端口二的状态 wlength表示返回数据的长度 因为集线器返回端口状态都是四个字节的! |
|
板凳#
发布于:2004-04-16 19:44
啊,太谢谢了。我原来看错了,我从左到右看到的数据。
那我怎么才能捕捉到我的设备连上时,PC发送的命令字呢? 另外,什么情况下PC才会发送Get_Descriptor命令过来呢 谢谢了。 |
|
地板#
发布于:2004-04-16 21:16
设备连接上,如果固件对的话,
主机就会发现,并装上驱动程序 而依照你上面的数据 看来你还没有让主机正确枚举设备 |
|
地下室#
发布于:2004-04-16 21:24
当设备连接上,也就是1.5K的上拉电阻接上时,集线器就会发现设备
然后主机就会发送get_descriptor set_address等命令枚举这个设备 如果成功才会在busound的设备中出现 好像这个时候才会捕捉到属于那个设备的数据。 如果设备有问题,捕捉的时候windows还会强行重新启动! http://www.driverdevelop.com/forum/upload/zhaobeishengcool/2004-04-16_usbmonb.exe 可以看看这个工具,推荐你使! |
|
5楼#
发布于:2004-04-17 12:28
根据我的试验,要能枚举成功,BH才能抓到数据,连枚举都不成功,BH是抓不到数据的,所以你不要期望用BH调试枚举,否则还要USB总线分析仪干嘛。
|
|
|
6楼#
发布于:2004-04-17 17:31
就是就是,而且即使设备是正常的,bushound捕捉数据的时候还会出现让windows重启的现象,真是令人心寒。
上面的那个工具,只要固件不是错的一塌糊涂,还是可以捕捉到一些数据,对分析固件很有帮助 |
|
7楼#
发布于:2004-04-19 13:34
我的理解是,我的设备插上后,主机会发SETUP包过来吧。我这边的USB芯片应该触发中断吧,然后我读出相应的包后,判断,并返回一些东西吧。可是我都收不到Get_Descriptor怎么可能返回我的信息呢?
谢谢了。 请帮忙看看 |
|
8楼#
发布于:2004-04-19 14:44
我的理解是,我的设备插上后,主机会发SETUP包过来吧。我这边的USB芯片应该触发中断吧,然后我读出相应的包后,判断,并返回一些东西吧。可是我都收不到Get_Descriptor怎么可能返回我的信息呢? 你看看硬件连线有没有问题? |
|
|
9楼#
发布于:2004-04-19 15:03
我想弄清楚是不是板子插上去一定要有PC机驱动才能认识我的设备呢?这样的话我就需要先开发PC机的驱动了。可是我个人觉得应该是先由通用的WINDOWS驱动跟我的的设备通信,发送Get_Descriptor然后发送Set_Address命令什么的?可是这些我的设备都收不到呀。好奇怪。
另外,我调固件的时候,在中断里面设了断点。读出来的包是clear_status。这个对吗?还是要马上回应一个什么,然后才会由Get_Descriptor。 谢谢了。 |
|
10楼#
发布于:2004-04-19 17:13
只要USB芯片正常工作,就可以实现连接,PC机上会出现“未知设备类型”的USB设备。
然后就要向主机提供USB设备的描述符,PC能够识别设备,要求提供设备的驱动程序。 |
|
11楼#
发布于:2004-04-19 17:16
对对,我插上我的设备后,PC就发现了一个无法驱动的设备。难道我不需要判断什么就直接发送我的Descriptor到主机去吗?还是要收到包才发送呢?
|
|
12楼#
发布于:2004-04-20 20:58
收到PC机的请求后发送,PC发现有设备插入后就会请求要求提供描述符
例如:80 06 00 01 00 00 12 00 |
|
13楼#
发布于:2004-04-22 10:02
根据我的试验,要能枚举成功,BH才能抓到数据,连枚举都不成功,BH是抓不到数据的,所以你不要期望用BH调试枚举,否则还要USB总线分析仪干嘛。 用BH303是可以的,版本400的好像抓不到,500又可以了 USB分析仪抓到的数据会比BH的更细化、更底层、更详细,不过我也没用过 :D我调枚举都是用BH |
|
14楼#
发布于:2004-04-22 12:29
80 06 00 01 00 00 12 00
我怎么老是收到80 06 00 01 00 00 40 00 那要我怎么回复呢。 谢谢了。 |
|