阅读:4256回复: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 15:39
请问楼主你的块传输是异步还是同步?
|
|
板凳#
发布于:2009-11-23 21:13
回 1楼(usbwolf) 的帖子
USB协议,块传输还有异步同步的说法吗?不知道你说的是不是指驱动程序。外部FIFO是同步的,驱动也是同步的。 |
|
地板#
发布于:2009-11-24 11:17
嗯,我问的是驱动是否是异步的
|
|
地下室#
发布于:2009-11-24 16:05
请问楼主,在驱动层你用的是同步,在应用层如果一直的测试读取数据,那你的应用层会不会一直占用cpu资源?
|
|
5楼#
发布于:2009-11-25 10:17
还有一个问题是你的功能驱动程序一直在从总线驱动读取数据数据,那你的应用层怎么得到数据呢?我最近也在写68013的驱动,可以一起讨论一下。我qq 289238641
|
|
6楼#
发布于:2009-11-26 15:23
楼主,你在系统内核不停的从总线读取数据,那如果读到数据怎么通知应用程序呢?而且如果你的内核线程用阻塞方式的话,系统进程会不会一直占用cpu时间片呢?
|
|
7楼#
发布于:2009-11-27 11:24
楼主,你的块传输是缓冲区方式?缓冲区方式比直接内存方式要慢吧
|
|
8楼#
发布于:2009-11-27 13:52
祝贺速度超过30MB/s(有时超40MB/s),关键是GPIF时序的设计,驱动还是以前写的,这几天比较忙,赶时间,改天详细总结下过程。
现简单描述下PC机程序实现机制。 内核用的同步方式,有阻塞,但不占用CPU的阻塞。 读数据过程如下: 内核线程-->循环发送URB到下一层USB驱动-->URB读取返回-->拷贝数据到内核缓冲区。 应用层线程-->ReadFile进入内核驱动-->判断缓冲区是否有数据-->有则读取数据并返回,无则延时等待5ms(阻塞,但不占用CPU),再次判断,有无都返回。 |
|
9楼#
发布于:2009-11-27 14:41
在pc端不停的读取数据的话,cpu占用率一般会是多少呢?
|
|
10楼#
发布于:2009-12-01 21:46
cpu占用率很低,关键是所有延时、等待都是不占CPU的。
|
|
11楼#
发布于:2009-12-22 15:51
驱动层和应用层怎么通信呢?应用层从哪块缓冲区读取数据呢?虽然对楼主的思路了解,但是对于怎么实现还是不清楚,望楼主赐教!
|
|
12楼#
发布于:2010-01-19 09:33
顶一下
|
|
|
13楼#
发布于:2010-01-26 10:10
楼主怎么还没总结呢
|
|
14楼#
发布于:2010-01-28 22:48
68013的GPIF 最高平均速度能在 40MB/s 2M fifo 只能上24MB/s 听说要上最高的 40MB/s 需要32M的fifo。。
这儿是说的裸数据,加协议信息可能就该是 400Mbps了。 USB的 bulk 就是没有时间观念,要很大的fifo才能保证数据正确无误。 |
|