UVC摄像头技术笔记
+ -

从UVC摄像头配置描述符的长度区别来理解USB接口关联描述符IAD

2023-02-02 228 0

对于如下的UVC摄像头,其在设备管理器中如下图所示:
UVC摄像头描述符

硬件ID分别为:

  • USB\VID_33F1&PID_1035&REV_0409
    • USB\VID_33F1&PID_1035&REV_0409&MI_00

可以看到,其根设备是使用的USBCCGP.sys来驱动的,所以是USB通用驱动程序,其兼容ID为USB\COMPOSITE
而子设备是USB摄像头本身,其兼容ID为USB\Class_0e&SubClass_03&Prot_00,故其对应的驱动程序为usbvideo.sys

我们这里分别对这2个节点加其过滤驱动,通过获取该设备的USB配置描述符,其内容分别为:

这里使用本站的https://www.usbzh.com/tool/usb.html 对其配置功述符分析和对比

ffff800e`be1d6010  09 02 ec 0a 02 01 04 c0 00 08 0b 00 02 0e 03 00  ................
ffff800e`be1d6020  05 09 04 00 00 01 0e 01 00 05 0d 24 01 00 01 71  ...........$...q
ffff800e`be1d6030  00 00 6c dc 02 01 01 12 24 02 01 01 02 00 00 00  ..l.....$.......
ffff800e`be1d6040  00 00 00 00 00 03 0e 1e 00 0b 24 05 02 01 00 40  ..........$....@
ffff800e`be1d6050  02 7f 17 00 1f 24 06 03 41 76 9e a2 04 de e3 47  .....$..Av.....G
ffff800e`be1d6060  8b 2b f4 34 1a ff 00 3b 0e 01 02 06 ff ff ff ff  .+.4...;........
ffff800e`be1d6070  ff ff 00 1f 24 06 04 f2 5d bd a8 98 1a 4e 47 8d  ....$...]....NG.
ffff800e`be1d6080  d0 d9 26 72 d1 94 fa 06 01 03 06 ff ff ff ff ff  ..&r............

0x09,        // bLength
0x02,        // bDescriptorType (Configuration)
0xEC, 0x0A,  // wTotalLength 2796
0x02,        // bNumInterfaces 2
0x01,        // bConfigurationValue
0x04,        // iConfiguration (String Index)
0xC0,        // bmAttributes Self Powered
0x00,        // bMaxPower 0mA
ffff800e`be6b5010  09 02 e4 0a 02 01 04 c0 00 09 04 00 00 01 0e 01  ................
ffff800e`be6b5020  00 05 0d 24 01 00 01 71 00 00 6c dc 02 01 01 12  ...$...q..l.....
ffff800e`be6b5030  24 02 01 01 02 00 00 00 00 00 00 00 00 03 0e 1e  $...............
ffff800e`be6b5040  00 0b 24 05 02 01 00 40 02 7f 17 00 1f 24 06 03  ..$....@.....$..
ffff800e`be6b5050  41 76 9e a2 04 de e3 47 8b 2b f4 34 1a ff 00 3b  Av.....G.+.4...;
ffff800e`be6b5060  0e 01 02 06 ff ff ff ff ff ff 00 1f 24 06 04 f2  ............$...
ffff800e`be6b5070  5d bd a8 98 1a 4e 47 8d d0 d9 26 72 d1 94 fa 06  ]....NG...&r....
ffff800e`be6b5080  01 03 06 ff ff ff ff ff ff 00 09 24 03 07 01 01  ...........$....

0x09,        // bLength
0x02,        // bDescriptorType (Configuration)
0xE4, 0x0A,  // wTotalLength 2788
0x02,        // bNumInterfaces 2
0x01,        // bConfigurationValue
0x04,        // iConfiguration (String Index)
0xC0,        // bmAttributes Self Powered
0x00,        // bMaxPower 0mA

可以看到,其USB配置描述符的总长度为2796-2788=8 多出来的这8个字节正是配置描述符之后的USB接口关联描述符IAD

08 0b 00 02 0e 03 00 05

所以这里从配置述符来看,其内容一样。可见USBCCGP对于USB复合设备,再对齐进行按USB功能拆分其子设备时,就算其子设备是一个复杂的设备(多接口描述符的设备,如UVC,UAC设备),其也会删除其前面的IAD接口关联描述符

所以这里又回到了USB接口关联描述符的意义上:

UVC 接口关联描述符IAD https://www.usbzh.com/article/detail-2.html 设备必须使用接口关联描述符来描述需要视频控制接口和一个或多个视频流接口的每个设备功能的视频接口集合。标准的VIC接口关联描述符与接口关联描述符ECN中定义的标准接口关联描述符相同,只是有些字段现在具有专用值。

这里我们做个总结:对于USB硬件设备,如果其只有一个功能设备,可以不要接口关描述符述IAD,就算这是一个需要多接口的复杂设备,这个IAD接口关联描述符不是必须的(可要可不要)。但如果是一个多功能的设备即会有2个或2个以个的逻辑设备,并且这些逻辑设备有需要2个或多个接口描述符来描符一个复杂的设备如UAC,UVC,这个复杂的设备前就必须的IAD接口关联描述符。
所以也可以这样说,接口关联描述符是分隔USB硬件设备功能的分隔线。

另外通过USBTreeViewer这个工具是通过USB端口读取的USB配置描述符,所以这里是带IAD的。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

USB音箱 UAC配置描述符分析
该USB音箱的配置描述符和普通USB设备描述符结构体一致,并无特别区别。该配置描述符的总长度(包括后续的所有其它描述符)为110字节,这里相对华为耳机的要少了很多,这是因为少了像麦克风和HID。从配置描述符的字段bmAttributes来看,并不支持远程唤醒功能。 ------------......
华为UAC耳机 配置描述符
配置描述符的大小其实不光包括配置描述符自身,也包括后续的所有描述符。这里我们只先介绍一下配置描述符,后续的接口描述符和其它UAC相关描述符在后续一节介绍。配置描述符的内容如下: ------------------ Configuration Descriptor --------------......
UVC 接口关联描述符IAD
设备必须使用接口关联描述符来描述需要视频控制接口和一个或多个视频流接口的每个设备功能的视频接口集合。标准的VIC接口关联描述符接口关联描述符ECN中定义的标准接口关联描述符相同,只是有些字段现在具有专用值。说明:如果视频控制接口是视频接口集合的一部分,则接口关联描述符IAD中的iFuncti......
UAC 其它速率配置描述符
在UAC规范中,并没有定义特别的其它速率配置描述符,故UAC音频设备的其它速率描述符应符合USB规范中的其它速率配置描述符。......
USB-UAC麦克风 配置描述符
UAC麦克风采用的配置描述符结构和USB配置描述符的结构一致.偏移地址字段长度值描述0bLength10x09配置描述符的长度1bDescriptorType10x02描述符类型,配置描述符类型2wTotalLength20x0064配置描述符的总长度(包括后续的UAC音频控制和UAC音频流接口描述......
UVC UVC驱动接口关联描述符IAD失踪之迷
先说一下,本人所使用的操作系统是WIN10 x64操作系统Microsoft Windows [版本 10.0.14393](c) 2016 Microsoft Corporation。保留所有权利。这是win10一个相对比较老的版本。新旧的混淆在微软件主的官方文档 USB Interfac......
USB设备描述符、配置描述符、接口描述符和端点描述符的拓扑关系
在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。每个USB设备都提供了不同级别的配置信息,可以包含一个或多个配置,不同的配置使设备表现出不同的功能组合(在探测/连接期间需从其中选定一个),配置由多个接口组成。一次只能有一个配置是活动的。大多数的设备只有一个配置和一个接口,当一个设备......
UAC 接口关联描述符
和UVC设备的接口关联描述符的功能一样,UAC的接口关联描述也用于组织UAC的音频控制接接口和UAC的音频流接口描述符及其子描述符。接口关联描述符的结构定义typedef struct _USB_INTERFACE_ASSOCIATION_DESCRIPTOR { UCHAR bLengt......
USB 其它速率配置描述符
其它速率配置描述符(OTHER_SPEED_CONFIGURATION)。其它速率配置描述符与设备限定描述符(Device Qualifier Descriptor)配合使用, 当工作在其他速度下时使用, 除了描述符类型, 其他字段含义格式与配置描述符完全一致。 位移字段名称长度(字节......
UAC 配置描述符
UAC配置描述符仅用于单一功能的USB设备,没有专门的UAC特定的配置描述符,所以UAC音频设备的配置描述符应满足通用USB设备的配置描述符规范。......
USB 配置描述符
配置描述符定义了设备的配置信息,一个设备可以有多个配置描述符。大部分的USB设备只有一个配置描这符,设备存在多个配置描述符时.配置描述符指定设备的供电方式、最大功耗是多少、它拥有的接口数量。因此,可以有两种配置,一种用于设备由总线供电时,另一种用于设备供电时。由于这是接口描述符的“头”,因此使一种配......
HID报表描述符与设备描述符、配置描述符、字符串描述符的通讯格式对比
报表描述符是USB HID规范中一个很重要的概念。USB HID设备报表描述符内容表述了该HID设备的功能及数据传输的格式。USB HID报表描述符在概念上和设备描述符,配置描述符,接口描述符,端点描述符和其它USB设备描述符类似,但是还是有一些细微的区别。我里我们做一个简要的区别:设备描述符、......
UAC麦克风配置描述符
配置描述符包含了设备的配置信息,随配置描述符一起返回给主机的其它描述符代表了该设备的特性。UAC麦克风配置描述符的数据配置如下:数据结构定义如下:struct usb_config_descriptor { __u8 bLength; __u8 bDescriptorType; ......
仿照USBCCGP.SYS对USB配置描述符按功能拆分
USB大的规范中两个最麻烦的描述符一个是配置描述符,另一个是HID的报告描述符。一个因与其它描述符相互组合而复杂,一个因其自身的多样性而复杂。但你要问要问USB设备中那个描述符最烦人,答案肯定是配置描述符了。这是因为USB配置描述符不仅包含自己本身,也包含了其它描述符,如常用的接口描述符、端点描述符......
USB 设备同时支持全速模式与高速模式
当一个USB高速设备接入全速的HUB时,这时会出现高速模式协商失败,这时为了设备能正常使用,会自动使用全速模式来运行。所以为了同时支持全速与高速的设备,必须有Device Qualifier Descriptor和其它速率配置描述符(OTHER_SPEED_CONFIGURATION),用于描述全速......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!