5607|8

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

68013A端点EP6OUT的BULK写失败求助,急!! [复制链接]

68013A端点EP6OUT的BULK写失败求助,急!!
易用专业的PCI、USB、LED方案正在对68013A采用slavefifo方式进行bulk读写操作
我用EP2做in端点,1024字节,2从缓冲
用EP6做OUT端点,512字节,4从缓冲

我写好了68013A的固件,用CYPRESS的开发工具能够进行实现正确的读写

现在正在用DS2.7写驱动,现在写的驱动,能够顺利读取EP2,却不能写入EP6
从SLAVEfifo连接的FPGA端看slavefifo的状态,EP6对应的fifo一直是空的)!

搞固件就郁闷了很久了,好不容易把固件的写搞定,现在驱动又来整我。唉,求大家帮忙了

相关代码如下:
------------------------------------
// USB30ioctl.h

#ifndef __USB30ioctl__h_
#define __USB30ioctl__h_

#define IOCTL_CTRL_READ  CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_CTRL_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_BULK_READ  CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_BULK_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x803, METHOD_BUFFERED, FILE_ANY_ACCESS)
#endif
------------------------------------
// USB30Device.h
....................................

        // Unit number for this device (0-9)
    ULONG                m_Unit;
    KUsbLowerDevice        m_Lower;
    KUsbInterface      m_Interface;
        // Pipe for USB endpoint 2 IN (address 0x82)
    KUsbPipe            m_Endpoint2IN;
        // Pipe for USB endpoint 6 OUT (address 0x6)
    KUsbPipe            m_Endpoint6OUT;
....................................

------------------------------------
// USB30Device.CPP

.............................
    #define m_buffer_size 1048592;
    #define USB_transfer_size 1024
    #define USB_WRITE_SIZE 512
............................

    m_Unit = Unit;
    m_Lower.Initialize(this, Pdo);
    m_Interface.Initialize(
                        m_Lower, //KUsbLowerDevice
        0,        //InterfaceNumber
        1,        //ConfigurationValue
        0        //Initial Interface Alternate Setting    );

    // Initialize each Pipe object
    m_Endpoint2IN.Initialize(m_Lower, 0x82, 1024);
    m_Endpoint6OUT.Initialize(m_Lower, 0x06, 512);

  .............................................
...............................................//批量读,每次1024字节

NTSTATUS USB30Device::USB30_BULK_READ(KIrp I)
{
    NTSTATUS status = STATUS_INSUFFICIENT_RESOURCES;
    t << "Entering USB30_BULK_READ\n";
    PURB pUrb=NULL;
    USB_current_buffer=m_buffer1;

        pUrb = m_Endpoint2IN.BuildBulkTransfer(
            USB_current_buffer,  // Where data write to?
            USB_transfer_size,  // How much data to read?
            TRUE,        // direction (TRUE = IN)
            NULL        // Link to next URB);
if ( pUrb != NULL)
{
    pUrb->UrbBulkOrInterruptTransfer.TransferFlags =(USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK);

                  status = m_Endpoint2IN.SubmitUrb(pUrb, NULL, NULL,URB_mSecTimeOut);
    t<<"after send SubmitUrb ,status="<                       //返回0x00000000

            if ( status==0x00000000 )
            {
    dwBytesRead = pUrb->UrbBulkOrInterruptTransfer.TransferBufferLength;
            }
    delete pUrb;
                    pUrb = NULL;
}


    RtlCopyMemory((PUCHAR)Request_Buffer, (PUCHAR)m_buffer1,TotalRead);
                    I.Information() = TotalRead;

  return status;
}
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////批量写,每次512字节
NTSTATUS USB30Device:: USB30_BULK_WRITE(KIrp I)
{    NTSTATUS status = STATUS_INSUFFICIENT_RESOURCES;

    t << "Entering USB30_BULK_WRITE\n";
    // Declare a memory object
//    KMemory Mem(I.Mdl());
//    KMemory Mem( I.IoctlBuffer());

    Request_Buffer_char= (PUCHAR) I.IoctlBuffer();
    ULONG URB_mSecTimeOut=((PULONG)Request_Buffer_char)[0];

                    UCHAR WrData_Buf        =  Request_Buffer_char+4;
                    ULONG dwBytesSent = 0;
                    PURB pUrb2=NULL;

                  pUrb2 = m_Endpoint6OUT.BuildBulkTransfer(
            WrData_Buf,          // Where the data is from?
            USB_WRITE_SIZE,  // How much data to write?
            FALSE,        // direction (FALSE = OUT)
            NULL,        // Link to next URB
            FALSE,        
            NULL);
    t << "Entering BuildBulkTransfer ok!\n";

    if ( pUrb2 != NULL)
    {
    // pUrb->UrbBulkOrInterruptTransfer.TransferFlags =
    //    (USBD_TRANSFER_DIRECTION_OUT | USBD_SHORT_TRANSFER_OK);
status = m_Endpoint6OUT.SubmitUrb(pUrb2, NULL, NULL,URB_mSecTimeOut);//
t<<"after send SubmitUrb ,status="< //返回0x00000102(超时!URB_mSecTimeOut设置为1000ms)


            if ( status==0x00000000 )
        
    {
              dwBytesSent = pUrb2->UrbBulkOrInterruptTransfer.TransferBufferLength;
    }


      delete pUrb2;
    pUrb2 = NULL;
               

}
        

                  I.Information() = dwBytesSent;
    Request_Buffer_char=NULL;
          return status;

}
......................................................

最新回复

你试过两个端点同时上传数据到PC机么?我在官方的驱动基础上,想实现2和6两个端点同时上传数据,失败了  详情 回复 发表于 2011-9-6 17:00
点赞 关注

回复
举报

92

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
因为固件调试工具能够正常进行读写
所以就把问题放在驱动身上
晚上在DS27下把驱动翻了个遍

无果

在DS32下重新开发驱动

效果一样!

郁闷!!!!!
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
CYPRESS的开发工具是  cyconsole
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼主是不是端点搞错了,我也使用这个啊,没有出现什么问题啊
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

5
 
问题已经解决了哈,就是固件的问题!

初始化out端点EP6时候
只做了
SYNCDELAY;                      OUTPKTEND=0x86;
未加
    SYNCDELAY;      EP6BCH= 0x02;  
  SYNCDELAY;          EP6BCL = 0x00;  

这个就是不能写的根本原因

不过奇怪的就是cypress的开发工具cyconle居然能写!寒一下!
看来还是集结号的那个版本可以补充一句了:
官方的测试工具,也不可靠哒!



------------------------------------------------------------------------------



如果说驱动有点点问题的话
    I.Information() = dwBytesSent; 这里最好改成    I.Information() = 0;否则会造成死机,不过这个算小问题哈!  
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
不果郁闷依然在继续
板子做了一个版本的两块
由于芯片版本
居然一个成功,另外一个打死都不能枚举
晕死!
CYPRESS官网上关于不能枚举的7大原因我都检查了,都不是
哭!!!
   

附芯片上的ID号码,后面那个台湾的不能枚举哒!郁闷!

能够枚举:
CY7C68013A-
128AXC 0631
B 04 651142



不能枚举
CY7C68013A-
128AXC TWN0525
B 04 629736
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
居然是UBS-B连接器里面的一根的pin断了
白白换了两次芯片
我晕死           
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

8
 
不会,帮顶
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

9
 

lz,你试过两个端点同时上传数据到PC机么

你试过两个端点同时上传数据到PC机么?我在官方的驱动基础上,想实现2和6两个端点同时上传数据,失败了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表