阅读:1288回复:5
求助,请看几个简单的USB问题分不够可以加
小弟初学driver编程,目前想实现Interrupt传输。不过有些问题感觉很让人头晕,各位请看:
1、主机每隔一个固定时间间隔 (中断端点的intervel决定)访问端点,这个访问间隔是由我写的功能driver控制,还是由底层的系统driver控制,或者是硬件控制? 2、轮询的时候发一个读中断端点的IRP给设备,该IRP访问设备端点如果得到NAK回应,是不是就结束返回了,还是不结束而继续重发? 3、我在例子程序中看到采用循环URB方法实现中断传输的,但是这种方法中似乎就没有intervel相关的处理。请问采用这种方法时主机和设备的通信流程是什么样的?是不是用这种方法就不是定时轮询了,那这种方法就是不符合规范的了? 我做的驱动是PC端的哈,我已经看过规范和DDK相关文档,反正是没搞懂以上问题。哪位明白的点拨一下啦 :( |
|
|
沙发#
发布于:2004-12-02 21:44
没人能解答吗?顶~!
|
|
|
板凳#
发布于:2004-12-03 11:34
1,这个时间间隔由设备方的端点描述符确定。
2,通常情况下不会返回,不得到数据主机会一直查询下去,如果你设置了超时那就另说了 3,如果你是为鼠标做的驱动,那么就应该这么做,该urb不能结束,只要鼠标插着就要一直查询,如果你并不期望这么做,那么就做一个能结束的urb,该urb完成后就可以结束了。 |
|
地板#
发布于:2004-12-03 22:45
多谢大侠~!等了这么久才终于等到一个回复了,你真是热心人啊~!
不过对于第一个问题,我的意思是是否需要在driver中控制每隔一个intervel时间进行一次查询,还是这是由更底层的东西自动完成的? 希望大侠继续发扬风格,多多帮忙啊~ :D |
|
|
地下室#
发布于:2004-12-07 09:59
for your first question: after the host get discriptor from device, it will take care everything about intervel for interrupt, this is a embedded functionality for OHCI, you do NOT need take care it by yourself at all |
|
5楼#
发布于:2004-12-07 12:46
只要设定传输类型为中断,BSBD和HCD(即主机端主控制器的驱动,不要你写的)会自动的产生中断轮循,你要做的是属于功能驱动开发,在这里初始化时设定轮循间隔就够了高速设备可设范围是10MS到225MS,低速设备在1MS到225MS,你自己再去查点资料确认一下上叙信息。
|
|