新闻  |   论坛  |   博客  |   在线研讨会
关于Cypress 68013自带ezusb.sys驱动的局限性大讨论 zz
mayer | 2009-06-26 18:17:57    阅读:3152   发布文章

本帖主要讨论ezusb.sys的驱动的不能使用Overlapped异步模式的问题。
这会导致两个问题:
1 驱动不能即时返回,导致程序pending
2 速度上不去,使用该驱动,速度好像最高才4MB/s。

首先我们要明确一下这个问题的本质。

我先说说:
http://bbs.zndev.com/htm_data/9/0511/102803.html中,jinghuiren大侠指出:
“这 个是cypress驱动程序的设计缺陷,他们在设计驱动的时候只考虑演示效果,并没有考虑实时传输环境中的实际使用问题。他们在驱动程序中只实现了同步传 输的模式,也就是说在同一个时间内只能下发一个urb下去等待数据返回,数据返回后才能下发下一个urb,然而这个时间大致会有0.1s-0.2s的时 间,如果你的设备端数据产生速率较快,那么在这段时间内的产生的数据就会丢失。

解决办法,在ezusb驱动中增加异步传输的模式,在应用 程序中一次下发几个urb下去到IO管理器排队(这里没有哪0.1-0,2s的时间损耗,或者损耗很小),有数据返回后继续下发,这样能保证在高速率下不 会出现数据丢失现象,具体代码情况可以参考ddk例子中的bulkusb来修改,里面的是bulkusb_read和bulkusb_write,这是 2kddk的例子代码中的函数名,xp的有所不同,但实现基本是一样的,移植到ezusb中即可”



这让我开始思考,jinghuiren大侠说的是不是就是:该驱动没有使用StartIO呢?是不是写了StartIO就OK了呢?

另外,在Cypress公司自己的说明中又如下一段话:
you *cannot* use the OVERLAPPED (async) mechanism, because the GPD is strictly synchronous (blocks until the transfer > completes). You'll have to use the multi-thread technique discussed below, or write your own async driver.

【file:///x:/Cypress/USB/Application%20Reference %20Materials/Support%20Information/FAQ/Main_FAQ/Driver_FAQ_Page/Driver_FAQ_Page.htm】
应该就是jinghuiren大侠说的这个问题吧。

希望大家尽情拍砖。
我一定会把这个问题整理好,并公开全部源码……

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客