xiaoxin86
驱动牛犊
驱动牛犊
  • 注册日期2007-11-12
  • 最后登录2011-04-19
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望106点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:4730回复:7

IssueBulkTransfer返回错误1460_WinCE下开发PDIUSBD12 USB驱动

楼主#
更多 发布于:2010-04-14 18:15
我现在在做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的参数不对吗?还是说要设置同步或者异步?

非常感谢!!!
xiaoxin86
驱动牛犊
驱动牛犊
  • 注册日期2007-11-12
  • 最后登录2011-04-19
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望106点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-04-15 11:07
1460是超时错误,有没有可能是底层固件没有响应呢?急盼高人解答。
xiaoxin86
驱动牛犊
驱动牛犊
  • 注册日期2007-11-12
  • 最后登录2011-04-19
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望106点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-04-15 15:40
我找到原因了!

底层的USB固件程序是正确的。经过分析,所有的管道都已经打开,所以不是管道的问题,
再仔细查看了MSDN,IssueBulkTransfer参数也应该没有问题,再仔细看了一下底层固件的代码,
觉得应该是因为主机发送的命令,底层固件不识别,所以就不会回应!端点自然读取不到任何数据,
所以读取端口超时!

所以我在测试的时候,发送固件能够识别的命令,就可以收到固件的响应了!超时问题解决!
xiaoxin86
驱动牛犊
驱动牛犊
  • 注册日期2007-11-12
  • 最后登录2011-04-19
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望106点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-04-15 15:40
已经解决,原因如上! 结贴。
游客

返回顶部