阅读:4090回复:14
怎样让68013读速度突破22.5MB/s
68013外接FIFO,使用GPIF方式,EP6IN传输,缓冲区配置为4*512,传输方式为BULK。
驱动是自己写的,为了提高速度,想了不少方法,可就是突破不了22.5MB/S,实测过读USB硬盘,能到33MB/s,说明我的主板是支持的。 先说说我的当前做法: 1、驱动初始化时,创建一个读URB,传输字节为256K。 2、在需要读取数据时,启动一个内核模式线程(驱动中创建的)。 3、线程中循环往USB总线驱动发送读URB(一次读返回,马上发送下一个,阻塞方式)。 请速度做到30MB/s以上的朋友帮忙指点下迷津。谢谢! |
|
沙发#
发布于:2009-11-23 21:13
回 1楼(usbwolf) 的帖子
USB协议,块传输还有异步同步的说法吗?不知道你说的是不是指驱动程序。外部FIFO是同步的,驱动也是同步的。 |
|
板凳#
发布于:2009-11-27 13:52
祝贺速度超过30MB/s(有时超40MB/s),关键是GPIF时序的设计,驱动还是以前写的,这几天比较忙,赶时间,改天详细总结下过程。
现简单描述下PC机程序实现机制。 内核用的同步方式,有阻塞,但不占用CPU的阻塞。 读数据过程如下: 内核线程-->循环发送URB到下一层USB驱动-->URB读取返回-->拷贝数据到内核缓冲区。 应用层线程-->ReadFile进入内核驱动-->判断缓冲区是否有数据-->有则读取数据并返回,无则延时等待5ms(阻塞,但不占用CPU),再次判断,有无都返回。 |
|
地板#
发布于:2009-12-01 21:46
cpu占用率很低,关键是所有延时、等待都是不占CPU的。
|
|