CyUSB c# 获取数据的问题

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
user_4028566
Level 1
Level 1
5 replies posted First question asked First reply posted

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 点赞
1 解答
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

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

在原帖中查看解决方案

0 点赞
12 回复数
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

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

0 点赞
user_4028566
Level 1
Level 1
5 replies posted First question asked First reply posted

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

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

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

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

0 点赞
user_4028566
Level 1
Level 1
5 replies posted First question asked First reply posted

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

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

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

0 点赞
user_4028566
Level 1
Level 1
5 replies posted First question asked First reply posted

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

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

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

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

0 点赞
user_4028566
Level 1
Level 1
5 replies posted First question asked First reply posted

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

谢谢

0 点赞

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

没有找到  ResetPipe() 此方法

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

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

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

0 点赞
user_4028566
Level 1
Level 1
5 replies posted First question asked First reply posted

你好     

单独调用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 点赞
user_4028566
Level 1
Level 1
5 replies posted First question asked First reply posted

描述一下大概的情况:

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

数据可以正常采集

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

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

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

0 点赞