大小有限制吗

[复制链接]
1442|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 | 显示全部楼层


错误代码是啥
 楼主| houcs 发表于 2019-1-4 20:00 | 显示全部楼层
usb control centrol显示错误代码为997
pangb 发表于 2019-1-4 20:04 | 显示全部楼层
没太看明白
 楼主| houcs 发表于 2019-1-4 20:07 | 显示全部楼层
我可能没表达清楚,我利用usb在FPGA和上位机之间进行通信,上位机读USB的数据量不定,最少是一个字节,最多有上G的数据,但是xferdata()函数的len参数随意设置回出错,请问这是硬件配置的问题吗
 楼主| houcs 发表于 2019-1-4 20:10 | 显示全部楼层
可是上位机往USB写又可以随意设置,谁能解释一下
ousj 发表于 2019-1-4 20:13 | 显示全部楼层
读写是不一样的,写的时候你可以控制写了多少个字节
ousj 发表于 2019-1-4 20:17 | 显示全部楼层
读写是不一样的,写的时候你可以控制写了多少个字节
morrisk 发表于 2019-1-4 20:20 | 显示全部楼层
这个没问题。读的时候,要看硬件能返回多少字节,这个由不得你。
xiaoqizi 发表于 2019-1-8 12:39 | 显示全部楼层
感觉从数据类型来看 是有限制的
木木guainv 发表于 2019-1-8 12:46 | 显示全部楼层
应该有限制
zyf部长 发表于 2019-1-10 09:15 | 显示全部楼层
CY把这个函数包的太严实了,搞不清下边的机理,我没敢用。
 楼主| houcs 发表于 2019-1-10 09:19 | 显示全部楼层
我做过测试,FPGA持续往USB里发送一组递增的数,上位机调用xferdata()函数时,当len=1024的整数倍时可以正确读取USB数据,当len为其他的数时xferdata函数的返回值一直是false。
 楼主| houcs 发表于 2019-1-10 09:22 | 显示全部楼层
在实际应用中,要求FPGA返回多少数上位机都能从USB里读出来,所以不知道有什么好的办法。
zyf部长 发表于 2019-1-10 09:27 | 显示全部楼层
你说的read()函数,我看了cyusb.net手册,上面介绍read()函数只在cycontrolEndPoint里,而且read()函数貌似也是调用xferdata()函数。
xxmmi 发表于 2019-1-10 09:30 | 显示全部楼层
你把xferdata前后的程序发上来
 楼主| 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字节,我对固件配置不熟,不知道能不能把一次传输的数据量大小改小一些
kangzj 发表于 2019-1-10 09:36 | 显示全部楼层

按你的说法,应该是固件凑够了1024才传上来一次。长度小于1024时,固件没传,超时死那了,返回0。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

743

主题

8382

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部