wwm_820924
驱动牛犊
驱动牛犊
  • 注册日期2004-07-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望169点
  • 贡献值1点
  • 好评度22点
  • 原创分0分
  • 专家分0分
阅读:4090回复:14

怎样让68013读速度突破22.5MB/s

楼主#
更多 发布于:2009-11-21 18:38
68013外接FIFO,使用GPIF方式,EP6IN传输,缓冲区配置为4*512,传输方式为BULK。
驱动是自己写的,为了提高速度,想了不少方法,可就是突破不了22.5MB/S,实测过读USB硬盘,能到33MB/s,说明我的主板是支持的。

先说说我的当前做法:
1、驱动初始化时,创建一个读URB,传输字节为256K。
2、在需要读取数据时,启动一个内核模式线程(驱动中创建的)。
3、线程中循环往USB总线驱动发送读URB(一次读返回,马上发送下一个,阻塞方式)。

请速度做到30MB/s以上的朋友帮忙指点下迷津。谢谢!
wwm_820924
驱动牛犊
驱动牛犊
  • 注册日期2004-07-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望169点
  • 贡献值1点
  • 好评度22点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-11-23 21:13
回 1楼(usbwolf) 的帖子
USB协议,块传输还有异步同步的说法吗?不知道你说的是不是指驱动程序。

外部FIFO是同步的,驱动也是同步的。
wwm_820924
驱动牛犊
驱动牛犊
  • 注册日期2004-07-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望169点
  • 贡献值1点
  • 好评度22点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-11-27 13:52
祝贺速度超过30MB/s(有时超40MB/s),关键是GPIF时序的设计,驱动还是以前写的,这几天比较忙,赶时间,改天详细总结下过程。

现简单描述下PC机程序实现机制。

内核用的同步方式,有阻塞,但不占用CPU的阻塞。

读数据过程如下:

内核线程-->循环发送URB到下一层USB驱动-->URB读取返回-->拷贝数据到内核缓冲区。

应用层线程-->ReadFile进入内核驱动-->判断缓冲区是否有数据-->有则读取数据并返回,无则延时等待5ms(阻塞,但不占用CPU),再次判断,有无都返回。
wwm_820924
驱动牛犊
驱动牛犊
  • 注册日期2004-07-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望169点
  • 贡献值1点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-12-01 21:46
cpu占用率很低,关键是所有延时、等待都是不占CPU的。
游客

返回顶部