阅读:2706回复:12
68013:谁偷走了我的带宽?
测板板子的USB速度,2.0下最高只有6.5MByte/s,1.1下最高只有240kByte/s,跟理论速度差太远了吧?2.0下应该可以到40M/s,1.1下应该可以到800k/s的。相同的USB端口用HDTone测移动硬盘可以到23M/s。问题会出在哪呢?
68013A工作于Slave FIFO模式,测试时用板上的CPLD检测FLAG,只要不是FULL就往里写。写入速度最大6.25M Word/s,也就是12.5M Byte/s。上位机用的是CyAPI开发包和CyUSB.sys的驱动,只管使劲地读: while (1){ PacketLength=512; USBDevice->BulkInEndPt->XferData((unsigned char*)Buf,Dlg->PacketLength); } 就这样速度怎么也起不来,哪里出了问题呢?不会是CyUSB驱动吧?使用过的朋友指点一下 |
|
沙发#
发布于:2007-12-01 16:31
看68013的datasheet 里面有slave fifo方式的时序图,从图上看出最大速度只能到8Mbyte/s
|
|
板凳#
发布于:2007-12-01 17:38
我现在只能达到8Mbytes/s,
是不是只能这么快了. 还有办法吗? |
|
地板#
发布于:2007-12-01 20:05
异步Slave FIFO write写周期是120ns,但是可以写16bit的数据啊,应该是8M Word/s,至少可以到16MByte/s了。我用12M/s的速度写入应该看不到Full Flag的,实际full Flag差不占了一半了。
|
|
地下室#
发布于:2007-12-01 20:24
现在很怀疑是Cyusb驱的问题,但无法确认。。。
|
|
5楼#
发布于:2007-12-01 23:50
终于2.0下做到11.2M/s了,接近于CPLD写FIFO的12.5M/s。应该可以达到这个速度的,提不上来了。IFCLK没接到CPLD上,没办法用同步slave fifo测更高的速度。
提高速度的办法很简单把下面的PacketLength换成比较大的值,如32768就好了。。。。 while (1){ PacketLength=512; USBDevice->BulkInEndPt->XferData((unsigned char*)Buf,Dlg->PacketLength); } 看Full Flag的波形,还是时不时有一小段高,可能PC机做为多任务的不可能一直在接收。提高写FIFO的速度应该还可以提高速度。 但是在1.1下的速度还是惨不忍睹的240k/s。难道是68013对full speed支持得不好?看Full flag的波形,连续8段写入,然后一大段等待。为什么有8段连续写想不通。 |
|
6楼#
发布于:2007-12-02 10:47
楼主可否将固件和cpld及应用程序共享一下
发给我也可以:tomlih@tom.com 谢谢 |
|
7楼#
发布于:2007-12-02 14:27
固件用的是开发包自带的fw,把EP配好就行了。
CPLD是个测试程序,实际用DSP控制的。 assign USB_D=16'h0; assign USB_nRD=1'b1; assign USB_nOE=1'b1; assign USB_A=2'b10; assign PKTEND=1'b0; // USB packet end reg [1:0] WE_Count; reg WEEn; always @(posedge CLK) //25MHz if (WE_Count[1:0]==2'b00) if (FLGB) WEEn<=1'b0;//Fifo full else WEEn<=1'b1; //fifo not full always @(posedge CLK) WE_Count<=WE_Count+1'b1; assign USB_nWE=~(WE_Count[1] & WEEn); assign nSLCS=1'b0; // USB select |
|
8楼#
发布于:2007-12-03 23:15
你好,我想问一下,PC端编程时,如何用CY提供的库,除了几个头文件和.lib文件,是不是要先在PC机上安装一个开发包,我PC机用的是ezusb.h中的函数,但用CY的库时,总是提示找不到设备,不知道是怎么回事,多谢了
|
|
9楼#
发布于:2007-12-04 22:11
我用的是cyapi.h,用起来比ezusb.h简单的多
|
|
10楼#
发布于:2007-12-05 11:34
用户被禁言,该主题自动屏蔽! |
|
11楼#
发布于:2007-12-05 13:20
我测试过cy的开发板子光数据传输能到42M/s.
|
|
12楼#
发布于:2007-12-07 19:12
异步的SlaveFIFO方式速度是不高,使用同步SlaveFIFO方式,可以到5~48M的IFCLK,我测过,可以达30多M以上,但是FullFlag有时有问题,不知道是什么原因,有时整个FIFO就乱了,PC上收不到数据,需要用FIFORESET寄存器(大概是这个名字)进行复位又可以继续传输了。
快速的传输应该要使用同步在好,我现在是使用异步传输大概6M/s。 |
|