CY68013-FX2速度真的达到了50MB/s(W64平台)
改了很久,最后觉得用IOCTL操作太麻烦,所以直接用CyUSB操作了。单线程读写(BulkLoop)最快25MB/s,4线程才能达到50MB/s,所以想要达到高带宽,就只好用读写数据池了。发现CyUSB速度比EzUSB要慢不少,Ez单线程就能达到35MB/s,而Cy却慢得多。可能是驱动或者操作的优化问题吧。用异步模式可能会好些。 理论上不可能。 health 发表于 2012-10-4 23:55 static/image/common/back.gif理论上不可能。
不可能是因为你没做到。用数据池方式暂存数据,然后批量读写,完全可以达到。 贴出代码 mcuprogram 发表于 2012-10-5 10:10 static/image/common/back.gif
贴出代码
USB+FPGA,FPGA做BulkLoop,上位机多线程同时读写。FX2配置为SlaveFIFO,IFCLK Out,FPGA使用源同步模式工作,USBIF时钟48MHz,内核时钟96MHz。传输使用32KB包,而不是512B包。FPGA端使用经优化后的读写方式,可以达到1w/1cyc。
private void btnBulkLoop_Click(object sender, EventArgs e)
{
System.Threading.Thread thWrite = new System.Threading.Thread(new System.Threading.ThreadStart(BulkWrite));
System.Threading.Thread thRead = new System.Threading.Thread(new System.Threading.ThreadStart(BulkRead));
thWrite.Start();
thRead.Start();
}
public void BulkWrite()
{
byte[] buf = new byte;
for (int i = 0; i < FIFO_Cache.Length; i += buf.Length)
{
for (int j = 0; j < buf.Length; j++)
{
buf = FIFO_Cache;
}
int localError = 0;
int len = USBIO.WriteBuf(buf, outlocalError);
}
}
public void BulkRead()
{
int ErrorCnt = 0;
byte[] buf = new byte;
for (int i = 0; i < FIFO_Cache.Length; )
{
int localError = 0;
int len = USBIO.ReadBuf(buf, buf.Length, outlocalError);
for (int j = 0; j < len; j++)
{
if (buf != FIFO_Cache)
ErrorCnt++;
}
i += len > 0 ? len : 0 ;
}
if (ErrorCnt > 0)
MessageBox.Show(ErrorCnt.ToString());
}
这是带有校验的读写Loop测试函数,单线程OK,多线程不OK,因为不知道哪个线程发的包有没有被这个线程收到。 wye11083 发表于 2012-10-5 10:28 static/image/common/back.gif
USB+FPGA,FPGA做BulkLoop,上位机多线程同时读写。FX2配置为SlaveFIFO,IFCLK Out,FPGA使用源同步模式 ...
68013缓冲是512B,32K缓冲如何理解? NJ8888 发表于 2012-10-5 10:59 static/image/common/back.gif
68013缓冲是512B,32K缓冲如何理解?
如果你死板的用512B包传送,那你得用几十个线程才能达到饱和带宽。USB是队列式传输,包进去时是按队列的,你一次用512B的包,在1/8微帧就传完了,然而此时返回你的程序,早已产生巨大的延时。驱动每次最多可以传送65535B数据,这样一个大包可以占用64-128个微帧,总线利用率不就上去了? 我用EzUSB读写FPGA,但是读和写之间必需要加上很长的延时,可不可以不用延时的?加上就慢了 FDSOFT 发表于 2012-10-6 08:52 static/image/common/back.gif
我用EzUSB读写FPGA,但是读和写之间必需要加上很长的延时,可不可以不用延时的?加上就慢了 ...
为什么要加延时?驱动程序会给你做好。你只管读,不用管有没有数据,没数据自然是读不出来的。 哪位有相关的资料能弄个完整的工程吗. wye11083 发表于 2012-10-6 08:25 static/image/common/back.gif
如果你死板的用512B包传送,那你得用几十个线程才能达到饱和带宽。USB是队列式传输,包进去时是按队列的 ...
哪里有写说是最大65535B,假如大于会怎么样? 请问CyUSB和Ezusb有何不同?我有一个开发板CY7C68013A的,同样的芯片但是用ezusb的程序驱动总结检测不到 ffbiao 发表于 2012-10-26 09:23 static/image/common/back.gif
请问CyUSB和Ezusb有何不同?我有一个开发板CY7C68013A的,同样的芯片但是用ezusb的程序驱动总结检测不到 ...
API不同,所以老的驱动不支持新的接口,换了CyAPI就必须使用CyAPI。 mcuprogram 发表于 2012-10-25 10:37 static/image/common/back.gif
哪里有写说是最大65535B,假如大于会怎么样?
包长最大只有16位,你说最大能传多少? wye11083 发表于 2012-10-26 19:02 static/image/common/back.gif
API不同,所以老的驱动不支持新的接口,换了CyAPI就必须使用CyAPI。
没有做上位机的操作,单片机的编程应该FX2和FX2LP的代码是兼容吗?? mark 字数补丁 高速USB 480Mbps
最大 60MB/S
理论上说还是 50MB/S还是有可能的
但是 可能只是把数据丢过来 没有及时分析处理完吧? 恭喜,基本达到USB Bulk的理论最大值了。
理论最大值大约在52MBytes/s。 mark 这个可以有 怎么感觉CYAPI的访问方式好慢啊 学习了! 不错!学习了!{:lol:} wye11083 发表于 2012-10-26 19:02 static/image/common/back.gif
API不同,所以老的驱动不支持新的接口,换了CyAPI就必须使用CyAPI。
FPGA 做USB 一定要有USB device IC 吗? 如果用硬件语言 直接解析从PC 下来 经USB 的数据 ,可能吗? suxilong 发表于 2013-5-20 21:46 static/image/common/back.gif
FPGA 做USB 一定要有USB device IC 吗? 如果用硬件语言 直接解析从PC 下来 经USB 的数据 ,可能吗? ...
理论可以,但是你需要一片专用USB收发器(串并转换器)。68013的工作就是串并转换器,同时提供USB协议支持以及简单的控制功能。如果不用专用串并转换芯片,那么你需要对480Mbps信号跟踪以及锁定频率。这个FPGA是搞不动的,必须得带有PLL和VCO的芯片才行。 这个真可以 不错。在学习1{:victory:} 10.4.3.1 Transaction Counter
To use the Transaction Counter for FIFO “x”, load GPIFTCB3:0 with the desired number of transactions
(1 to 4,294,967,295; 0 = 4,294,967,296). When a FIFO-Read or -Write waveform is triggered
on that FIFO, the GPIF will transfer the specified number of bytes (or words, if WORDWIDE = 1)
automatically. 不明觉厉,曾经帮同学搞过FPGA与 CH341的论文 mark 学习CY68013-FX2速度 LZ可以用标准的上位机测试速度的软件测试一下,再帖一个图,如果能到50M,那非常快了。 官方的也可以到45MB/s, 但是没做数据校验,同步与校验也是个问题 mark!!!!!!!!!!!!!!! mark~~
老帖子翻出来好不好?
有关注功能就好了~
页:
[1]