[USB 控制器] CYUSB3014,如何实现实时自动传输

[复制链接]
468|20
| 2019-9-22 14:44 | 显示全部楼层

你有什么打算呢?或者你想知道什么?

使用特权

评论回复
 楼主 | 2019-9-22 14:48 | 显示全部楼层
系统:FPGA+CYUSB3014,FPGA实时的将数据传输给CYUSB3014芯片,但是在PC端如何将数据及时取出来呢?

使用特权

评论回复
 楼主 | 2019-9-22 14:49 | 显示全部楼层
很多网友的意见谈到要开发一个上位机软件来实现,开发上位机,只是为了读取CYUSB3014中的数据,数据流向是一个单向的过程,开发的环境是什么,或者说用什么软件进行开发?

使用特权

评论回复
 楼主 | 2019-9-22 14:50 | 显示全部楼层
用什么编程语言进行开发?如何开发,思路是什么?

使用特权

评论回复
| 2019-9-22 14:53 | 显示全部楼层
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

使用特权

评论回复
| 2019-9-22 14:59 | 显示全部楼层
按照手册来开发,还是比较容易的。用c++吧。

使用特权

评论回复
 楼主 | 2019-9-22 15:02 | 显示全部楼层
你指的手册是什么手册,官方上专门讲上位机开发的手册么?

使用特权

评论回复
 楼主 | 2019-9-22 15:06 | 显示全部楼层
非常感谢你的建议,目前环境准备用VS,编程语言用C++,不过这个编程的思路还是不够清晰

使用特权

评论回复
| 2019-9-22 15:09 | 显示全部楼层

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

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

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

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

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

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

使用特权

评论回复
 楼主 | 2019-9-22 15:12 | 显示全部楼层

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

使用特权

评论回复
| 2019-9-22 15:17 | 显示全部楼层

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

使用特权

评论回复
| 2019-9-22 15:19 | 显示全部楼层

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

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

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

使用特权

评论回复
 楼主 | 2019-9-22 15:24 | 显示全部楼层
Cycontrol这个软件不能实现自动传输吧,我有一个问题,因为我的系统是这样的,FPGA有大量的数据需要通过USB接口传输给上位机,并且数据是周期性的,每个周期内在控制信号有效的时候才会传输一帧数据。Cycontrol这个软件每次传输都需要点一下star按钮,不太符合实时自动的需要,所以才会想要开发一个上位机。

使用特权

评论回复
 楼主 | 2019-9-22 15:25 | 显示全部楼层
还有一个问题就是,我的系统是否可以直接利用stream这个传输的,官方自带Streamer这个软件能否将数据存储起来?

使用特权

评论回复
 楼主 | 2019-9-22 15:28 | 显示全部楼层
目前来说,C++和C#都没弄过,如果需要开发上位机,可能需要对这两个语言入门一下

使用特权

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

使用特权

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

使用特权

评论回复
| 2019-9-22 15:39 | 显示全部楼层
你的数据需要全部保存,还是可以覆盖的那种,类似于摄像头实时画面那种?,(不是录像功能)
     一般这种都是开辟一帧大小的空间或者几倍大小用来缓存一下数据,如果全部保存的话,需要及时存盘,而不是都保存在内存。

使用特权

评论回复
| 2019-9-22 15:53 | 显示全部楼层
有C的基础,比较好的话,入门很快(精通是后话,那个需要时间),就是多了个面向对象;C++是C和对象,C#是完全面向对象;
     都是类C语言;C能看得懂,C++和C#差不多看懂一半了,不懂的百度;

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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