打印

大小有限制吗

[复制链接]
1027|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
houcs|  楼主 | 2019-1-4 19:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
cyusb3014的上位机编程,对于固件的配置完全不熟,这几天利用官方提供的cyusbAPI进行读写usb测试,现在遇到一个问题无法解决,想求教一下xferdata(buf,len)这个函数用于usb数据上行时len的大小有限制吗
沙发
stly| | 2019-1-4 19:49 | 只看该作者
你是怎么用的

使用特权

评论回复
板凳
houcs|  楼主 | 2019-1-4 19:52 | 只看该作者

本人利用这个函数下行数据时len大小可以从1开始,而上行时的len必须设为16384的整数倍。否则就会出错

使用特权

评论回复
地板
liuzaiy| | 2019-1-4 19:57 | 只看该作者


错误代码是啥

使用特权

评论回复
5
houcs|  楼主 | 2019-1-4 20:00 | 只看该作者
usb control centrol显示错误代码为997

使用特权

评论回复
6
pangb| | 2019-1-4 20:04 | 只看该作者
没太看明白

使用特权

评论回复
7
houcs|  楼主 | 2019-1-4 20:07 | 只看该作者
我可能没表达清楚,我利用usb在FPGA和上位机之间进行通信,上位机读USB的数据量不定,最少是一个字节,最多有上G的数据,但是xferdata()函数的len参数随意设置回出错,请问这是硬件配置的问题吗

使用特权

评论回复
8
houcs|  楼主 | 2019-1-4 20:10 | 只看该作者
可是上位机往USB写又可以随意设置,谁能解释一下

使用特权

评论回复
9
ousj| | 2019-1-4 20:13 | 只看该作者
读写是不一样的,写的时候你可以控制写了多少个字节

使用特权

评论回复
10
ousj| | 2019-1-4 20:17 | 只看该作者
读写是不一样的,写的时候你可以控制写了多少个字节

使用特权

评论回复
11
morrisk| | 2019-1-4 20:20 | 只看该作者
这个没问题。读的时候,要看硬件能返回多少字节,这个由不得你。

使用特权

评论回复
12
xiaoqizi| | 2019-1-8 12:39 | 只看该作者
感觉从数据类型来看 是有限制的

使用特权

评论回复
13
木木guainv| | 2019-1-8 12:46 | 只看该作者
应该有限制

使用特权

评论回复
14
zyf部长| | 2019-1-10 09:15 | 只看该作者
CY把这个函数包的太严实了,搞不清下边的机理,我没敢用。

使用特权

评论回复
15
houcs|  楼主 | 2019-1-10 09:19 | 只看该作者
我做过测试,FPGA持续往USB里发送一组递增的数,上位机调用xferdata()函数时,当len=1024的整数倍时可以正确读取USB数据,当len为其他的数时xferdata函数的返回值一直是false。

使用特权

评论回复
16
houcs|  楼主 | 2019-1-10 09:22 | 只看该作者
在实际应用中,要求FPGA返回多少数上位机都能从USB里读出来,所以不知道有什么好的办法。

使用特权

评论回复
17
zyf部长| | 2019-1-10 09:27 | 只看该作者
你说的read()函数,我看了cyusb.net手册,上面介绍read()函数只在cycontrolEndPoint里,而且read()函数貌似也是调用xferdata()函数。

使用特权

评论回复
18
xxmmi| | 2019-1-10 09:30 | 只看该作者
你把xferdata前后的程序发上来

使用特权

评论回复
19
houcs|  楼主 | 2019-1-10 09:33 | 只看该作者

//////////////////////定义
  USBDeviceList^ user1;
  CyUSBDevice^ myDev;
  CyBulkEndPoint^ inendpoint;
  CyBulkEndPoint^ outendpoint;
  Int32  rd_bytes;
  bool success;

/////////////////////////初始化
  user1 = gcnew USBDeviceList(CyUSB::CyConst:EVICES_CYUSB);
  myDev =dynamic_cast<CyUSBDevice^> (user1[0x04B4,0x00BC]);
  if (myDev!=nullptr)
    MessageBox::Show(L"link success");
   else
    MessageBox::Show(L"no device");
   bool blssFast = myDev->bSuperSpeed;
   bool blhsFast = myDev->bHighSpeed;   
   if(blhsFast)
   {
    textBox3->Text=L"USB is working at usb2.0 mode!";
   }
   else if (blssFast)
   {
    textBox3->Text=L"USB is working at usb3.0 mode!";}
  ////////////////////////////////////////////////////
   inendpoint=dynamic_cast<CyBulkEndPoint^>(myDev->EndPointOf(0x81));
   if((inendpoint!=nullptr)&&(inendpoint->Attributes==2))
     {
        if (textBox1->Text=="")
    {   MessageBox::Show(L"lease input the bytes you want to read");
        return;
    }
    else
    {
     rd_bytes=Convert::ToInt32(textBox1->Text);
     rd_buffer=gcnew array<unsigned char>(16384);
           
     success=inendpoint->XferData(rd_buffer,rd_bytes); }

    现象是只有rd_bytes是1024的整数倍时success=1,其他情况success都是0,会不会是因为USB3.0一次传输的最小单位是1024字节,我对固件配置不熟,不知道能不能把一次传输的数据量大小改小一些

使用特权

评论回复
20
kangzj| | 2019-1-10 09:36 | 只看该作者

按你的说法,应该是固件凑够了1024才传上来一次。长度小于1024时,固件没传,超时死那了,返回0。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

743

主题

8382

帖子

5

粉丝