阅读:2855回复:26
主机怎么不发INQUIRY命令请求?
bus hound中的数据:
CTL 80 06 00 01 - 00 00 12 00 DI 12 01 10 01 - 00 00 00 10 - 71 04 88 08 - 00 01 00 00 00 01 CTL 80 06 00 02 - 00 00 09 00 DI 09 02 2e 00 - 01 01 00 40 - 32 CTL 80 06 00 02 - 00 00 2e 00 DI 09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 dc a0 b0 00 07 05 - 81 03 10 00 - 0a 07 05 01 - 03 10 00 0a CTL 00 09 01 00 - 00 00 00 00 到这一步主机好像就不发命令请求了, 为什么没有 CDB 12 00 00 00 20 00 20 00 INQUIRY 如果我用usbdebug发送数据bushound接着显示: DO aa aa aa aa - aa aa aa aa - aa aa aa aa - aa aa是发送的数据。 这是怎么回事? 我的descriptor为: USB_DEVICE_DESCRIPTOR DeviceDescr = { sizeof(USB_DEVICE_DESCRIPTOR), 0x01, 0x0110,// 协议版本, 0x00, 0, // 设备子类 0,// 设备协议 0x10,// 端点0最大数据 0x0471,// PHILIPS公司的设备ID 0x0888,// 设备制造商定的产品ID 0x0100,// 设备系列号 0,// iManufacturer 0,// iProduct 0,// iSerialNumber 1 }; USB_CONFIGURATION_DESCRIPTOR ConfigDescr = { sizeof(USB_CONFIGURATION_DESCRIPTOR), 0x02, 0x2e, 1,// 只支持1个接口 1,// 配置值 0,// 字符串描述符指针(无) 0x40,// 自供电 0x32// 最大功耗(100mA) }; USB_INTERFACE_DESCRIPTOR InterfaceDescr = { sizeof(USB_INTERFACE_DESCRIPTOR), 0x04, 0,// 接口数,只有1个 0,// 可选配置,只有1个 0x04, 0x08, 0x04, 0x50, 0// 字符串描述符指针(无) }; //端点1发送描述 USB_ENDPOINT_DESCRIPTOR EP1_TXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), 0x05 0x81,// 端点1IN USB_ENDPOINT_TYPE_INTERRUPT,// 中断传输,=0x03 0x10 10// 传输间隔时间,=10ms }; //端点1接收描述符 USB_ENDPOINT_DESCRIPTOR EP1_RXDescr = { sizeof(USB_ENDPOINT_DESCRIPTOR), 0x05 0x01,// 端点1OUT USB_ENDPOINT_TYPE_INTERRUPT,// 中断传输,=0x03 0x10, 10// 传输间隔时间,=10ms }; |
|
沙发#
发布于:2004-06-09 10:40
你把它改成下面这个:
USB_INTERFACE_DESCRIPTOR InterfaceDescr = { sizeof(USB_INTERFACE_DESCRIPTOR), 0x04, 0,// 接口数,只有1个 0,// 可选配置,只有1个 //0x04, 0x08,//应该为08表示storage设备 0x08, 0x04, 0x50, 0// 字符串描述符指针(无) }; |
|
|
板凳#
发布于:2004-06-09 14:04
你把它改成下面这个: 把0x04改成0x08只是改的端点数啊,我原来的interface descriptor 设置是: bLength 0x09; bDescriptorType 0x04; bInterfaceNumber 0; bAlternateSeting 0; bNumEndpoints 0x04; bInterfaceClass 0x80; bInterfaceSubClass 0x04; bInterfaceProtcol 0x50; iInterface 0; |
|
地板#
发布于:2004-06-09 14:25
说错了:),你把bInterfaceClass 0x80;
改为0x08 [quote把0x04改成0x08只是改的端点数啊,我原来的interface descriptor 设置是: bLength 0x09; bDescriptorType 0x04; bInterfaceNumber 0; bAlternateSeting 0; bNumEndpoints 0x04; bInterfaceClass 0x80; bInterfaceSubClass 0x04; bInterfaceProtcol 0x50; iInterface 0; [/quote] |
|
|
地下室#
发布于:2004-06-09 14:28
另外看你bus hound中的数据:
CTL 80 06 00 02 - 00 00 2e 00 DI 09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 dc a0 b0 00 07 05 - 81 03 10 00 - 0a 07 05 01 - 03 10 00 0a CTL 00 09 01 00 - 00 00 00 00 这个跟你给出来的描述符信息内容不一致呀! |
|
|
5楼#
发布于:2004-06-09 14:30
USB一接上,设备枚举,返回DEVICE DESCRIPTOR,可我的不返回,
请问大概是什么问题? 谢谢 |
|
|
6楼#
发布于:2004-06-09 14:36
说错了:),你把bInterfaceClass 0x80;[/quote] 我打错了 我原来的initerface descriptor中bInterfaceClass 就是 0x08; |
|
7楼#
发布于:2004-06-09 14:44
另外看你bus hound中的数据: 你是不是说 dc a0 b0这三个数应该为08 04 50 ? |
|
8楼#
发布于:2004-06-09 14:46
对,就这个:)
|
|
|
9楼#
发布于:2004-06-09 15:17
我该了但还不行啊
接口插上bus hound数据: CTL 80 06 00 01 - 00 00 12 00 DI 12 01 10 01 - 00 00 00 10 - 71 04 88 08 - 00 01 00 00 00 01 CTL 80 06 00 02 - 00 00 09 00 DI 09 02 2e 00 - 01 01 00 40 - 32 CTL 80 06 00 02 - 00 00 2e 00 DI 09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 08 04 50 00 07 05 - 81 03 10 00 - 0a 07 05 01 - 03 10 00 0a CTL 00 09 01 00 - 00 00 00 00 到这儿就不动了。 我找了一个爱国者的u盘,用hound抓了数据是: CTL 80 06 00 02 00 00 20 00 DI 09 02 20 00 01 01 00 80 32 09 04 00 00 02 08 06 50 00 07 05 - 01 02 40 00 - 00 07 05 82 - 02 40 00 00 CTL 00 09 01 00 - 00 00 00 00 CTL 01 0b 00 00 - 00 00 00 00 CTL a1 fe 00 00 - 00 00 01 00 USTS 04 00 00 80 CTL 02 01 00 00 - 00 00 00 00 CTL a1 fe 00 00 - 00 00 01 00 USTS 04 00 00 80 CTL 02 01 00 00 - 00 00 00 00 CTL a1 fe 00 00 - 00 00 01 00 USTS 04 00 00 80 CTL 02 01 00 00 - 00 00 00 00 DO 55 53 42 43 - 68 ee aa ff - 24 00 00 00 - 80 00 06 12 00 00 00 24 - 00 00 00 00 - 00 00 00 00 - 00 00 00 DI 00 00 02 02 - 1f 00 00 00 - 4d 69 6e 69 - 4b 69 6e 67 20 20 20 20 - 20 20 20 20 - 20 20 20 20 - 20 20 20 20 我把我的descriptor改成和他的一样 CTL 80 06 00 02 - 00 00 2e 00 DI 09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 08 06 50 00 07 05 - 81 02 10 00 - 0a 07 05 01 - 02 10 00 0a CTL 00 09 01 00 - 00 00 00 00 但到这儿还是不动了, 不像爱国者的u盘一样接着有 CTL 01 0b 00 00 - 00 00 00 00 CTL a1 fe 00 00 - 00 00 01 00 ..... 怎么回事啊? |
|
10楼#
发布于:2004-06-09 15:32
仔细看了一下,感觉应该是长度不对,
80 06 00 02 - 00 00 2e 00 要求的2eh,你给的数据是: DI 09 02 2e 00 - 01 01 00 40 - 32 09 04 00 - 00 04 08 04 50 00 07 05 - 81 03 10 00 - 0a 07 05 01 - 03 10 00 0a 才20h,这是第一个。 另外,爱国者的端点是bulk传输,而你的两端点是interrupt,没bulk端点。 我该了但还不行啊 |
|
|
11楼#
发布于:2004-06-09 15:39
另外,奉劝一句,多看看usb协议吧,还有mass storage协议
|
|
|
12楼#
发布于:2004-06-09 16:08
谢谢flyhye回答
我用的是4个endpoint,分别是ep1 IN ,ep1 OUT,ep2 IN , ep2 OUT所以长度就是2e了。 我又找了一个纽曼的U盘抓了一下数据是: CTL 80 06 00 02 - 00 00 27 00 DI 09 02 27 00 - 01 01 00 80 - 32 09 04 00 - 00 03 08 06 50 00 07 05 - 81 02 40 00 - 00 07 05 02 - 02 40 00 00 CTL 80 06 00 03 - 00 00 02 00 DI 04 03 CTL 80 06 00 03 - 00 00 04 00 DI 04 03 09 04 CTL 80 06 03 03 - 09 04 02 00 DI 22 03 CTL 80 06 03 03 - 09 04 22 00 DI 22 03 33 00 - 31 00 35 00 - 43 00 31 00 - 37 00 30 00 43 00 34 00 - 30 00 33 00 - 41 00 41 00 - 41 00 44 00 CTL 00 09 01 00 - 00 00 00 00 CTL 00 09 01 00 - 00 00 00 00 可以看到这种U盘有3个endpoint,不过在到 CTL 00 09 01 00 - 00 00 00 00之前比我的有多了一段数据 CTL 80 06 00 03 - 00 00 02 00这个命令是表示设备类型是string型的 我已把我的端点改为BULK了 但还是老问题啊? |
|
13楼#
发布于:2004-06-09 16:11
usb协议和mass storage协议我已经看过了,现在也是在一边拿着协议,一边在改我的程序,但感觉真的到实际中时,还是有很多困难。
|
|
14楼#
发布于:2004-06-09 16:19
奇怪,为什么你抓到的数据怎么都不能超过20h???
明明是27,回应是20;明明是22,也回应只有20 用的是bushound吧,你bushound设置是不是限制了? 你把buffersize和maxphase设大点。
|
|
|
15楼#
发布于:2004-06-09 16:36
谢谢提醒
是bus hound 的问题 我把它调大点了这是抓的数据: CTL 80 06 00 01 - 00 00 12 00 DI 12 01 10 01 - 00 00 00 10 - 71 04 88 08 - 00 01 00 00 00 01 CTL 80 06 00 02 - 00 00 09 00 DI 09 02 2e 00 - 01 01 00 40 - 32 CTL 80 06 00 02 - 00 00 2e 00 DI 09 02 2e 00 - 01 01 00 40 -32 09 04 00 -00 04 08 06 50 00 07 05 - 81 02 10 00 - 00 07 05 01 - 02 10 00 00 07 05 82 02 - 40 00 00 07 - 05 02 02 40 - 00 00 CTL 00 09 01 00 - 00 00 00 00 就停在这了,不知怎么回事? |
|
16楼#
发布于:2004-06-09 16:50
仔细看看端点描述符第4位,怎么可能都是02呢?
不说了,又烦又累! :) 谢谢提醒 |
|
|
17楼#
发布于:2004-06-09 17:36
4个端点原来都是interrupte类型的,但主机还是不发INQURY命令,
后来我看了爱国者的U盘它只用了2个端点,而且都是BULK类型的 所以我就把我的全都改成02了。但还是不行,那我这4个端点应该怎么设呢? |
|
18楼#
发布于:2004-06-09 18:12
CONFIG DESCRIPTOR 里的WTOTALLENGTH 不是等于
SIZEOF(CONFIG)+INTERFACENUM*SIZEOF(INTERFACE) +ENDPTNUM*SIZEOF(ENDPT)吗? 但我看见有的把EPI IN和EPI OUT算为一个端点了,是这样吗? |
|
|
19楼#
发布于:2004-06-09 18:18
他们的端点一个是EP1,一个是EP2,你的不是,你把2E改小一点试试看,不知成不。
|
|
|
上一页
下一页