阅读:1719回复:11
到底有没有人会阿,我快要对这个论坛失去信心了
急急的问:
1。USB驱动的IoCtrl可否用Direct_IO(MDL)的方式访问内存? 是否只有ReadFile和WriteFile才可以用MDL的方式那? 2。如果用Buffer_IO的方式,Buffer的大小是否有限制? 为什么我只能从应用程序传给驱动130个字节左右? 3。我用Bulk端点读写数据,为什么速率只有250k左右,要想提高Bulk 传输的速率,该怎么做啊? 如果从Buffer到Direct方式,是否能加快速率那? 从应用程序到驱动的IRP传输是否很消耗时间,导致我USB的速率上不去啊? 同步和异步读写会不会对传输速率有影响? 任务很急,大侠出手!!! |
|
沙发#
发布于:2002-10-10 13:43
1、IoCtrl缺省就是Buffer方式,应该是只有ReadFile和WriteFile才可以用MDL的方式,我不知道有没有别的方法。
2、Buffer大小最好不要超过64K。只能传给驱动130个字节左右,是你程序有问题。 3、250k Bytes吗?不少了。设备如果是用DSP工作,应该可以到1MBytes。 4、时间消耗应该不是在驱动的IRP传输,具体说不是在主机方,应该是在设备,主机拷贝64k的数据现在的机器不会超过1ms的。 |
|
|
板凳#
发布于:2002-10-10 14:39
感谢上面的解答!
我底下的设备是蓝牙模块。 我现在的做法是两台PC和蓝牙模块之间USB连接,蓝牙无线传输的理论数值是700Kbps,现在我测到的速率是两台PC(通过蓝牙)之间通信的速率。 我们希望PC之间这样无线的传输能到4、5百Kbps。但现在是100K左右。250K是把蓝牙传输包长加到最大的结果。 我通过测试可以确定速率的瓶颈在我们主机端的上层应用程序以下(可能USB驱动,和蓝牙设备)。 我今天又作了一个测试,我在发端和收端都作了流量统计,确定收端和发端流量一样,证明不是收端来不及收。 我又作了一个测试,直接向USB设备写大量数据包,结果得到1M左右的速率,这可否说明速率的瓶颈在蓝牙设备来不及发送呢? |
|
地板#
发布于:2002-10-10 14:43
我补充一下,我说的都是bps.
我又看了资料,MDL可以用于IOCTRL,在设置#define IOCTRL 的时候可以修改。但我改成MDL还是没有速率上的提高:( |
|
地下室#
发布于:2002-10-10 15:31
Bulk传输的块大小你定的是多少?一般可以定到32KB的话,速度就应该是最快了。
|
|
|
5楼#
发布于:2002-10-10 15:57
Bulk传输的块大小你说的是驱动里面的
pipe 的 wMaxPacketSize吗?它是固定的片子写死的,64字节 如果是MaximumTransferSize,我设的是2048字节,这个值的设置有用嘛? |
|
6楼#
发布于:2002-10-10 16:07
Pipe 的MaximumTransferSize这个值当然有用了,它决定一次URB传输数据量。建议你改为32K或64K,并且修改驱动程序和应用程序,一次URB处理MaximumTransferSize数据传输,速度应该会提高的。
|
|
|
7楼#
发布于:2002-10-10 16:24
MaximumTransferSize这个值我在我的USB客户驱动程序里面不使用的阿,而且我一次传下去的包最多672个字节(蓝牙片子规定的),需要把它写到这么大嘛?是不是这个值在USBD.sys里有用?
|
|
8楼#
发布于:2002-10-10 16:30
斑竹阿,我是新手,请问一下,我该怎么给你分?不会用,不好意思:)
|
|
9楼#
发布于:2002-10-10 16:33
你第一个帖子下有给分按纽啊。
|
|
|
10楼#
发布于:2002-10-10 16:35
MaximumTransferSize这个值我在我的USB客户驱动程序里面不使用的阿,而且我一次传下去的包最多672个字节(蓝牙片子规定的),需要把它写到这么大嘛?是不是这个值在USBD.sys里有用? 就是USBD要用,一次URB 672和32768你想速度会差多少呢? |
|
|
11楼#
发布于:2002-10-10 16:46
好的,我马上就试试
我刚才又作了一个这样的测试 直接把100个200字节的包发到BULK管道,不进行无线传输了 我发现速率有1Mbps以上。 现在是否能说明主机端是足够快的呢? |
|