注意:hub 里面的中断端点是 IN ,不是 OUT .但这并不说明凡是中断传输数据一定是从设备到主机,没这种说法,别起哄.不过hub需要的确实只是IN的传输.首先,每一个男人都应该知道,中断是由设备产生.

19intervalusb hub里面的interval是间隔期,尽管中断本身不会定期发生,但是有一个事情是周期性的,对于 IN 的中断端点,主机会定期向设备查询;如下图

 

查询过程如下:.设备要进行中断传输,需要提交一个 urb,就是,host controller 定期给你发送一个 IN token,就是说发送这么一个包, 而你如果有中断等在那里,那你就告诉她,你有了(中断).同时你会把与这个中断相关的数据发送给主机,这就是中断传输的数据阶段,显然,这就是 IN 方向的传输.然后主机接收到数据之后他会发送回来一个包,向你确认一下.那么如果 host controller发送给你一个 IN token 的时候,你没有中断,那怎么办呢?你还是要回应一声,说你没有.当然还有另一种情况是,你可能人不在家,你出差去了,那么你可以在家留个条,告诉人家你没法回答.

归纳如下:一种,你回应的是DATA,主机回应的是ACK或者是Error.

第二种,你回应的是NAK,

第三种,你回应的是 STALL

 

对于OUT类型描述如下:顺便解释一下 OUT 类型的中断端点是如何进行数据传输,虽然 Hub 里根本就没有这种款式的端点.分三步走,第一步,host发送一个 OUT token,然后第二步就直接发送数据包,第三步,设备回应,也许回应 ACK,表示成功接收到了数据,也许回应 NAK,表示失败了,也许回应 STALL,表示设备端点本身有问题,传输没法进行.

20、引用计数:

usb_get_intf()对应的有另一个函数,叫做 usb_put_intf(),很显然,一个是增加引用计数一个减少引用计数.

.对于 Root Hub来说,它的 portnum(端口号)在 Host Controller的驱动程序里给设置成了 0

21autosuspend/autoresume

实际上是一种运行时的电源管理方式.而这些事情将由驱动程序来负责,,当驱动程序觉得它的设备闲置了,它就会触发 suspend 事件,而当驱动程序要使用一个设备了,但该设备正处于 suspended 状态,那么驱动程序就会触发一个 resume 事件,suspend事件和resume事件很显然是相对应的,一个挂起一个恢复.

 

22INTERFACE接口状态

usb core发现初始化设备的时候,但是在 hub_probe 被调用之前,INTERFACE 是处于 USB_INTERFACE_BINDING 状态的,直到hub_probe结束了之后,INTERFACE则是处于USB_INTERFACE_BOUND状态,即所谓的绑定好了 , 而如果 hub_probe 出了错 , 那么 INTERFACE 就将处于USB_INTERFACE_UNBOUND 状态.

 

23EMI:是电磁干扰