xiaoxin86
驱动牛犊
驱动牛犊
  • 注册日期2007-11-12
  • 最后登录2011-04-19
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望106点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:4693回复: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
已经解决,原因如上! 结贴。
zorrosea
驱动牛犊
驱动牛犊
  • 注册日期2010-08-26
  • 最后登录2010-10-03
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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这个函数的时候,是没有这个参数的,不知道楼主是怎么解决这个问题的。谢谢!
HWKINGS
驱动牛犊
驱动牛犊
  • 注册日期2012-09-05
  • 最后登录2012-09-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2012-09-05 01:37
你好,我现在也遇到了同样的问题,弄了很久都没有解决,出现同样的1460错误,还有31错误,希望能得到你的指导,真心感谢了。
yokel88
驱动牛犊
驱动牛犊
  • 注册日期2016-03-07
  • 最后登录2016-03-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2016-03-07 09:06
楼主,请问你发送固件能够识别的命令,是通过IssueBulkTransfer发的还是通过IssueVendorTransfer?能否描述一下?谢谢!!
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
7楼#
发布于:2016-06-18 08:35
xiaoxin86:已经解决,原因如上! 结贴。回到原帖
感谢
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
游客

返回顶部