zhanggy_zju
驱动牛犊
驱动牛犊
  • 注册日期2003-10-04
  • 最后登录2004-10-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1127回复:4

请问我这样用FX2做批量传输的速度正不正常?

楼主#
更多 发布于:2003-10-10 21:01
我的主板只支持USB1.1
我编了个固件,开了EP2OUT和EP6IN做批量传输。
主机端的程序打开一个文件(比如source.dat),64字节64字节地传输给EP2,并相应地再从EP6传输回,也就是把source.dat传输后再作为target.dat保存。
但是当我传输一个4M左右的文件时,居然用了将近一分钟时间。
这样是不是太慢了啊?
我用给U盘传相同的文件,也不过是一眨眼的功夫。
谢谢!

最新喜欢:

lmhhlmhhlmhhlm...
zyz1974
驱动小牛
驱动小牛
  • 注册日期2002-11-06
  • 最后登录2005-06-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-10 21:22
你是怎么实现文件传输的?自己写的应用程序吗?如果是那样的话就太慢了点,如果可以的话你能否把你的应用程序发给我,我来传一下数据,看看如何?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-10 21:25
好像是慢了点,不过这里也许有其它的原因,你可以再测试一下不要往回读,也就是说当ep2满了,就直接把它rearm,并且每次传输多传一些数据,如32k或者64k(cy的驱动限制每次bulk最多能传到驱动里65535字节的数据)再测一下时间试试。

咱们来算一下:

其实你这样测并不是只传了4m的数据,而是8m,一来一回呀,这样8000k/60 = 133KB/s,内部的8051是4时钟周期的,也就是说传输4m数据至少需要4m*4*2 = 32m个时钟周期,这是32m/24m = 1.33s,另外你一次传输64字节和下一次传输之间有0.1-0.5ms的软件损耗(如果你每次传输512,那么两个512之间会有这个时间损耗),咱们就按0.2ms算吧,8m/64 = 125k,250k*0.1ms = 25s,也就是说大致的时间损耗是大约25s.那么实际传输用的时间(不包括数据传输过程中的协议损耗)35s,这样速度是8000k/35 = 228kB/s,离理论的速度还是差很远呀,不过也还算不是很低吧。

如果你每次传输不是64,而是64k的话,那会更快一些。

以上的都是估计,仅作参考而已,千万不要写到论文里去,否则可就糗大了!
zhanggy_zju
驱动牛犊
驱动牛犊
  • 注册日期2003-10-04
  • 最后登录2004-10-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-10 21:59
请教jinghuiren大侠,
我是用EZUSB的通用驱动程序编的。
对于BULK OUT传输:
int Result0 = DeviceIoControl (
               myDEVICEHANDLE,    IOCTL_EZUSB_BULK_WRITE,    &bulkControl,    sizeof(BULK_TRANSFER_CONTROL),
               &outBuffer[0],    outPacketSize,
               &nBytes,
               NULL);
其中outBuffer[]是文件中的64字节数据,outPacketSize是封包大小。
1.1中不是规定批量传输数据最大长度是64吗?那怎么能像你说的那样64k来传输呢?整个FX2也只有64k的在片外部ram啊?
谢谢!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-11 13:19
bulk的最大包是64,可是你如果传64k到驱动里,驱动会自动把这些数据分成一个一个的64发给设备的,至于设备端收到数据改怎么办,那就看你的要求了,你可以把它写到64k的ram里(其实是128k,但是只有一半能用),也可以直接废弃。
游客

返回顶部