hanfuxu
驱动牛犊
驱动牛犊
  • 注册日期2001-07-14
  • 最后登录2009-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2003-06-26 14:15
我在98上试的时候,DeviceIoControl将近要10ms!

但可以通过将驱动中的\"最大传输单元\"设的大一些来解决!

这样,传送10次2k的数据,可以变成传送一次20k的数据,就行了!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2003-06-26 21:47
其实这样在两次传输之间会有数据丢失的,你们有没有发现,因为从app->驱动->usbd是需要花费一些时间的。不知道你们是怎么解决的
是在设备方缓冲数据吗?
yjmpepe
驱动牛犊
驱动牛犊
  • 注册日期2003-04-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2003-06-27 08:31
我现在的方法是使这段时间正好位于无效数据区
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2003-06-27 11:14
可是我的数据都是有效的,而且数据率是比较高的,而且当初设备方没有准备缓存,如果这个问题软件上得不到解决那可就麻烦大了。
yjmpepe
驱动牛犊
驱动牛犊
  • 注册日期2003-04-18
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2003-06-27 20:32
软件优化上可以下些功夫,但是从bulk的机制来说,就算驱动里做了很多工作,但是irp总不可能象iso一样建立起来以后就从不间断的吧?软件上再下功夫也顶多是外围需要的缓冲大点或小点。呵呵所有的活软硬不分家的啦。
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2003-07-14 17:58
我的测试,平均40k/s



我也是,上传64K需要1。6秒,太慢了,是不是写操作需要优化一下?
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2003-07-14 18:54
这个问题早就讨论过了嘛。
你说的2-3个毫秒是一次控制传输(固件、USB Bus、Driver、应用程序),时间消耗在实际传输上,根本不是DeviceIoControl和内核消耗通讯的,不信你自己做实验(DeviceIOControl直接返回)。
USB Bulk传输理论值是12M bit/s。实际传输数据可达1M Byte/s,即一次Bulk传输传送32K Byte,使用ReadFile/WriteFile,大概是33个毫秒左右(数据从固件的SDRAM到应用程序接收到)。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
lq519
驱动牛犊
驱动牛犊
  • 注册日期2001-12-09
  • 最后登录2003-08-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2003-07-14 18:55
[quote]我的测试,平均40k/s



我也是,上传64K需要1。6秒,太慢了,是不是写操作需要优化一下? [/quote]

我上传64K需要64毫秒,换句话说我的usb(an2131)的bulk通讯速度为8M bit/s!
当然,我的同步传输更快,可这种方式无纠错,不实用!
lq519
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2003-07-15 09:44
[/quote]

我上传64K需要64毫秒,换句话说我的usb(an2131)的bulk通讯速度为8M bit/s!
当然,我的同步传输更快,可这种方式无纠错,不实用! [/quote]
lq519 兄你达到这样8M bit/s是使用USB规范1.1吗?
顺便问一下,对于使用USB集连达数十个(如:50个)功能设备,并且要求每个设备同时将数十K(如:80)字节/秒的数据发送到其它几个(甚至十几个)设备,这样的架构是否具有可行性?为什么?
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
lq519
驱动牛犊
驱动牛犊
  • 注册日期2001-12-09
  • 最后登录2003-08-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2003-07-15 10:35


我上传64K需要64毫秒,换句话说我的usb(an2131)的bulk通讯速度为8M bit/s!
当然,我的同步传输更快,可这种方式无纠错,不实用! [/quote]
lq519 兄你达到这样8M bit/s是使用USB规范1.1吗?
顺便问一下,对于使用USB集连达数十个(如:50个)功能设备,并且要求每个设备同时将数十K(如:80)字节/秒的数据发送到其它几个(甚至十几个)设备,这样的架构是否具有可行性?为什么? [/quote]

an2131  即是cypress的USB规范1.1的芯片!
首先您说的是设备与设备间的通讯,即OTG!可以实现,不过得使用USB2.0!

lq519
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
30楼#
发布于:2003-07-18 17:53
[quote][quote]我的测试,平均40k/s



我也是,上传64K需要1。6秒,太慢了,是不是写操作需要优化一下? [/quote]

我上传64K需要64毫秒,换句话说我的usb(an2131)的bulk通讯速度为8M bit/s!
当然,我的同步传输更快,可这种方式无纠错,不实用! [/quote]

怎么做的,这么快,我算了一下,如果我能在bulk方式下,向每个帧里面传16个包,我也可以达到1M左右,可是怎么样才能发16个包啊,我作了很久了,没头绪,郁闷啊!
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
31楼#
发布于:2003-07-18 17:55
??????????????
大虾们:
    我的问题好像没解决。有没有人能明白的阐述一下以上的问题呢?
    另一个问题:usb1.1,bulk传输,1ms帧,一个端点一次传输64字节,在1ms的帧中,一个端点只能放一次数吗?如果不只一次,一个端点的bulk传输,如何往总线上放数呢?


关注,资料上说bulk传输中,在1ms的帧中可以放16个数据包,可是怎么实现,就请哪位大侠们指点一下了,我真的很急啊,头发都白了!
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
32楼#
发布于:2003-07-18 17:57
我在98上试的时候,DeviceIoControl将近要10ms!

但可以通过将驱动中的\"最大传输单元\"设的大一些来解决!

这样,传送10次2k的数据,可以变成传送一次20k的数据,就行了!


一定要改驱动吗?我在应用程序中把缓冲区开大些,不行吗?
上一页 下一页
游客

返回顶部