打印

CYUSB3014,如何实现实时自动传输

[复制链接]
6473|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
系统:FPGA+CYUSB3014,FPGA实时的将数据传输给CYUSB3014芯片,但是在PC端如何将数据及时取出来呢?
经过网上的调研之后,很多网友的意见谈到要开发一个上位机软件来实现,有几个问题?
1.开发上位机,只是为了读取CYUSB3014中的数据,数据流向是一个单向的过程,开发的环境是什么,或者说用什么软件进行开发?

2.用什么编程语言进行开发?

3.如何开发,思路是什么?
沙发
wsmysyn| | 2018-4-23 13:20 | 只看该作者
本帖最后由 wsmysyn 于 2018-4-23 13:23 编辑

USB协议就是这样的,必须要主机来询问Device是否有数据需要上传,有的话,Device将数据打包上传,没有的话回复NACK;device不能主动发送数据的;
所以肯定是主机要不停的询问Device
1、上位机的开发环境,VS就可以,VS2008-VS2017都可以,VC6的话可能有点老了

2、可以用C++,调用Cypress提供的CyAPI.lib,使用MFC开发软件界面;也可以使用CyUSB3.dll用C#在.net 上开发

3、大体方法就是,PC一个线程不停的发送IN请求包,调用函数就是EPx->XferData;
其他线程处理数据和响应UI

4、看自己产品的要求,需要保证带宽但不保证准确率可以用ISO同步传输(保证实时性,比如直播视频,直播音频),如果需要保证准确率但不保证带宽用bulk批量传输(类似文件传输的U盘等等)。。

下面是3014 cypress的官方资料。。还算比较详细的
http://www.cypress.com/documentation/software-and-drivers/ez-usb-fx3-software-development-kit?source=search&keywords=CYUSB3014&cat=software_tools

使用特权

评论回复
板凳
poison0| | 2018-4-29 17:55 | 只看该作者
按照手册来开发,还是比较容易的。用c++吧。

使用特权

评论回复
地板
花开-半夏|  楼主 | 2018-5-2 10:35 | 只看该作者
poison0 发表于 2018-4-29 17:55
按照手册来开发,还是比较容易的。用c++吧。

你指的手册是什么手册,官方上专门讲上位机开发的手册么?

使用特权

评论回复
5
花开-半夏|  楼主 | 2018-5-2 10:36 | 只看该作者
wsmysyn 发表于 2018-4-23 13:20
USB协议就是这样的,必须要主机来询问Device是否有数据需要上传,有的话,Device将数据打包上传,没有的话 ...

非常感谢你的建议,目前环境准备用VS,编程语言用C++,不过这个编程的思路还是不够清晰

使用特权

评论回复
6
wsmysyn| | 2018-5-2 10:55 | 只看该作者
花开-半夏 发表于 2018-5-2 10:36
非常感谢你的建议,目前环境准备用VS,编程语言用C++,不过这个编程的思路还是不够清晰 ...

什么编程语言无所谓,都是个工具。

不知道你是什么应用
以CCD相机这种应用,CMOS一直发送数据到PC的方向

一个线程是while 进行XferData的操作,将数据保存到缓存中,可以按照一帧图像的大小开辟一个buffer,或者倍数大小;

一个线程将传来的数据进行转换图像的转换,显示;
等等
尽量减少数据的拷贝,也就是用零拷贝机制

主线程相应UI或者其他,类似这样的。

具体怎么用的看官方的API文档,SDK开发包里都有,driver和API文档,都有使用说明,另外还有官方写的cycontrol UI界面的有源码,但是是C#的,有个stream的测速的UI是C++的,也可以参照那个,看一下就好了。

使用特权

评论回复
7
花开-半夏|  楼主 | 2018-5-2 11:07 | 只看该作者
wsmysyn 发表于 2018-5-2 10:55
什么编程语言无所谓,都是个工具。

不知道你是什么应用

其实,我就是把数据通过USB传输给PC端就行了,数据只要接收到就可以了,后续的处理是在别的地方进行,做硬件的,不太懂这些C++和C#。应该是使用bulk这种传输方式,保证数据的正确性。
按照你说的,我是否现在就直接去看一下SDK开发包中的API文档,这个上位机的开发实在是不知道从哪里开始,你完全可以把我当成一个小白。
希望你可以提点建议,给我一个学习的方向,谢谢

使用特权

评论回复
8
wsmysyn| | 2018-5-2 11:43 | 只看该作者
花开-半夏 发表于 2018-5-2 11:07
其实,我就是把数据通过USB传输给PC端就行了,数据只要接收到就可以了,后续的处理是在别的地方进行,做 ...

那就看负责哪块了,

如果只是硬件部分保证硬件固件部分没问题,只是需要用辅助工具确认数据传输是否正常,可以直接使用Cycontrol那个软件就可以,在SDK里也有关于Cycontrol的使用说明,那是个通用的软件,可以进行对某个端点的数据读取和写入。这种的可以不需要再开发一个上位机,也可以暂时不用看API文档

如果上位机也需要你开发的话,那API还是要看的。

C++写UI的话,也是可以,对你编程的水平要求比较高,可以基于MFC,或者使用QT
C#高级语言,语法简单,开发效率比较高,执行效率可能不如C++写(前提是C++要写好)
不过搞电子的也不是专业的软件人员,使用一些效率高的来开发还是不错的选择

C++写UI,可能一天都在搞界面布局,功能都没实现
C#写UI,可能几个小时界面就搭好了,然后其他时间用来写业务代码

使用特权

评论回复
9
花开-半夏|  楼主 | 2018-5-2 14:35 | 只看该作者
wsmysyn 发表于 2018-5-2 11:43
那就看负责哪块了,

如果只是硬件部分保证硬件固件部分没问题,只是需要用辅助工具确认数据传输是否正常 ...

Cycontrol这个软件不能实现自动传输吧,我有一个问题,因为我的系统是这样的,FPGA有大量的数据需要通过USB接口传输给上位机,并且数据是周期性的,每个周期内在控制信号有效的时候才会传输一帧数据。Cycontrol这个软件每次传输都需要点一下star按钮,不太符合实时自动的需要,所以才会想要开发一个上位机。
还有一个问题就是,我的系统是否可以直接利用stream这个传输的,官方自带Streamer这个软件能否将数据存储起来?

使用特权

评论回复
10
花开-半夏|  楼主 | 2018-5-2 14:36 | 只看该作者
wsmysyn 发表于 2018-5-2 11:43
那就看负责哪块了,

如果只是硬件部分保证硬件固件部分没问题,只是需要用辅助工具确认数据传输是否正常 ...

目前来说,C++和C#都没弄过,如果需要开发上位机,可能需要对这两个语言入门一下

使用特权

评论回复
11
花开-半夏|  楼主 | 2018-5-2 14:36 | 只看该作者
wsmysyn 发表于 2018-5-2 11:43
那就看负责哪块了,

如果只是硬件部分保证硬件固件部分没问题,只是需要用辅助工具确认数据传输是否正常 ...

目前来说,C++和C#都没弄过,如果需要开发上位机,可能需要对这两个语言入门一下

使用特权

评论回复
12
wsmysyn| | 2018-5-2 15:46 | 只看该作者
花开-半夏 发表于 2018-5-2 14:35
Cycontrol这个软件不能实现自动传输吧,我有一个问题,因为我的系统是这样的,FPGA有大量的数据需要通过U ...

1、自动传输也是软件实现;Cycontrol这个是有源码的,可以在此基础上进行修改(是C#版本),比如在其他线程上用while循环一直进行bulkin端点的XferData操作就可以实现这种“自动“”接收数据。
线程的话可以用Threading,或者Task;不用线程的话,会阻塞UI的,软件就不响应了,就是假死状态。




2、streamer那个我没看源码,应该没有保存功能,只是做一个测试用,数据都被后面的覆盖掉了;倒是可以基于他的源码修改;
     你要保存到哪里?最好不是内存,可以存盘,保存到文件里就行;你大概多大的速度?几十MB,还是上百MB?几十的话,问题不大,几百的话,需要注意一下,可能的瓶颈在哪。

3、你的数据需要全部保存,还是可以覆盖的那种,类似于摄像头实时画面那种?,(不是录像功能)
     一般这种都是开辟一帧大小的空间或者几倍大小用来缓存一下数据,如果全部保存的话,需要及时存盘,而不是都保存在内存。

4、有C的基础,比较好的话,入门很快(精通是后话,那个需要时间),就是多了个面向对象;C++是C和对象,C#是完全面向对象;
     都是类C语言;C能看得懂,C++和C#差不多看懂一半了,不懂的百度;

使用特权

评论回复
13
一晚一挽| | 2022-9-15 18:58 | 只看该作者
wsmysyn 发表于 2018-5-2 10:55
什么编程语言无所谓,都是个工具。

不知道你是什么应用

这个CYCONTROL UI 源码在哪里下载呢?可以分享一下文件吗?谢谢

使用特权

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

本版积分规则

1

主题

7

帖子

2

粉丝