icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2093回复:9

usb的传输速率问题

楼主#
更多 发布于:2002-07-31 10:10
请教各位行家,我做的DSP+9603 与PC机的通信(BULK传输方式),一测,MY GOD ,读写速才31KB/s 左右,我知道用1.1标准要到达1M几乎是不可能的,但这跑得为勉也太慢了一点吧。还不如用并串口。还谈什么 usb的优势--- 出了什么问题??我只接了一个usb设备,不应该存在总线忙的问题DSP那边的固件程序中的读写也没太多的冗余啊    

最新喜欢:

PhorittoPhorit...
westbb
驱动牛犊
驱动牛犊
  • 注册日期2002-07-15
  • 最后登录2002-10-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-05 20:46
这几位老兄所言即时
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-02 13:35
well done
icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-02 11:28
是这样的,因为我要进行大批量数据传送,而一个buffer是装不了的,我在应用程序中用了个循环,这些数据同时又要进行一些格式转换后,再写到指定文件中去(这种做法使应用程序很不优化,可以考虑其它方法解决,如采用线程的方法,另设计一个线程来进行数据处理及对文件的读写,这样才不至于影响传输速度)。

我前面说到的buffer都指的是驱动程序和应用程序中的buffer,这当然是在驱动程序和应用程序同时都要设置的,而wMaxPacketSize是在usb设备配置描述符中设置的,写在固件里。

现在我的wMaxPacketSize为64bytes  驱动及应用程序中的buffer为16K,速度可达200K左右


[编辑 -  8/2/02 by  icnet]
Phoritto
驱动小牛
驱动小牛
  • 注册日期2002-06-18
  • 最后登录2002-11-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-02 08:39
引用:当然,MCU的频率也不要太低了,还有总线太忙也会影响usb的bulk传输。还有应用程序的收发效率也会有些影响,如一边收,一边对数据进行转换,再写入别一文件中,这些很费时的

我想问问那你是咋样做的了。你一边收,一边对数据进行转换,再写入别一文件中 你是做在那里了?固件还是应用程序?
还有就是你说的BUFFER 的大小不受wMaxPacketSize所限制  请问你是咋样设置的了?
icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-01 13:42
我改了驱动程序中的接发buffer 现为4096bytes,现在速度有了很大的提高。有些想法,望对同路人有些参考,有纰漏,也请指正,大家一起提高。

这些天,本人发现影响bulk方式传输的速度的因素有:
1。固件程序的收发效率(含一些处理,如一边运算处理一边收发)

2。我采用的usbn9604采用bulk传输时,一次wMaxPacketSize为64bytes,要想更快,要采用DMA,不过这辋硬件电路会需一点改动。
所以尽量在一次rx1,tx1中用完64bytes。

3。驱动程序中的buffer可以适量地加大,这样应用程序中调一次readfile(),writefile()就可以收发更多的数,可以尽量避免频繁调度下层驱动(刚开始我的buffer只有64bytes,所以很慢,这个buffer的设定不受控制芯片的wMaxPacketSize所限制

4。当然,MCU的频率也不要太低了,还有总线太忙也会影响usb的bulk传输。还有应用程序的收发效率也会有些影响,如一边收,一边
对数据进行转换,再写入别一文件中,这些很费时的
icnet
驱动牛犊
驱动牛犊
  • 注册日期2002-04-05
  • 最后登录2004-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-01 10:29
先感谢huoxy

不过ReadFile()中的读buffer取得再大,一次只能接收64bytes啊
因为我采用的国半的usbn9604好像在bulk传输方式下一次wMaxPacketSize 为64bytes.可能要采用DMA方式才行。
huoxy
驱动小牛
驱动小牛
  • 注册日期2002-03-01
  • 最后登录2014-02-24
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-01 09:17
1、应用程序的“读”缓冲区应该大一些,也就是说每次ReadFile不要少于1K字节,否则,频繁调用驱动会占用太多的时间。
2、如果对速度要求较高,可以尝试硬件DMA。

我的系统如下:
MCU:MSP430,4M
PDISUSBD12:BULK模式,没有使用硬件DMA。
PC机:C500,128M,Winxp,
可以达到160k/s.
好好学习,天天向上,做一个乖宝宝。
hgc4480
驱动牛犊
驱动牛犊
  • 注册日期2002-07-26
  • 最后登录2007-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-31 18:45
应与你DSP的速度和其读写操作的算法有关
hgc4480
sunkai
驱动中牛
驱动中牛
  • 注册日期2002-12-31
  • 最后登录
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-31 11:26
跟应用程序也有关系,如果主机读操作的效率很低也会慢.
游客

返回顶部