阅读:4557回复:16
我的USB设备在枚举时,主机可以发现设备,但用BUSHOUND看到的描述符都是错的,为什么?BUSHOUND 里的数据如何才算对的,希望各位高手帮帮小弟,我已经调试了2个周了,但毫无进展,谢谢
我的USB设备在枚举时,主机可以发现设备,但用BUSHOUND看到的描述符都是错的,为什么?BUSHOUND 里的数据如何才算对的,希望各位高手帮帮小弟,我已经调试了2个周了,但毫无进展,谢谢!!!!
|
|
最新喜欢:idlema... |
沙发#
发布于:2003-04-17 23:28
能把情况说的具体些吗,例如说,你做的是什么设备,使用的是什么设备,开发用的软件是什么。这样说起来可能大家就更有针对性了。
|
|
|
板凳#
发布于:2003-04-18 21:54
我做的 是usb数据采集系统,使用的PDIUSBD12,开发软件用的是INSIGHT-52P的编译环境,请问有什么高建???谢谢 !!!
|
|
地板#
发布于:2003-04-21 09:50
首先建议你可以把bushound截下来的数据附上
|
|
地下室#
发布于:2003-04-21 10:28
2.0 CTL a3 00 00 00 - 02 00 04 00 CLASS 3.0sc 1.1.0
2 STAK 0f 00 00 e0 - 30 af 6c c1 INTERNAL IOCTL 26us 1.2.0 2.0 DI 00 01 03 00 .... 25us 1.3.0 2 URB 50 00 08 00 - 00 00 00 00 CONTROL TRANSFER 7us 1.4.0 2 CTL a3 00 00 00 - 02 00 04 00 CLASS 47us 2.1.0 2 STAK 0f 00 00 e0 - f4 8a 4d c1 INTERNAL IOCTL 11us 2.2.0 2.0 DI 00 01 03 00 .... 17us 2.3.0 2 URB 50 00 08 00 - 00 00 00 00 CONTROL TRANSFER 7us 2.4.0 2.0 CTL 23 01 10 00 - 02 00 00 00 CLASS 24us 3.1.0 2 STAK 0f 00 00 e0 - d0 88 db d5 INTERNAL IOCTL 13us 3.2.0 2 URB 50 00 08 00 - 00 00 00 00 CONTROL TRANSFER 13us 3.3.0 2 STAK 0f 00 00 e0 - 30 af 6c c1 INTERNAL IOCTL 29us 4.1.0 2.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 854us 5.1.0 2 STAK 0f 00 00 e0 - f4 8a 4d c1 INTERNAL IOCTL 20us 5.2.0 2.0 DI 00 01 00 00 .... 21us 5.3.0 2 URB 50 00 08 00 - 00 00 00 00 CONTROL TRANSFER 7us 5.4.0 2.0 CTL a3 00 00 00 - 02 00 04 00 CLASS 25us 6.1.0 2 STAK 0f 00 00 e0 - f4 8a 4d c1 INTERNAL IOCTL 13us 6.2.0 2.0 DI 00 01 02 00 .... 12us 6.3.0 2 URB 50 00 08 00 - 00 00 00 00 CONTROL TRANSFER 7us 6.4.0 2.1 DI 04 . 101ms 4.2.0 2 URB 48 00 09 00 - 00 00 00 00 BULK/INT XFER 13us 4.3.0 2 CTL a3 00 00 00 - 02 00 04 00 CLASS 23us 7.1.0 2 STAK 0f 00 00 e0 - 30 af 6c c1 INTERNAL IOCTL 15us 7.2.0 2.0 DI 00 01 02 00 .... 24us 7.3.0 2 URB 50 00 08 00 - 00 00 00 00 CONTROL TRANSFER 7us 7.4.0 2 CTL a3 00 00 00 - 02 00 04 00 CLASS 105us 8.1.0 2 STAK 0f 00 00 e0 - 44 2c e5 d5 INTERNAL IOCTL 12us 8.2.0 2.0 DI 00 01 02 00 .... 16us 8.3.0 2 URB 50 00 08 00 - 00 00 00 00 CONTROL TRANSFER 7us 8.4.0 2.0 CTL 23 01 11 00 - 02 00 00 00 CLASS 28us 9.1.0 |
|
5楼#
发布于:2003-04-21 12:18
建议你先按如下步骤用bushound截取usb设备的数据:
1 首先拔下usb设备后重置bushound的捕捉状态; 2 插上你的usb设备,此时usb host controller 会发出几个ctl 帧来询问设备的,第一个应该是 80 06 00 01 - ...我不清楚你截下来的是哪一段数据,因为我没有找到该帧(get device descriptor); 3 然后。。。再说啦 |
|
6楼#
发布于:2003-04-21 12:54
你打开设备管理器看一下加载的是正确的驱动程序吗?如果不是那可能是固件响应host的取描述符请求例程有问题,否则不会把描述符弄错。
|
|
7楼#
发布于:2003-04-25 00:33
正确的一个bushound过程如下:
10.0 CTL 80 06 00 01 - 00 00 40 00 GET DESCRIPTR 256us 12.1.0 10.0 DI 12 01 00 01 - dc 00 00 10 ........ 4.0ms 12.2.0 71 04 66 06 - 00 01 00 00 q.f..... 12.2.8 10.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 26us 13.1.0 10.0 DI 03 01 00 00 .... 8us 13.2.0 10.0 CTL 23 03 04 00 - 01 00 00 00 CLASS 23us 14.1.0 10.1 DI 02 . 75ms 15.1.0 10.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 24us 16.1.0 10.0 DI 03 01 10 00 .... 23us 16.2.0 10.0 CTL 23 01 14 00 - 01 00 00 00 CLASS 5us 17.1.0 10.0 CTL 00 05 02 00 - 00 00 00 00 SET ADDRESS 20ms 18.1.0 10.0 CTL 80 06 00 01 - 00 00 12 00 GET DESCRIPTR 13ms 19.1.0 10.0 DI 12 01 00 01 - dc 00 00 10 ........ 4.8ms 19.2.0 71 04 66 06 - 00 01 00 00 q.f..... 19.2.8 00 19 .. 19.2.16 10.0 CTL 80 06 00 02 - 00 00 09 00 GET DESCRIPTR 47us 20.1.0 10.0 DI 09 02 2e 00 - 01 01 00 60 .......` 3.9ms 20.2.0 01 . 20.2.8 10.0 CTL a3 00 00 00 - 02 00 04 00 CLASS 6.0ms 21.1.0 10.0 DI 00 01 00 00 .... 14us 21.2.0 12.0 CTL 80 06 00 01 - 00 00 12 00 GET DESCRIPTR 14ms 22.1.0 12.0 DI 12 01 00 01 - dc 00 00 10 ........ 4.6ms 22.2.0 71 04 66 06 - 00 01 00 00 q.f..... 22.2.8 00 19 .. 22.2.16 12.0 CTL 80 06 00 02 - 00 00 00 04 GET DESCRIPTR 46us 23.1.0 12.0 DI 09 02 2e 00 - 01 01 00 60 .......` 5.9ms 23.2.0 01 09 04 00 - 00 04 dc a0 ........ 23.2.8 b0 00 07 05 - 81 03 04 00 ........ 23.2.16 0a 07 05 01 - 03 04 00 0a ........ 23.2.24 07 05 82 02 - 40 00 0a 07 ....@... 23.2.32 05 02 02 40 - 00 0a ...@.. 23.2.40 12.0 CTL 00 09 01 00 - 00 00 00 00 SET CONFIG 64us 24.1.0 你可以在看看硬件方面,应该还是硬件惹得祸。 |
|
8楼#
发布于:2003-04-25 16:49
正确的一个bushound过程如下: 楼上的大侠,请问你用的是什么版本的bus hound???怎么抓到的数据比我多多了? 我不明白host为什么又发了一次80 06 00 01 - 00 00 12 00和80 06 00 02 - 00 00 00 04???? 另外请问80 06 00 02 - 00 00 00 04中的这个04是怎么回事??? |
|
9楼#
发布于:2003-04-25 17:10
我想抓的数据多是因为在BusHound设备菜单里选择的获取数据设备多,还有设置菜单里的选项。
主机一般先以地址0发一遍GetDeviceDescriptor和GetConfigDescriptor,然后set Address之后再发一遍。 04是描述符长度中的高字节。 |
|
10楼#
发布于:2003-04-25 17:38
我想抓的数据多是因为在BusHound设备菜单里选择的获取数据设备多,还有设置菜单里的选项。 呵呵,误会。 我不是说那些class什么的。。。 我说的捕捉的数据多主要是指set config之前多的最后两个get descriptor。我在firmware里可以用数组捉到,但是我的bus hound却没有,迷惑!!!! |
|
11楼#
发布于:2003-04-25 17:52
大家来看看我的原理图,我觉得没有什么错误,大家给点意见???谢谢!!!!!
|
|
12楼#
发布于:2003-04-28 11:14
一般来讲设备枚举跟外围硬件关系不大的!我看主要是你的接收子程序有错!
|
|
13楼#
发布于:2003-04-29 12:22
没有错啊,不妨你来看看
void ep0_rxdone(void) { unsigned char ep_last, i; ep_last = D12_ReadLastTransactionStatus(0); // Clear interrupt flag if (ep_last & D12_SETUPPACKET) { ControlData.wLength = 0; ControlData.wCount = 0; //判断端点是否满,如是,则取出 if( D12_ReadBuffer(0,(unsigned char *)(&(ControlData.DeviceRequest)),sizeof(ControlData.DeviceRequest)) != sizeof(DEVICE_REQUEST)) { D12_SetEndpointStatus(0, 1); D12_SetEndpointStatus(1, 1); bEPPflags.bits.control_state = USB_IDLE; return; } ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue); ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex); ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength); // Acknowledge setup here to unlock in/out endp //向控制输出端点发送应答建立命令以重新使能下一个建立阶段 D12_AcknowledgeEndpoint(0); D12_AcknowledgeEndpoint(1); ControlData.wLength = ControlData.DeviceRequest.wLength; ControlData.wCount = 0; //需要证实控制传输是控制读还是写,如果是读: //如果控制传输是一个控制读类型那就是说器件需要在下一个数据阶段向 //主机发回数据包.MCU需要设置一个标志以指示USB 设备现在正处于传输 //模式即准备在主机发送请求时发送数据 if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) { bEPPflags.bits.setup_packet = 1; bEPPflags.bits.control_state = USB_TRANSMIT; /* get command */ } //如果是写 else { if (ControlData.DeviceRequest.wLength == 0) { bEPPflags.bits.setup_packet = 1; bEPPflags.bits.control_state = USB_IDLE; /* set command */ } else { if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) { bEPPflags.bits.control_state = USB_IDLE; D12_SetEndpointStatus(0, 1); D12_SetEndpointStatus(1, 1); } else { bEPPflags.bits.control_state = USB_RECEIVE; /* set command with OUT token */ } } // set command with data } // else set command } // if setup packet else if (bEPPflags.bits.control_state == USB_RECEIVE) { i =D12_ReadBuffer(0, ControlData.dataBuffer + ControlData.wCount,EP0_PACKET_SIZE); ControlData.wCount += i; if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) { bEPPflags.bits.setup_packet = 1; bEPPflags.bits.control_state = USB_IDLE; } } else { bEPPflags.bits.control_state = USB_IDLE; } } |
|
14楼#
发布于:2003-04-29 19:39
建议你在RAM中或者通过RS232将收到的数据保存起来,看看到底收到些什么!
|
|
15楼#
发布于:2003-06-26 17:31
首先:请检查BusHound有关设备选择菜单里是否选错了项目;
其次:说明目前的固件还不能适应U盘驱动程序;要另找驱动程序。 |
|
16楼#
发布于:2003-06-26 21:43
大家来看看我的原理图,我觉得没有什么错误,大家给点意见???谢谢!!!!! 把你的描述符贴出来看看 看你的源程序不好说。 |
|