打印

求助,使用CYAPI中函数进行bulkout传输失败

[复制链接]
1715|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我使用EZ-USB FX2 CY7C68013A进行usb2.0的开发,上位机是MFC程序,使用BeginDataXfer、WaitForXfer、FinishDataXfer向下位机发送2字节数据,但是FinishDataXfer返回false。我使用开发套件里的调试程序CyConsole可以成功发送数据,fpga也接收到了,但是自己写的程序不行。
沙发
zjh12138|  楼主 | 2018-6-2 00:23 | 只看该作者
程序如下:
OVERLAPPED outOvLap;
outOvLap.hEvent  = CreateEvent(NULL, false, false,"CYUSB_OUT");
bool bLooping=true;
bool sucess=false;
unsigned char buffer[2];
LONG  length =2;
buffera[0]=0x01;
buffera[1]=0x01;
for (;bLooping;)
{
UCHAR  *outContext = endpt->BeginDataXfer(buffer, length, &outOvLap);
endpt->WaitForXfer(&outOvLap,200);
sucess=endpt->FinishDataXfer(buffer, length, &outOvLap,outContext);
if(sucess) bLooping=false;
}
CloseHandle(outOvLap.hEvent);

使用特权

评论回复
板凳
wsmysyn| | 2018-6-2 09:36 | 只看该作者
zjh12138 发表于 2018-6-2 00:23
程序如下:
OVERLAPPED outOvLap;
outOvLap.hEvent  = CreateEvent(NULL, false, false,"CYUSB_OUT");

你这段不是完整程序吧。

另外一定要用异步的方式么?就2个字节用同步和异步区别也不大。。。
根据官方的异步例子自检一下。。。你的endpt是否获取到设备的端点对象。。发送请求是否构造完整,传输方向是否设置正确,等等。一般可能就是那里没注意到
我以前用过异步的循环发送512字节,是没问题的。。。


使用特权

评论回复
地板
zjh12138|  楼主 | 2018-6-2 10:13 | 只看该作者
wsmysyn 发表于 2018-6-2 09:36
你这段不是完整程序吧。

另外一定要用异步的方式么?就2个字节用同步和异步区别也不大。。。

你好,我使用的是ep2 out进行bulk传输,用endpt = USBDevice->EndPointOf(0X02);得到ep2端点(已经检测到不为空),但是传输返回一直是false。同步的也试过了,返回也是false

使用特权

评论回复
5
wsmysyn| | 2018-6-2 14:38 | 只看该作者
zjh12138 发表于 2018-6-2 10:13
你好,我使用的是ep2 out进行bulk传输,用endpt = USBDevice->EndPointOf(0X02);得到ep2端点(已经检测到 ...

代码应该没有问题。

我刚好手边有环境,也试了,是可以的。固件是一个EP2和EP6的loopback,EP2 out EP6 in,没有问题。

你再检查一下硬件,是不是buffer已经满了,发不下去了。
还有就是自己的APP发不下去的时候,板子不断电,打开CY的control 用CY的control往下发数据,看看能否发下去

还有你的代码有两个地方不知道是笔误还是什么,第一个是CreateEvent里边最后一个参数,字符串前应该加  L"" 转成宽字符Unicode;;不知道你是什么环境
我这边是提示报错的,需要加L;;另外就是buffer还是buffera的问题,这个不是很重要。。


使用特权

评论回复
6
zjh12138|  楼主 | 2018-6-2 16:54 | 只看该作者
wsmysyn 发表于 2018-6-2 14:38
代码应该没有问题。

我刚好手边有环境,也试了,是可以的。固件是一个EP2和EP6的loopback,EP2 out EP6  ...

我试过了,ep2端点的fifo是空的,我的程序输出失败后用CyConsole可以输出;
buffera是笔误;
加L报错:不能将参数 4 从“const wchar_t [10]”转换为“LPCSTR”

使用特权

评论回复
7
zjh12138|  楼主 | 2018-6-2 17:07 | 只看该作者
wsmysyn 发表于 2018-6-2 14:38
代码应该没有问题。

我刚好手边有环境,也试了,是可以的。固件是一个EP2和EP6的loopback,EP2 out EP6  ...

刚才改了一下代码,终于好使了
原因可能是我的endpt是全局变量,因为有几个地方都要用到,在别的地方调用USBDevice->EndPointOf(0x02),现在改成每个用到ep2的地方都分别调用USBDevice->EndPointOf(0x02)就可以了(不过我bulkin也是这样,但是可以输入)

使用特权

评论回复
8
wsmysyn| | 2018-6-2 17:51 | 只看该作者
zjh12138 发表于 2018-6-2 16:54
我试过了,ep2端点的fifo是空的,我的程序输出失败后用CyConsole可以输出;
buffera是笔误;
加L报错:不 ...

那估计是环境设置问题了,能正常就行。。。

使用特权

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

本版积分规则

1

主题

5

帖子

0

粉丝