阅读:1776回复:11
困扰了几天的问题,谁能帮我看一下?
我现在想做一个U盘,用的是D12,已经能在设备管理器里面发现D12,用USBdebug传输数据也正常,但在windows的浏览器里面看不到U盘。用usb 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 CTL 80 06 00 02 - 00 00 09 00 DI 09 02 2e 00 - 01 01 00 c0 - CTL 80 06 00 02 - 00 00 2e 00 DI 09 02 2e 00 - 01 01 00 c0 - 32 09 04 00 - 00 04 08 06 50 00 07 05 - 81 03 40 00 - 0a 07 05 01 - 03 40 00 0a 07 05 82 02 - 40 00 00 07 - 05 02 02 40 - 00 00 CTL 00 09 01 00 - 00 00 00 00 //set-configuration 到这就停止了 主机不再发送请求了.,这是怎么回事啊? 我用bus hound抓了一下爱国者的u盘,它接下去是set-interface请求,然后就用INQURY命令了,就可以在windows浏览器中看到u盘符了。 前天我也发贴问了,flyhye也热心解答了,但我发现我的问题是主机发完set-configuration请求后。就不发set-interface请求了。我猜问题可能是主机发完set-configuration后usb device没有返回正确的握手包,所以host就不发set-interface请求了,也就发不了inqury请求。 如果问题真是这样,我就不知道usb device为什么没有正确的返回。 |
|
沙发#
发布于:2004-06-11 09:13
我现在想做一个U盘,用的是D12,已经能在设备管理器里面发现D12,用USBdebug传输数据也正常,但在windows的浏览器里面看不到U盘。用usb hound抓了一下数据如下: set-configuration请求后有没有发0包? |
|
板凳#
发布于:2004-06-11 09:23
从bus hound上看是没有发0包
但我用bus hound抓了爱国者的它的数据如下: CTL 80 06 00 01 - 00 00 12 00 DI 12 01 10 01 - 00 00 00 08 - d1 0e 80 66 - 00 01 01 02 00 01 CTL 80 06 00 02 - 00 00 09 00 DI 09 02 20 00 - 01 01 00 80 - 32 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 //它这也没有发0包就直接发 CTL 01 0b 00 00 - 00 00 00 00 //set-interface了 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 ......... 爱国者的也没法0包啊? |
|
地板#
发布于:2004-06-11 10:08
0包是看不到的
|
|
地下室#
发布于:2004-06-11 10:38
那为什么host不发送set-interface请求啊?!
搞了几天了,没进展 :( |
|
5楼#
发布于:2004-06-11 10:41
我用usbview抓的数据如下:
usbview中端点的能传输的最大长度两次显示的不一样? Device Descriptor: bcdUSB: 0x0110 bDeviceClass: 0x00 bDeviceSubClass: 0x00 bDeviceProtocol: 0x00 bMaxPacketSize0: 0x10 (16) idVendor: 0x0471 (Philips) idProduct: 0x0888 bcdDevice: 0x0100 iManufacturer: 0x00 iProduct: 0x00 iSerialNumber: 0x00 bNumConfigurations: 0x01 ConnectionStatus: DeviceConnected Current Config Value: 0x01 Device Bus Speed: Full Device Address: 0x02 Open Pipes: 4 Endpoint Descriptor: bEndpointAddress: 0x81 Transfer Type: Interrupt wMaxPacketSize: 0x0040 (64) bInterval: 0x0A Endpoint Descriptor: bEndpointAddress: 0x00 Transfer Type: Control wMaxPacketSize: 0x0507 (1287) //???长度怎么是怎样,我设 wInterval: 0x0301 //的是64B下面有 bSyncAddress: 0x40 Endpoint Descriptor: bEndpointAddress: 0x00 Transfer Type: Bulk wMaxPacketSize: 0x0001 (1) //??长度怎么这样? wInterval: 0x0000 bSyncAddress: 0x07 Endpoint Descriptor: bEndpointAddress: 0x05 Transfer Type: Bulk wMaxPacketSize: 0x4002 (16386) //?? wInterval: 0x0000 bSyncAddress: 0x00 Configuration Descriptor: wTotalLength: 0x002E bNumInterfaces: 0x01 bConfigurationValue: 0x01 iConfiguration: 0x00 bmAttributes: 0xC0 (Bus Powered Self Powered ) MaxPower: 0x32 (100 Ma) Interface Descriptor: bInterfaceNumber: 0x00 bAlternateSetting: 0x00 bNumEndpoints: 0x04 bInterfaceClass: 0x08 bInterfaceSubClass: 0x06 bInterfaceProtocol: 0x50 iInterface: 0x00 Endpoint Descriptor: bEndpointAddress: 0x81 Transfer Type: Interrupt wMaxPacketSize: 0x0040 (64) bInterval: 0x0A Endpoint Descriptor: bEndpointAddress: 0x01 Transfer Type: Interrupt wMaxPacketSize: 0x0040 (64) bInterval: 0x0A Endpoint Descriptor: bEndpointAddress: 0x82 Transfer Type: Bulk wMaxPacketSize: 0x0040 (64) bInterval: 0x00 Endpoint Descriptor: bEndpointAddress: 0x02 Transfer Type: Bulk wMaxPacketSize: 0x0040 (64) bInterval: 0x00 [编辑 - 6/11/04 by kevin_yin] |
|
6楼#
发布于:2004-06-11 11:24
还在啊,同乐同乐。。。
|
|
|
7楼#
发布于:2004-06-11 11:35
那为什么host不发送set-interface请求啊?! 我用过几个都没抓到set-interface,确定你的set config后有发送响应。下面就是get max lun了. |
|
8楼#
发布于:2004-06-11 11:42
不是上层不发,而是你给的东东让它认为无需发命令给你!!
上层下来的命令如果你真的无法处理就cancel掉,回空包就可以了,如setconfig、setinterface等,关键是你有没看到你的代码发了空包没?? 比如D12就用single_transmit(0,0) 具体到自己的就应该自己好好看代码了:) |
|
|
9楼#
发布于:2004-06-11 13:55
谢谢恢复!
我的代码里确实是发空包了,代码如下: 这是set-configuration请求发出后进入这个if语句里面 else if (ControlData.DeviceRequest.wValue == 1) { UsbSingleTransmit(0, 0);// 发送应答 UsbInitUnconfig(); // 进入地址状态,禁止0除外的所有端点 UsbInitConfig();// 配置处理,允许端点收发 if(bUSBFlags.bits.bIn_ISR == 0) USB_DISABLE_INTERRUPT; bUSBFlags.bits.bConfiguration = 1;// 标记已配置 if(bUSBFlags.bits.bIn_ISR == 0) USB_ENABLE_INTERRUPT; } 执行过这个后。全局变量bUSBFlags.bits.bConfiguration为1,进入main程序的循环中,就一直循环。如果用usbdebug通过端点1或端点2向它发数据,它能收到。但主机就是不发请求! flyhye你说的“不是上层不发,而是你给的东东让它认为无需发命令给你!!” 我发送的哪个包,host认为无需再发命令啊? |
|
10楼#
发布于:2004-06-11 16:19
哪位能不能帮我看一下,很急啊!
|
|
11楼#
发布于:2004-06-11 16:25
U盘不是用SISC指令的吗
D12、可以做U盘啊,关注中 |
|
|