linux urb请求是什么意思

如题所述

在usb系统中可以分为四层1.客户端软件或usb驱动2.主机驱动3.主机控制器4.usb设备。其中第一和第二层属于软件,而第三和第四属于硬件,其中OHCI就是将第二层和第三层联系起来,其定义了一组寄存器和一系列的操作集。关于usb传输的数据类型就不多说了。
OHCI有两个传输通道一个就是位于HC中的一系列寄存器,而第二个就是HCCA,其包括指向中断ed链表的指针。第一个通道用于bulk和control传输,而HCCA则用于interrupt和iso传输。为什么要这样区分呢,因为在usb传输的数据中可以分为周期传输和非周期传输,其中bulk和control属于非周期传输,而int和iso则属于周期传输。也许大家会疑惑这两者是具体如何传输的。下图比较好的看出一帧时间是如何分配的。
在一帧数据时间一般为1ms中,在HC发送SOF同步usb bus后,会传输非周期性数据包,那在什么时候会传输周期性数据呢,在frame interval计数器达到HCD设定的值后就会发送周期性数据。在周期性数据发送完成后,继续发送非周期性数据。关于其中周期性数据发送的起始时间由HcPeriodicStart寄存器来决定,一般是保留整个frame的90%。如果在发送周期性数据完成后还是时间,则继续发送非周期数据。
在HcPeriodicStart的寄存器说明中说明,当HcFmRemaining与HcPeriodicStart值相同时,周期性链表的处理优先级大于非周期性链表的发送。其中HcFmRemaining是从HcFmInterval值开始减少的。这个就可以理解为什么在程序HcPeriodicStart的值等于90%的HcFmInterval。那关于周期性链表是如何链接的以及不同的轮询时间的端点是如何工作的,在具体看源码时涉及。
温馨提示:答案为网友推荐,仅供参考