阅读:4911回复:7
IssueBulkTransfer返回错误1460_WinCE下开发PDIUSBD12 USB驱动
我现在在做WinCE下的D12驱动程序移植,USB芯片是 PDIUSBD12,用的是WinCE5.0,
目前已经实现了设备的挂载,D12已经能够被识别。 根据资料,D12有1个接口,除了EP0外,还有端点1、2,端点1为中断,端点2为Bulk, 我把端点1、2对应的IN/OUT管道都打开了。 驱动下实现了Init, Open, Close, Read, Write等函数,我主要想用IO_CONTROL对D12操作, 因此又编写了 D12_ReadPort1,D12_WritePort1,D12_ReadPort2,D12_WritePort2, 经过测试,编写的D12_WritePort1和D12_WritePort2函数可以实现写数据,并且返回传入的数据 大小和请求写入的相同。 但是读数据则失败,执行IssueBulkTransfer后,提示错误码 1460,我查了一下是 "由于超时时间已过,该操作返回。 ",不管是读端口1还是2都是这个提示,但是写端口1,2都没有这个问题! 这个时候我想测试一下是否端点0有这个问题,于是用了IssueVendorTransfer这个函数,发现问题也是一样, 提示超时! 不知道是什么原因?我的程序中将对端点1,2的操作用的都是IssueBulkTransfer。 下面是写操作的部分代码,该部分代码似乎能够工作: //写端点2,端点号是5 dwErr = IssueBulkTransfer(pDrv->UsbFuncs, pDrv->BulkOut_EP2.hPipe, DefaultTransferComplete, pDrv->BulkOut_EP2.hEvent, USB_OUT_TRANSFER | USB_SHORT_TRANSFER_OK, lpInBuffer, 0, nInBufferSize, &dwBytesTransferred, 2000, &dwUsbErr); 但是读端口提示超时: //读端点2,端点号是4 dwErr = IssueBulkTransfer(pDrv->UsbFuncs, pDrv->BulkIn_EP2.hPipe, DefaultTransferComplete, pDrv->BulkIn_EP2.hEvent, USB_IN_TRANSFER | USB_SHORT_TRANSFER_OK | USB_NO_WAIT, lpOutBuffer, 0, nOutBufferSize, dwBytesTransferred, 2000, &dwUsbErr); 操作端点0,也有一样的超时问题: dwLength = pIoBlock->uLength; //长度,表示后面有pRequest->uSize个字节的数据,到底是 DeviceRequest.bmRequestType = 0x40; DeviceRequest.bRequest = 0x0c; DeviceRequest.wValue = 0; DeviceRequest.wIndex = 0x471; DeviceRequest.wLength = (USHORT)dwLength; dwErr = IssueVendorTransfer(pDrv->UsbFuncs, pDrv->hUsbDevice, DefaultTransferComplete, pDrv->hEP0Event, USB_OUT_TRANSFER | USB_SHORT_TRANSFER_OK, &DeviceRequest, pRequest, (DWORD)NULL, &dwBytesTransferred, 2000, &dwUsbErr); 请问这是什么原因呢? 是因为管道没有打开?还是IssueBulkTransfer的参数不对吗?还是说要设置同步或者异步? 非常感谢!!! |
|
沙发#
发布于:2010-04-15 11:07
1460是超时错误,有没有可能是底层固件没有响应呢?急盼高人解答。
|
|
板凳#
发布于:2010-04-15 15:40
我找到原因了!
底层的USB固件程序是正确的。经过分析,所有的管道都已经打开,所以不是管道的问题, 再仔细查看了MSDN,IssueBulkTransfer参数也应该没有问题,再仔细看了一下底层固件的代码, 觉得应该是因为主机发送的命令,底层固件不识别,所以就不会回应!端点自然读取不到任何数据, 所以读取端口超时! 所以我在测试的时候,发送固件能够识别的命令,就可以收到固件的响应了!超时问题解决! |
|
地板#
发布于:2010-04-15 15:40
已经解决,原因如上! 结贴。
|
|
地下室#
发布于:2010-09-10 16:07
你好,
我也遇到了1460这个问题,我是在XXX_Read里面调用IssueBulkTransfer的时候出现的,我的代码如下: dwErr = IssueBulkTransfer( pUsbPrn->UsbFuncs, pUsbPrn->BulkIn.hPipe, DefaultTransferComplete, pUsbPrn->BulkIn.hEvent, (USB_IN_TRANSFER | USB_SHORT_TRANSFER_OK), pBuffer, 0, BufferLength, &dwBytesTransferred, dwTimeout, &dwUsbErr ); 我在用IssueVendorTransfer()的时候没出现1460这个问题,因为我设置了ControlHeader这个参数(正如你所说),但是调用IssueBulkTransfer这个函数的时候,是没有这个参数的,不知道楼主是怎么解决这个问题的。谢谢! |
|
5楼#
发布于:2012-09-05 01:37
你好,我现在也遇到了同样的问题,弄了很久都没有解决,出现同样的1460错误,还有31错误,希望能得到你的指导,真心感谢了。
|
|
6楼#
发布于:2016-03-07 09:06
楼主,请问你发送固件能够识别的命令,是通过IssueBulkTransfer发的还是通过IssueVendorTransfer?能否描述一下?谢谢!!
|
|
7楼#
发布于:2016-06-18 08:35
|
|
|