USB CDC
+ -

CDC 扩展单元功能描述符

2025-07-10 0 0

Extension Unit Functional Descriptor(扩展单元功能描述符)扩展单元功能描述符用于描述设备内部的厂商自定义单元及其连接关系,便于主机识别和管理协议栈中的扩展功能。

扩展单元功能描述符为通用驱动程序提供关于扩展单元的最基本信息,至少可以让驱动识别协议栈中存在厂商自定义组件。

  • bExtensionCode 字段可包含进一步标识扩展单元的厂商自定义代码(如未使用应设为0)。
  • 单元可有一组厂商自定义参数用于配置和运行,这些参数可被获取、设置或清除。
  • 单元初始状态为复位。
  • 该描述符只能出现在接口描述符的类特定部分。

描述符结构(Table 38)

偏移 字段名 大小 值/类型 描述
0 bFunctionLength 1 数值 此功能描述符的字节数
1 bDescriptorType 1 常量 CS_INTERFACE 描述符类型
2 bDescriptorSubtype 1 常量 扩展单元功能描述符子类型
3 bEntityId 1 常量 唯一标识该单元的ID
4 bExtensionCode 1 数值 厂商自定义代码(如未用应为0)
5 iName 1 索引 字符串描述符索引,描述扩展单元名称
6 bChildId0 1 常量 连接到此单元的下级终端或单元的第一个ID
5+N bChildIdN-1 1 常量 连接到此单元的下级终端或单元的第N个ID

示例(C结构体及二进制示例)

C结构体定义

typedef struct _USB_CDC_EXTENSION_UNIT_DESCRIPTOR {
    uint8_t bFunctionLength;      // 描述符长度
    uint8_t bDescriptorType;      // CS_INTERFACE (0x24)
    uint8_t bDescriptorSubtype;   // Extension Unit subtype (0x0C)
    uint8_t bEntityId;            // 单元唯一ID
    uint8_t bExtensionCode;       // 厂商自定义代码
    uint8_t iName;                // 名称字符串描述符索引
    uint8_t bChildId[1];          // 下级终端/单元ID(可变长度)
} USB_CDC_EXTENSION_UNIT_DESCRIPTOR;

示例数据(假设单元ID为1,扩展码为0xA5,名称字符串索引为2,有两个下级单元ID为3和4)

字节序号 值(十六进制) 含义
0 0x09 bFunctionLength = 9
1 0x24 bDescriptorType = CS_INTERFACE
2 0x0C bDescriptorSubtype = Extension Unit
3 0x01 bEntityId = 1
4 0xA5 bExtensionCode = 0xA5
5 0x02 iName = 2
6 0x03 bChildId0 = 3
7 0x04 bChildId1 = 4

二进制示例:

09 24 0C 01 A5 02 03 04

说明

  • bFunctionLength:描述符总长度,=6+下级单元数量
  • bDescriptorType:固定为0x24(CS_INTERFACE)
  • bDescriptorSubtype:扩展单元功能描述符为0x0C
  • bEntityId:单元唯一ID
  • bExtensionCode:厂商自定义代码(如未用应为0)
  • iName:名称字符串描述符索引
  • bChildIdN:下级终端/单元ID(可有多个)

0 篇笔记 写笔记

UVC 扩展单元描述符
扩展单元描述符允许硬件设计者定义任意一组控制接口,使类驱动程序可以在设备与供应商提供的主机软件之间进行通讯控制。扩展单元描述符ID由bUnitID字段中的值唯一标识描述符。同一视频功能内的任何其他单元或终端不得具有相同的功能ID。guidExtensionCode字段包含特定于供应商的代码,该代......
UVC摄像头扩展单元功能的开发步骤是什么?
写在扩展单元的题外话本人在开发支持UVC扩展单元的directShow应用时,必现并不需要注册接口,只需要在其源过滤器参照后续的代码枚举相关的接口如IKsControl,IKsTopologyInfo定位到指定的扩展单元接口后,直接使用其对应的IKsControl::KsProperty即可实现扩展......
UVC 扩展单元控制请求
扩展单元控制请求设置或读取扩展单元内的视频控件.bmRequestTypebRequestwValue(2)wIndexwLengthData00100001SET_CUR选择子扩展单元ID参数长度参数块bmRequestTypebRequestwValue(2)wIndexwLengthData1......
V4L2访问摄像头扩展单元命令
我们可以通过IOCTL访问扩展单元,调用方法如下:ioctl(fd, UVCIOC_CTRL_QUERY, struct uvc_xu_control_query *);访问不同的扩展命令只需要修改uvc_xu_control_query 结构体里面内容即可。uvc_xu_control_qu......
用XU打造UVC命令行调试工具
在给客户交付UVC固件之后,有时客户会反馈问题,需要客户查看固件的打印信息或者执行一些命令辅助定位问题。如果有一个工具可以通过USB线连接到设备,直接在电脑上查看打印信息,执行命令就好了。有想法就要行动起来,行动才能解决问题。目前该功能已经实现了,说一下实现的方法吧。上位机OS Windows设......
UVC摄像头扩展单元调试工具-临江仙版
UVC摄像头的开发者为了实现一些私有定制协议的通讯,通常使用UVC自带的扩展单元来实现。通常是自定义一个扩展单元,再定义一些相应的选择子,然后再通过特定类请求实现与固件的通讯。 本站现提供一个Windows环境下,使用DirectShow开发的UVC扩展单元调试工具.UVC摄像头扩展单元工具来自......
UVC PTZ和扩展单元XU的过滤与分发调试笔记
在写这篇文章之前,我得首先感谢微软,感谢你的不严格,让我可以有空子可钻,不至于太过狼狈…记得看过一句话,开局一张图,内容全告编。我多么希望自己在UVC摄像头的调试过程中也可以瞎编乱造,这样不至于身心疲惫。至少保持着愉快的心情,吹吹牛,也是一件很开心的事。今日有一个需求,对UVC摄像头的请求进行......
UVC摄像头驱动装调试总结
前几天发表了一篇文章 UVC PTZ和扩展单元的过滤与分发调试笔记,原文见: http://www.usbzh.com/article/detail-517.html ,本来想着应该没啥问题了,可没想到上周五在实际测试过程中,还是出现了问题:经过长时间的UVC摄像头工作,突然驱动显示了大量数据包错误......
windows上面通过dshow接口访问uvc摄像头扩展单元,只能访问0x01-0x1F命令问题
最近在给客户做一个修改摄像头数据的工具,在通过dshow接口发送扩展命令的时候发现0x01-0x1F命令都可以发送成功,0x20及以上定义的命令都发送失败,并且返回错误码0x80070490。谷歌百度查了很久终于在windows官网文档中找到了答案,原来是USB 视频类驱动程序对UVC扩展单元实现......
UVC规范USB摄像头扩展单元XU的初始化分析
USB摄像头的UVC的扩展单元用于UVC摄像头的自定义功能扩展,支持UVC扩展单元的摄像头在其UVC控制接口中都会有一个扩展单元描述符。该扩展单元描述符的字段描述符了其支持的选择子,GUID,扩展单元等相关信息。我们知道,UVC摄像头在接入PC机后,和其它USB设备一样,第一步是肯定是USB设备信......
USBXU摄像头UVC扩展单元调试工具使用图解
USB中文网技术交流群临江仙大佬推出的USB摄像头UVC扩展单元调试工具,大大提高高了大家进行USB摄像头扩展单元的调试的工作效率,不过对于UVCB扩展单元不太熟悉的同学来说,有时在使用上也有一定的困难。今天本人将做一个详细的介绍它的使用方法。USB摄像头UVC扩展单元调试工具的准备该软件的版权归......
记一次USB摄像头UVC扩展单元功能的BUG追踪笔记
毫不自负的说,本人觉地自己对USB摄像头的UVC扩展单元这一块的技术点应该来说还是很熟悉的,至少截止到现在,本人对于此处的技术知识点都是成竹在胸了。无论项目中提出的各处功能,本人都比较好地完成了工作并完满地交付了。但有时,有些事,架不过时间的考验和相关配套程序条件限制。今天,本人就翻车了。从中午1......
UVCXU摄像头扩展单元调试工具UVCXU-USB中文网官方版
使用说明最新版本:为了便于调试,自己只好手动编写一个UVC扩展单元调试工具。第一版,只是实现了基本的功能,界面比较粗糙,界面如下:这里介绍一下界面的功能:UVC设备:打开软件,自动枚举系统中所有的UVC。XU_GUID:需要手动填写扩展单元的GUID,格式如界面所示。如果执行GET_CUR或......
UVCXU扩展单元调试工具SET_CUR时获取数据长度错误0x800700ea
在开发UVC扩展单元调试工具遇到的一个问题就是获取SET_CUR时的有效数据长度。进行数据的SET_CUR和GET_CUR,是通过KsProperty函数实现的。函数声明如下:NTSTATUS KsProperty( [in] PKSPROPERTY Property, [in......
UVC扩展单元描述符和设置不当会引起的设备启动失败(code:10)
UVC扩展单元用于UVC设备的自定义通讯,通过UVC扩展单元可以实现一些厂商自定义的通讯和设备特性。在一般的UVC摄像头的描述符布局中,其拓扑结构一般如下:可以看到,这上面的拓扑结构中支持2个扩展单元,所以在USB配置描述符的视频控制接口中就有两个独立的扩展单元描述符。这两件扩展单元的bSource......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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