Announcements
IMPORTANT: Cypress Developer Community is transitioning on October 20th. To learn more and be prepared for this change, check out our latest announcement.
cancel
Showing results for 
Search instead for 
Did you mean: 

USB Superspeed Peripherals

user_4028566
New Contributor

byte[] buffer = new byte[1024];

int by = 1024;

private CyBulkEndPoint cbep2;

bool  x  = cbep2.XferData(ref buffer, ref by)

。。。。。

CyUSB ----》  CyUSBEndPoint -----》XferData  调用此方法获取数据,运行一段时间后, 返回false  无法获取最新数据,一直重复获取最后一次数据。

重启软件  XferData 获取不到数据,需要对硬件断电 重启软件才可以正常工作

求助  如何解决此问题

谢谢

联系QQ:309065004

0 Likes
12 Replies
YiZ_31
Moderator
Moderator

尝试用CyUSBEndPoint()->Reset( )重置endpoint

0 Likes
user_4028566
New Contributor

你好    我按照你说的方法   调用了CyUSBEndPoint()->Reset( ) 此方法    返回值为:true

但是XferData() 依然是重复返回最后一次的数据,重启软件也没用,只有重新拔插USB设备 才能正常采集数据

0 Likes
YiZ_31
Moderator
Moderator

我的意思是你重置后再用XferData 还无法传输数据吗?

0 Likes
user_4028566
New Contributor

可以传输数据  但是始终返回的是同一组数据 

0 Likes
YiZ_31
Moderator
Moderator

你可以用串口打印一下当出现这种情况时GPIF的状态,FX3的固件是否仍在工作,为何输出的是同一组数据。

0 Likes
user_4028566
New Contributor

用串口打印一下当出现这种情况时GPIF的状态,FX3的固件是否仍在工作,为何输出的是同一组数据。

能描述一下 如何进行这一步的测试吗  谢谢

0 Likes
YiZ_31
Moderator
Moderator

Hi,抱歉我以为你们用的是FX3。 FX2可能调试起来没有这么方便。你们可以尝试这篇KBA中的描述:发生错误传输时,端点都会变成停止状态,必须调用ResetPipe()函数清除此状态。另外,在执行新的传输之前,程序挂起的I/O 事务也必须调用AbortPipe() 函数清除。FX3/FX2LP XferData() API使用 – KBA226200

0 Likes
user_4028566
New Contributor

非常感谢   按照你提供的方法  我再测试一下  

谢谢

0 Likes
user_4028566
New Contributor

动态库里只有 Reset()方法 调用时返回值为:true  但采集数据依然不正确   重启软件也不对。

没有找到  ResetPipe() 此方法

用的是C#  3.4.7.0和1.2.2.0这两个版本测试的   测试环境:win7 32 、  win10 64

0 Likes
YiZ_31
Moderator
Moderator

你在reset过后,调用了abort吗?

0 Likes
user_4028566
New Contributor

你好     

单独调用reset ,调用reset后调用abort 这两种方式都尝试了

代码如下:

CyBulkEndPoint cbep2;

buffer = new byte[1024]; by=1024

x = cbep2.XferData(ref buffer, ref by);

当 x 返回值为false后

执行

bool v = cbep2.Reset();

bool c = cbep2.Abort();

v  、c  值为true ,必须重启软件才可以正常采集数据

在执行Reset、Abort后   初始化设备 ,在不重启软件的情况下继续采集

代码如下:

CyControlEndPoint CtrlEndPt;

CyBulkEndPoint cbep1;

CyBulkEndPoint cbep2;

CyUSBDevice myDev;

myDev = usbDevices[str] as CyUSBDevice;

CtrlEndPt = myDev.ControlEndPt;

cbep1 = myDev.BulkOutEndPt;

cbep2 = myDev.BulkInEndPt;

cbep2.TimeOut = 20;

x = cbep2.XferData(ref buffer, ref by);

x 的值 为false  采集不到数据, 必须重启软件才能正常采集数据

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

提示:软件可以正常采集数据。 不定期的或长时间采集的情况下会出现采集数据异常   XferData 返回值false

0 Likes
user_4028566
New Contributor

描述一下大概的情况:

100微伏左右的信号通过硬件放大、滤波,经过A/D转换,由51单片机采集后通过USB2.0通讯芯片(CY7C68013)用USB线上传到PC的上位机软件进行显示

数据可以正常采集

但是长时间采集会出现两种情况

1:调用XferData方法,返回值为False。但上位机软件的波形的走速比正常快,接收到的数据一直是最后一次正常的数据,接收不到新的数据

2:调用XferData方法 ,返回值为False,但上位机软件的波形的走速比正常稍微慢点,接收到的数据一直是最后一次正常的数据,接收不到新的数据

0 Likes