阅读:1901回复:6
USB总线的IN指令是怎么产生的.
USB设备在枚举成功后,如果有IN Endpoint.那么HOST会根据端点所设定的时间定时发送IN指令.以查询设备有无数据.这个IN指令是怎么生产的.与驱动有关吗?
(我现在利用DDK自带的BULKUSB.直接安装到我的STM32 设备上,STM32设备有一个BULK OUT和一个BULK IN.可是每次都地枚举成功后,便发现设备被Suspend.只有枚举过程,无任何IN,OUT数据查询指令.) 不明白怎么回事.最近才开始看怎么写驱动的.请大家指教. 谢谢! |
|
|
沙发#
发布于:2010-02-10 16:14
盼望着高人的指点.
|
|
|
板凳#
发布于:2010-02-11 08:10
回 1楼(Platon) 的帖子
绝望,此处无高手.感觉国内的网站实在是内容空洞. |
|
|
地板#
发布于:2010-02-11 09:48
首先声明我不是高手,不过,这个问题我应该可以解答
IN指令准确地说是要由设备驱动产生一个Bulk In Pipe上的读数据URB请求,然后主机控制器驱动(HC)根据这个请求给设备发送IN指令。如果设备还没准备好数据,就会回NAK,那么主机控制器驱动会每隔一段时间就发IN指令轮询一下,直到设备回送数据为止。 需要指出的是,设备永远是被动的,只有主机方给它发指令,它才回答。不要指望它主动给主机发数据,就是同步或中断端口,也是要主机方先进行启动操作后才会有的。 不知道这么解释是否够清楚。 |
|
地下室#
发布于:2010-02-11 12:01
回 3楼(jally76) 的帖子
Hi,了解您的说法,也感谢您的回答.我最近用DDK自带的BULKUSB驱动.设备为STM32.每次都是在枚举成功后,设备便被挂起来了.我使用DDK自带的测试程序.使用Read来进行测试,也是出现Faild Open to <//Piople 00> 都搞了好几天了.找不出个所以然,没有怎么搞过USB驱动. 使用IRPTrace看了一下.根本就没进行Dispatch Read write这个过程.总是在Clearn up,说不清楚,看能不能贴图. |
|
|
5楼#
发布于:2010-02-16 01:19
感觉问题应该是出在Query Device Relation这一步
|
|
6楼#
发布于:2010-02-19 08:19
回 5楼(jally76) 的帖子
祝大家节日快乐!经过最近的折腾,弄明白了.正如jally76所说. |
|
|