阅读:1305回复:4
版主:帮帮小弟,不然小弟就无法毕业了,谢谢(还是枚举问题)
我在调试D12枚举程序时,用BUSHOUND得到的数据如下:这可能时什么原因?谢谢!!!!!
Device Phase Data Description Time Cmd.Phase.Ofs(rep) ------ ----- ------------------------- ---------------- ----- ------------------ 7.0 CTL a3 00 00 00 - 02 00 04 00 CLASS 994ms 1.1.0 7.0 DI 03 01 00 00 .... 40us 1.2.0 7.0 CTL 23 03 04 00 - 02 00 00 00 CLASS 23us 2.1.0 7.1 DI 04 . 89ms 3.1.0 7.0 CTL a3 00 00 00 - 02 00 04 00 CLASS 27us 4.1.0 7.0 DI 03 01 10 00 .... 26us 4.2.0 7.0 CTL 23 01 14 00 - 02 00 00 00 CLASS 4us 5.1.0 7.0 CTL 80 06 00 01 - 00 00 40 00 GET DESCRIPTOR 20ms 6.1.0 7.0 CTL a3 00 00 00 - 02 00 04 00 CLASS 5.5sc 7.1.0 7.0 DI 03 01 00 00 .... 43us 7.2.0 7.0 CTL 23 03 04 00 - 02 00 00 00 CLASS 24us 8.1.0 7.1 DI 04 . 89ms 9.1.0 7.0 CTL a3 00 00 00 - 02 00 04 00 CLASS 26us 10.1.0 7.0 DI 03 01 10 00 .... 24us 10.2.0 7.0 CTL 23 01 14 00 - 02 00 00 00 CLASS 6us 11.1.0 7.0 CTL 80 06 00 01 - 00 00 40 00 GET DESCRIPTOR 20ms 12.1.0 7.0 CTL 23 01 01 00 - 02 00 00 00 CLASS 5.5sc 13.1.0 7.0 CTL 80 00 00 00 - 00 00 02 00 GET STATUS 6.8sc 14.1.0 7.0 DI 01 00 .. 6.9ms 14.2.0 [编辑 - 7/4/03 by djsnake] [编辑 - 7/4/03 by djsnake] |
|
沙发#
发布于:2003-07-05 08:56
“7.0 CTL 80 06 00 01 - 00 00 40 00 GET DESCRIPTOR 20ms”后“7.0 CTL a3 00 00 00 - 02 00 04 00 CLASS 5.5sc”5.5 秒超时了,你应答不及时。有可能你没有应答,或者回复错误。
|
|
板凳#
发布于:2003-07-05 09:27
你的发送或者接收程序有问题!
|
|
地板#
发布于:2003-07-05 13:41
大家来看看我的发送和接受子程序:
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; 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; } } //control in function void ep0_txdone(void) { short i = ControlData.wLength - ControlData.wCount; D12_ReadLastTransactionStatus(1); // Clear interrupt flag if (bEPPflags.bits.control_state != USB_TRANSMIT) { return; } //------------------------- if( i >= EP0_PACKET_SIZE) //ControlData.pData=&ControlData.dataBuffer; D12_WriteBuffer(1, ControlData.pData + ControlData.wCount,EP0_PACKET_SIZE); ControlData.wCount += EP0_PACKET_SIZE; bEPPflags.bits.control_state = USB_TRANSMIT; } else if( i != 0) { D12_WriteBuffer(1,ControlData.pData + ControlData.wCount,i); ControlData.wCount += i; bEPPflags.bits.control_state = USB_IDLE; } else if (i == 0) { D12_WriteBuffer(1, 0, 0); // Send zero packet at the end ??? bEPPflags.bits.control_state = USB_IDLE; } } [编辑 - 7/5/03 by djsnake] |
|
地下室#
发布于:2003-07-05 15:20
而且单步执行时,D12_ReadLastTransactionStatus(0)的输出值为0X03,SETUPPACKET位为零,正好不是安装包,这是为什么?
|
|