Secret_Garden
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2008-02-26
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:2359回复:17

我的USB设备传输速度怎么只能到99KB/S???

楼主#
更多 发布于:2003-04-17 08:30
我用的D12,与网上流行的程序差别不大
为什么测试速度只有99KB/S?
哪位大侠猜测一下速度瓶颈在哪里?
或者给个调试建议,以确定问题所在
感激不尽!
Secret_Garden
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2008-02-26
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-17 17:24
哪位大侠就贡献一滴宝贵的口水吧!
现在速度是120KB/S
我总不能拿着120K/B的USB做产品吧,那不是吭客户吗?
好歹也要上到300K吧
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-17 17:37
1年前讨论过。主要的就是driver里面每次submitsrb的时候,发送大的buffer。其次就是app和driver之间,以及firmware里面处理的效率要高。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
Secret_Garden
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2008-02-26
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-17 20:44
老兄,SubmitURB的缓冲区大小是由应用程序提交的
这个缓冲区是受USBD.sys这个类驱动限制的,我们不
可能改的
你说的跟没说一样,我也知道就是这几点原因之一

Li Li
驱动牛犊
驱动牛犊
  • 注册日期2002-11-14
  • 最后登录2003-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-21 10:01
我想你得先描述一下你的USB设备结构,比如数据从PC到USB
之后然后通过什么端口到达什么设备,如果这个数据流程中有自定义传输协议的地方最好能加以说明,加上每个接口数据传输速率的设置,这样的话就能大概能判断瓶颈在何处了

  :cool:
Always!978
驱动小牛
驱动小牛
  • 注册日期2002-05-09
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-21 10:40
1年前讨论过。主要的就是driver里面每次submitsrb的时候,发送大的buffer。其次就是app和driver之间,以及firmware里面处理的效率要高。


这个大的buffer是不是最大就是4096?还是可以更大?
Tomorrow Never Die
plasma
驱动小牛
驱动小牛
  • 注册日期2002-02-19
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-21 13:05
根据时时性的要求开辟最大的 buffer ,比如1024 2048 4096 ... 64*n,最大64K以内。
每次读写请求也尽量大写,比如1024 2048 4096,当然驱动也要支持这么大每次读写量。
另外下位机处理速度也要足够快。

USB1.1峰顶速度1MByte/s
Secret_Garden
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2008-02-26
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-21 14:45
这位大侠说得有理,我现在这样做了一些测试
初步确定瓶颈在固件程序
而与应用程序和驱动程序无关
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-22 12:18
哪位大侠就贡献一滴宝贵的口水吧!
现在速度是120KB/S
我总不能拿着120K/B的USB做产品吧,那不是吭客户吗?
好歹也要上到300K吧


大虾,我也在做D12,它的管道最大一次只能传64个字节,我把一个128K 的SRAM的数据通过D12传到电脑,需要读很多很多次,我现在固件程序的做法是:读取SRAM中64个字节,存入MCU的缓冲区,发送到D12,计算机读取这64个字节,固件判断D12缓冲区是否被清空,如是,继续读数据,发送……我感觉这样做好象很笨,不知道大虾的做法如何,能否指点一下?不胜感激!

我的联系方法:QQ:53984310,E―MAIL:nishuiping@hotmail.com

希望能够得到你的回音!
Secret_Garden
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2008-02-26
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-04-22 12:53
基本就是这个过程
只不过最好用中断方式
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-04-22 15:46
基本就是这个过程
只不过最好用中断方式
 

能不能讲详细点,用中断方式传输吗,好象中断方式速度更慢啊,我觉得bulk方式已经很慢了,你的驱动是自己作的,还是用现成的?
Secret_Garden
驱动牛犊
驱动牛犊
  • 注册日期2002-03-11
  • 最后登录2008-02-26
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-04-22 17:24
不是说用中断传输,还是用批量传输
是单片机用中断方式连续发送数据,
而不是查询缓冲区是否为空
你可以参照philips提供的源程序
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-04-23 10:01
非常感谢!我还想问一下:你在读数据的时候,是在应用层还是驱动程序中反复的读数据?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-04-23 15:58
应该是在应用层反复的调用deviceiocontroll或者readfile读数据,一次最多申请64k,设备驱动把请求发到下层驱动(usbd,usbdi)他们负责反复的向设备发送in令牌,直到所有数据都得到后才返回到设备驱动,然后设备驱动返回到应用层。
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-04-27 02:11
其实这主要是mcu的速度太慢了!我现在做的u盘每秒可以写550k,读650k!当然每次发送的数据包的大小也很关键的!32~64K最好!
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-04-28 10:44
不是说用中断传输,还是用批量传输
是单片机用中断方式连续发送数据,
而不是查询缓冲区是否为空
你可以参照philips提供的源程序
 


哪个源程序,我这儿没有,可以给我发个过来吗?

先谢了1
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-04-28 11:07
我是自己写的!
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-04-28 11:08
我是自己写的!但我用的不是D12,我的MCU自己有USB的!
游客

返回顶部