关于uvc驱动视频流数据传输中分配urb数量的疑问

0x01 2022-10-29 09:41:51 编辑

请教一下,在uvc驱动与设备数据传输中,同步传输,为何要分配5个urb,每个urb不是都可以配置传输次数,分配5个和分配1个又什么区别吗,我看linux内核的uvc驱动也是分配5个urb,我在好多书上都没找到原因,请教一下大佬们这些问题,或者要去查阅哪些资料。

USB中文网 2022-10-29 11:28:35 编辑

对于URB中的NumberOfPackets,UVC摄像头有个参数叫做dwMaxPayloadTransferSize,一个ISO比如是1024个字节,那么 (dwMaxPayloadTransferSize+1023)/1024就是最大的NumberOfPackets个数了。其实你再大点也没关系。
分配5个或者分配10个URB其实是没有关系的,这主要是为了提升在系统层中的传输效率。有5个URB向设备请求数据,相当于5个线程等待,任意一个返回处理,还有其余4个在等待,防止只有一个URB已经返回而无读法的数据请求从而导致接收数据不及时。
其实在Widdows中,对于这种情况,我都是开30个IRP-URB请求,这样对一些特别实时性的传输,表现就是基本不会丢数据。
最主要的原因USB总线上可以保证实时性,但linux或者windows内核又不是实时性内核,所以就多发几个请求来配合硬件了。