目前我们有个项目预研,要用USB2.0进行数据上传(由FPGA传至PC机),要求速率在16M bytes/s 以上。但目前速率最高仅8M ,现在已做了如下测试工作,初步判定速率瓶颈在CY7C68013与PC机之间。
测试系统结构:CPLD => CY7C68013 => PC 1、CPLD以8M/s连续产生16位并行测试数据至CY7C68013,即16M bytes/s 2、CY7C68013配置为SLAVE FIFO工作模式,单端点。 3、PC机对接收数据计数算出速率
测试过程及问题: 1、在不同配置的PC上进行测试:单核PC上测试最高速率为4M左右;双核PC为8M;但四核PC又仅5M。这些PC主板等配置也不同。 请教:USB的传输速率是否与主板、内存或CPU等硬件相关,该如何分析
2、将CY7C68013的端点缓冲区分别配置为双缓冲和四缓冲,或者将缓冲区大小分别配置为512和1024字节,速率均无明显变化。用示波器测CY7C68013的FIFO满信号有大约一半时间有效,空信号始终无效,故判断是PC未将数据及时读出。 为进一步验证,将FIFO设定为8位数据宽度,则CPLD的数据仅低8位有效,CPLD写入数据实际速率为8M bytes/s。此时在单核PC上测得速率为4M,测FIFO满标志大约有一半时间有效;在双核PC上测得速率为8M,测FIFO满标志极少有效,即数据被及时读出,故测试速率与CPLD写入速率一致。 再将FIFO设定为16位数据宽度,则CPLD的写入速率为16M bytes/s。此时在双核PC上测得速率为8M,FIFO满标志大约有一半时间有效,与8M/16M的比值一致。 以上试验基本验证是PC未及时从FIFO中读取数据,但PC应用层只是执行了接收数据操作,不知是否低层驱动的问题。 请教:我在网上搜索时很多案例速率瓶颈都是在USB芯片和外设之间,像我们这种USB芯片与PC间的较少,是否是我们什么配置有问题,我是做硬件的,对软件不怎么了解,临时来做这部分工作。请大家帮忙分析出现这种情况可能是哪些原因,或者提出一些分析试验方法也行,不胜感激! |