打印

USB peripheral 模式,龟速

[复制链接]
2522|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
twicave|  楼主 | 2011-4-13 16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是ti的6747芯片的usb模块。
所有的代码都是自己写的。

主模式下下位机接U盘速度几乎与主机持平。
但是从模式下,现在测得只有25Mbps左右。这离480M也差太多了。
你们遇到过类似的情形吗?
能否对调试给点建议?

相关帖子

沙发
dqyubsh| | 2011-4-14 08:02 | 只看该作者
TI应该有自己的测试代码,他能做到多大速率?

这跟驱动程序关系很大,甚至跟主机缓冲区大小也相关,很麻烦的事情。建议去TI英文论坛问一下。

使用特权

评论回复
板凳
twicave|  楼主 | 2011-4-14 12:28 | 只看该作者
今天测试了一下。基本定位到了故障点。以下是一些建议:
1.除非特别的需要,尽量不要把你的数据包再拆分成更小的数据帧。
  一旦这样做了,那么你势必要做组帧的操作,然后就会有内存copy.
   这种操作在下位机会浪费大量时间。

2.上位机的驱动中尽可能地要实现timeout操作。或者,你的传输必须是非常精确的,完全没有容错。
  我的600K的传输分成了1200次IRP。估计频繁地IRP, kenerl态与User态的切换也会浪费很多时间
  -- 这一点无法验证。

使用特权

评论回复
地板
twicave|  楼主 | 2011-5-19 18:05 | 只看该作者
现在我可以做到一个大数据包的接收只使用一个IRP了。但是速度提高不多。
利用BusHound调试时发现一个问题:

如果用BusHound 发命令,然后收包,可以看到BusHound的Capture窗口中,只出现了两个数据帧。
但是如果用我的应用程序收发数据帧,用BusHound监控,可以看到数据接收被打乱成了多个不等长的数据帧。

这是怎么回事?
感觉这应该就是问题所在。

使用特权

评论回复
5
twicave|  楼主 | 2011-5-20 08:53 | 只看该作者
再次修正一下,
不使用BusHound收发时数据帧不是打乱成了多个不等长数据帧,
而是全都是512的数据帧,有1000多个,可能是数据量太大,有些被漏掉了。

为什么直接用BusHound收发时只有两个数据帧呢?
难道BusHound可以绕过驱动直接操作usb设备?

使用特权

评论回复
6
dqyubsh| | 2011-5-21 09:14 | 只看该作者
拦截IRP,可以用钩子。DDK说到了几种拦截方法,没细看。

如果能让每帧数据大于512,如1024,2048,估计可以大幅度提高速率。只是估计。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

44

帖子

0

粉丝