注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

LINUX驱动学习——USB驱动编写十CYPRESS86013A驱动1  

2013-07-02 14:30:48|  分类: USB系列 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

LINUX驱动学习——USB驱动编写十CYPRESS86013A驱动1

最近在使用CY86013A来完成一个项目,系统的驱动为了便捷使用的其公司提供的公共驱动,从目前使用来看,暂时是只支持到了6MB/s(48Mbit/s).

最初使用的是ezusb.sys这个驱动,使用其官方的例程,使用DeviceIOControl的命令方法来读取数据。但是发现速度非常低。基本上只能保持在2/s640*480*2)。没有办法,后来只好找了一个最新的CYUSB.SYS,使用CYAPI.LIB这个库。仍然是采用其公司提供的标准例程,速度达到前面所说的6M,但仍然是达不到需求的效果。

主要的问题有以下几个:

1、  异步读取数据时:InEndpt->WaitForXfer(&inOvLap,5000);的延时相当明显,当设置InEndpt ->SetXferSize(307200*2*5)时,读取640*480*5的数据需要大约250ms

2、  在缓冲区(即前面设置的SetXferSizeInEndpt->FinishDataXfer(praw,(long &)inlen, &inOvLap,inContext);中的inlen)这两个数据的大小一定要控制好,如果设置的太小,就会使帧与帧之间数据丢失达到很恐怖的地步。

3、  EZUSB.SYS中,其缓冲区最大为60K,所以高速的模式下基本收不到完整的帧。

4、  自动机对时间的消耗非常明显,所以后来基本上采用了另外一种模式,但目前没有找到自动机耗费时间过长的原因,对6M的处理需要近1.7秒左右。

5、  赛普拉斯提供的两个例程之间有对同步数据传输的区别,也就是说,在异步传输读BULK中,有一个例程先进行了同步的控制,原因暂时不太清楚。

6、  如果读取的数据不为512的整数倍,一定要用SetXferSize来设置,否则可能会引起数据的不匹配。

自动机的多缓冲区匹配和时间消耗问题要提到主要的问题上来。解决掉。

  评论这张
 
阅读(610)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017