pastroal
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2005-09-30
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1719回复:11

到底有没有人会阿,我快要对这个论坛失去信心了

楼主#
更多 发布于:2002-10-10 12:53
急急的问:
1。USB驱动的IoCtrl可否用Direct_IO(MDL)的方式访问内存?
   是否只有ReadFile和WriteFile才可以用MDL的方式那?
2。如果用Buffer_IO的方式,Buffer的大小是否有限制?
   为什么我只能从应用程序传给驱动130个字节左右?
3。我用Bulk端点读写数据,为什么速率只有250k左右,要想提高Bulk
   传输的速率,该怎么做啊?
   如果从Buffer到Direct方式,是否能加快速率那?
   从应用程序到驱动的IRP传输是否很消耗时间,导致我USB的速率上不去啊?
   同步和异步读写会不会对传输速率有影响?
任务很急,大侠出手!!!
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-10 13:43
1、IoCtrl缺省就是Buffer方式,应该是只有ReadFile和WriteFile才可以用MDL的方式,我不知道有没有别的方法。
2、Buffer大小最好不要超过64K。只能传给驱动130个字节左右,是你程序有问题。
3、250k Bytes吗?不少了。设备如果是用DSP工作,应该可以到1MBytes。
4、时间消耗应该不是在驱动的IRP传输,具体说不是在主机方,应该是在设备,主机拷贝64k的数据现在的机器不会超过1ms的。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
pastroal
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2005-09-30
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-10 14:39
感谢上面的解答!

我底下的设备是蓝牙模块。

我现在的做法是两台PC和蓝牙模块之间USB连接,蓝牙无线传输的理论数值是700Kbps,现在我测到的速率是两台PC(通过蓝牙)之间通信的速率。

我们希望PC之间这样无线的传输能到4、5百Kbps。但现在是100K左右。250K是把蓝牙传输包长加到最大的结果。

我通过测试可以确定速率的瓶颈在我们主机端的上层应用程序以下(可能USB驱动,和蓝牙设备)。

我今天又作了一个测试,我在发端和收端都作了流量统计,确定收端和发端流量一样,证明不是收端来不及收。

我又作了一个测试,直接向USB设备写大量数据包,结果得到1M左右的速率,这可否说明速率的瓶颈在蓝牙设备来不及发送呢?

pastroal
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2005-09-30
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-10-10 14:43
我补充一下,我说的都是bps.
我又看了资料,MDL可以用于IOCTRL,在设置#define IOCTRL 的时候可以修改。但我改成MDL还是没有速率上的提高:(


tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-10-10 15:31
Bulk传输的块大小你定的是多少?一般可以定到32KB的话,速度就应该是最快了。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
pastroal
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2005-09-30
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-10-10 15:57
Bulk传输的块大小你说的是驱动里面的
pipe 的 wMaxPacketSize吗?它是固定的片子写死的,64字节
如果是MaximumTransferSize,我设的是2048字节,这个值的设置有用嘛?
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-10-10 16:07
Pipe 的MaximumTransferSize这个值当然有用了,它决定一次URB传输数据量。建议你改为32K或64K,并且修改驱动程序和应用程序,一次URB处理MaximumTransferSize数据传输,速度应该会提高的。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
pastroal
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2005-09-30
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-10-10 16:24
MaximumTransferSize这个值我在我的USB客户驱动程序里面不使用的阿,而且我一次传下去的包最多672个字节(蓝牙片子规定的),需要把它写到这么大嘛?是不是这个值在USBD.sys里有用?
pastroal
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2005-09-30
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-10-10 16:30
斑竹阿,我是新手,请问一下,我该怎么给你分?不会用,不好意思:)
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-10-10 16:33
你第一个帖子下有给分按纽啊。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-10-10 16:35
MaximumTransferSize这个值我在我的USB客户驱动程序里面不使用的阿,而且我一次传下去的包最多672个字节(蓝牙片子规定的),需要把它写到这么大嘛?是不是这个值在USBD.sys里有用?
 

就是USBD要用,一次URB 672和32768你想速度会差多少呢?
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
pastroal
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2005-09-30
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-10-10 16:46
好的,我马上就试试
我刚才又作了一个这样的测试
直接把100个200字节的包发到BULK管道,不进行无线传输了
我发现速率有1Mbps以上。
现在是否能说明主机端是足够快的呢?
游客

返回顶部