UVC(USB Video Class,USB 视频类)协议并非专门仅用于相机,但其核心应用场景集中在视频采集设备,相机是最典型的代表。
其适用设备除了常见的 USB 相机(包括 webcam、工业相机、监控摄像头等),还包括其他具备视频采集或处理功能的 USB 设备,例如:
视频采集卡:部分 USB 接口的视频采集卡支持 UVC 协议,可将外部视频信号(如 HDMI、SDI 信号)转换为符合 UVC 标准的视频流传输给主机。
带视频功能的设备:一些集成了摄像头的设备,如智能手机通过 USB 连接作为视频源时(部分机型支持)、某些扫描仪的视频预览功能模块等,也可能采用 UVC 协议进行视频数据传输。
USB 接口的线路
USB 接口的线路数量根据版本和接口类型有所不同,核心是通过几根线实现数据传输、供电等功能。以下是具体分类:
一、基础线路构成(以常见的 USB 2.0 及以上为例)
无论接口类型(Type-A、Type-B、Type-C 等),USB 的核心线路包括 4 根基础线(USB 2.0 及兼容版本必备):
VCC(电源正极):红色线,提供 + 5V 电压(部分场景下可通过 PD 协议调整电压)。
GND(接地):黑色线,作为电路回路的负极。
D+(数据正线):绿色线,用于高速数据传输(USB 2.0 及以上的高速模式)。
D-(数据负线):白色线,与 D + 配合传输差分信号,确保数据抗干扰能力。
这 4 根线是 USB 实现供电和基础数据传输(USB 1.1/2.0 速率)的核心,早期的低速、全速设备仅依赖这 4 根线即可工作。
二、高速版本的额外线路(USB 3.0 及以上)
为了支持更高的传输速率(如 USB 3.0 的 5Gbps、USB 3.1 的 10Gbps 等),USB 3.0 及以上版本在基础 4 根线之外,增加了4 根高速差分信号线,总线路数量达到 8 根:
SSTX+ / SSTX-:发送差分对(SuperSpeed Transmit),用于主机向设备发送高速数据。
SSRX+ / SSRX-:接收差分对(SuperSpeed Receive),用于设备向主机返回高速数据。
这些额外的线路专门负责超高速数据传输,与原有的 D+/D - 线路(兼容 USB 2.0)独立工作,实现 “高速与兼容并存”。
三、Type-C 接口的线路特殊性
Type-C 接口为了支持可逆插拔和多功能(如视频输出、PD 供电),线路设计更复杂,但核心仍基于上述线路扩展:
保留VCC、GND、D+、D- 4 根基础线。
保留SSTX+/-、SSRX+/- 4 根高速线(USB 3.0 及以上)。
增加了CC1、CC2(Configuration Channel,配置通道):用于识别设备类型、协商供电方向和功率(PD 协议依赖)、判断插入方向等。
部分 Type-C 线缆还包含边带使用线(SBU1、SBU2):支持音频、视频信号传输(如 DisplayPort Alt Mode)。
因此,Type-C 线缆的总线路数量通常为12 根左右(含屏蔽线等辅助线路),但核心功能仍依赖上述基础和高速数据 / 电源线。
总结
USB 2.0 及以下:4 根线(VCC、GND、D+、D-)。
USB 3.0 及以上(非 Type-C):8 根线(4 根基础线 + 4 根高速差分线)。
USB Type-C(含 USB 3.0 及以上):约 12 根线(含基础线、高速线、配置通道线等)。
端点
在 USB 协议中,端点(Endpoint) 是设备与主机进行通信的逻辑通道,是数据传输的最小单位。理解端点的概念对掌握 USB 通信机制至关重要,以下是详细解析:
一、端点的基本概念
逻辑通道:端点是设备内部的虚拟 “管道”,每个端点有唯一编号(如 Endpoint 0、Endpoint 1 等)。
单向性:每个端点只支持一个方向的数据传输:
IN 端点:数据从设备流向主机(如摄像头向电脑发送视频帧)。
OUT 端点:数据从主机流向设备(如电脑向打印机发送打印任务)。
端点 0 的特殊性:所有 USB 设备必须实现 Endpoint 0,它是双向的,用于设备枚举和基本控制(如获取设备描述符、配置设备)。
二、端点的关键属性
每个端点通过端点描述符(Endpoint Descriptor) 向主机报告其能力,主要属性包括:
端点号(Endpoint Number):0-15,其中 Endpoint 0 固定为控制端点。
方向(Direction):IN 或 OUT。
类型(Type):
控制(Control):用于设备配置和命令传输(如 UVC 协议的参数设置)。
批量(Bulk):用于大量数据可靠传输(如文件传输)。
中断(Interrupt):用于实时小数据(如键盘、鼠标输入)。
同步(Isochronous):用于实时流数据(如视频、音频)。
最大包大小(Max Packet Size):一次传输的最大数据量(如 64 字节、512 字节等)。
轮询间隔(Polling Interval):主机查询端点的频率(仅对中断和同步端点重要)。
三、端点的工作机制
设备枚举阶段:
主机通过 Endpoint 0 发送标准请求(如
GET_DESCRIPTOR
)。设备返回自身信息(如厂商 ID、产品 ID、支持的配置)。
数据传输阶段:
主机根据设备描述符选择合适的配置和端点。
通过指定端点号和方向进行数据收发。
四、不同类型端点的应用场景
端点类型 | 特点 | 典型应用 |
---|---|---|
控制端点 | 可靠、双向、用于命令和配置 | 设备初始化、参数设置(如 UVC 亮度调整) |
批量端点 | 高吞吐量、保证数据完整 | 打印机、存储设备(如 U 盘) |
中断端点 | 低延迟、有响应时间保证 | 键盘、鼠标、游戏手柄 |
同步端点 | 定时传输、允许少量丢包 | 摄像头视频流、麦克风音频流 |
五、端点与接口、配置的关系
配置(Configuration):设备的一种工作模式(如低功耗模式、高性能模式),一个设备可支持多个配置。
接口(Interface):配置中的功能单元(如摄像头的视频流接口、麦克风的音频接口)。
端点(Endpoint):接口的具体数据通道。
示例:一个 UVC 摄像头可能包含:
1 个配置(默认配置)。
2 个接口(视频流接口、麦克风音频接口)。
视频接口包含:
控制端点 0(双向)。
同步 IN 端点(传输视频帧)。
音频接口包含:
同步 IN 端点(传输音频数据)。
六、端点的数量限制
每个 USB 设备最多可支持32 个端点(16 个 IN + 16 个 OUT)。
实际应用中,大多数设备仅使用少数端点(如 UVC 摄像头通常使用 2-3 个端点)。
USB 标准请求字段
USB 标准请求是用在控制传输中的数据包,由 8 个字节构成,包含 5 个字段,分别是 bmRequestType、bRequest、wValue、wIndex 和 wLength。具体如下:
- bmRequestType:占 1 个字节,是一个位图,用于表示数据传输方向、请求类型和接收者。
- D7 位:表示数据方向,0 为主机到设备,1 为设备到主机。
- D6 - D5 位:表示请求类型,00 为标准请求命令,01 为类请求命令,10 为用户定义的命令,11 为保留值。
- D4 - D0 位:表示接收者,00000 为设备,00001 为接口,00010 为端点,其他值保留。
- bRequest:占 1 个字节,为请求命令代码。在标准的 USB 命令中,每一个命令都有对应的编号,该字段的值就是相应的编号。例如,获取状态(Get Status)命令的代码为 00H,清除特性(Clear Feature)命令的代码为 01H 等。
- wValue:占 2 个字节,根据不同的命令,其含义也不同。例如在设置地址(Set Address)请求中,wValue 包含要设置的设备地址。
- wIndex:占 2 个字节,主要用于传送索引或偏移值。例如,当请求涉及特定端点时,bit3 - 0 表示端点号,bit7 表示方向(0 为 OUT,1 为 IN);当涉及接口时,bit7 - 0 表示接口号。
- wLength:占 2 个字节,用于指定数据阶段要传输的字节数。对于主机到设备的传输,该字段指定主机将传输的数据量;对于设备到主机的传输,该字段指定设备可以传输的最大数据量。如果没有数据阶段,该字段为 0。
Processing Unit(PU,处理单元)和 Camera Terminal(CT,摄像头端点)
在 UVC(USB Video Class,USB 视频类)设备中,Processing Unit(PU,处理单元)和 Camera Terminal(CT,摄像头端点)是两个重要的功能模块,UVC 协议严格定义了这些功能单元的格式和描述符结构。具体如下:
- Processing Unit(处理单元):是 UVC 设备中的一个功能单元,用于对输入的数据进行处理。它可以接收来自 Selector Unit(选择单元)的数据,经过一系列处理后,将结果输出到 Output Terminal(输出端点)。例如,对视频数据进行编码、解码、降噪、色彩空间转换等操作,以满足不同的应用需求。
- Camera Terminal(摄像头端点):代表硬件上的数据采集源,通常对应摄像头的传感器。它主要用于控制视频流传输中的设备特性,规定支持控制扫描模式(逐行扫描或隔行扫描)、自动曝光模式、自动聚焦、可变光圈、移动镜头、滚动、数字窗口等特性。
在 UVC 设备中,数据从 Sensor 和其他复合视频设备流入,由输入端点(Input Terminal)和 Camera Terminal 输入,经过 Selector Unit 选择后送到 Processing Unit 处理,再由 Output Terminal 绑定到指定的 USB 端点,最后与主机交互数据发送到 Host。
UVC 协议在规范文档中明确定义了以下核心单元及其描述符格式:
Camera Terminal (CT)
- 功能:作为视频输入源(如摄像头传感器),负责捕获原始图像数据。
- 描述符:
VC_IN_TERMINAL
:定义摄像头端点的特性(如支持的分辨率、帧率范围)。- 包含字段:
bTerminalType // 终端类型(如0x0201表示Camera Terminal) wObjectiveFocalLengthMin // 最小焦距 wObjectiveFocalLengthMax // 最大焦距 wOcularFocalLength // 目镜焦距 bControlSize // 控制参数的大小 bmControls // 支持的控制位(如曝光、增益控制)
Processing Unit (PU)
- 功能:处理原始视频数据(如亮度、对比度调整,色彩空间转换)。
- 描述符:
VC_PROCESSING_UNIT
:定义处理单元的能力和控制接口。- 包含字段:
bUnitID // 单元ID bSourceID // 源单元ID(连接的上游单元) bmControls // 支持的控制位(如亮度、对比度、饱和度) wDefault // 默认值 wMinimum // 最小值 wMaximum // 最大值 wStep // 步进值