UVC(USB Video Class,USB 视频类)协议

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 及兼容版本必备):

  1. VCC(电源正极):红色线,提供 + 5V 电压(部分场景下可通过 PD 协议调整电压)。

  2. GND(接地):黑色线,作为电路回路的负极。

  3. D+(数据正线):绿色线,用于高速数据传输(USB 2.0 及以上的高速模式)。

  4. 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 通信机制至关重要,以下是详细解析:

一、端点的基本概念

  1. 逻辑通道:端点是设备内部的虚拟 “管道”,每个端点有唯一编号(如 Endpoint 0、Endpoint 1 等)。

  2. 单向性:每个端点只支持一个方向的数据传输:

    • IN 端点:数据从设备流向主机(如摄像头向电脑发送视频帧)。

    • OUT 端点:数据从主机流向设备(如电脑向打印机发送打印任务)。

  3. 端点 0 的特殊性:所有 USB 设备必须实现 Endpoint 0,它是双向的,用于设备枚举和基本控制(如获取设备描述符、配置设备)。

二、端点的关键属性

每个端点通过端点描述符(Endpoint Descriptor) 向主机报告其能力,主要属性包括:

  1. 端点号(Endpoint Number):0-15,其中 Endpoint 0 固定为控制端点。

  2. 方向(Direction):IN 或 OUT。

  3. 类型(Type)

    • 控制(Control):用于设备配置和命令传输(如 UVC 协议的参数设置)。

    • 批量(Bulk):用于大量数据可靠传输(如文件传输)。

    • 中断(Interrupt):用于实时小数据(如键盘、鼠标输入)。

    • 同步(Isochronous):用于实时流数据(如视频、音频)。

  4. 最大包大小(Max Packet Size):一次传输的最大数据量(如 64 字节、512 字节等)。

  5. 轮询间隔(Polling Interval):主机查询端点的频率(仅对中断和同步端点重要)。

三、端点的工作机制

  1. 设备枚举阶段

    • 主机通过 Endpoint 0 发送标准请求(如GET_DESCRIPTOR)。

    • 设备返回自身信息(如厂商 ID、产品 ID、支持的配置)。

  2. 数据传输阶段

    • 主机根据设备描述符选择合适的配置和端点。

    • 通过指定端点号和方向进行数据收发。

四、不同类型端点的应用场景

端点类型

特点

典型应用

控制端点

可靠、双向、用于命令和配置

设备初始化、参数设置(如 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 协议在规范文档中明确定义了以下核心单元及其描述符格式:

  1. Camera Terminal (CT)

    • 功能:作为视频输入源(如摄像头传感器),负责捕获原始图像数据。
    • 描述符
      • VC_IN_TERMINAL:定义摄像头端点的特性(如支持的分辨率、帧率范围)。
      • 包含字段:
bTerminalType      // 终端类型(如0x0201表示Camera Terminal)
wObjectiveFocalLengthMin  // 最小焦距
wObjectiveFocalLengthMax  // 最大焦距
wOcularFocalLength        // 目镜焦距
bControlSize              // 控制参数的大小
bmControls                // 支持的控制位(如曝光、增益控制)
  1. Processing Unit (PU)

    • 功能:处理原始视频数据(如亮度、对比度调整,色彩空间转换)。
    • 描述符
      • VC_PROCESSING_UNIT:定义处理单元的能力和控制接口。
      • 包含字段:
bUnitID               // 单元ID
bSourceID             // 源单元ID(连接的上游单元)
bmControls            // 支持的控制位(如亮度、对比度、饱和度)
wDefault             // 默认值
wMinimum             // 最小值
wMaximum             // 最大值
wStep                // 步进值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88033.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 eBPF 监控 Linux 内存情况:Linux 内存调优之 eBPF 内存监控分析

写在前面 博文内容整理自 《BPF Performance Tools》 书中 内存部分对书中提到BPF工具配合实际Demo进行说明,以及一些变体的输出涉及下面一些内存问题的 BPF 观测 Demo:为什么进程的物理内存占用(RSS)不停增长?哪些代码路径会导致缺页错误的发生,缺页错误来自哪些文件?大页的…

SQL 表结构转 Go、Java、TS 自定义实体类,支持自编模板

SQL 表结构一键转自定义模型,支持 Golang Template 自由编写! 有没有想过 —— 一份 SQL 表结构,不止能转成 Java 实体类、Go struct,甚至可以: ✨ 一键生成 TypeScript 接口✨ 输出 Protobuf 定义文件✨ 输出任意你…

新型BERT勒索软件肆虐:多线程攻击同时针对Windows、Linux及ESXi系统

趋势科技安全分析师发现,一个代号为BERT(内部追踪名Water Pombero)的新型勒索软件组织正在亚洲、欧洲和美国展开多线程攻击。该组织主要针对医疗保健、科技和会展服务行业,其活动范围显示其正成为勒索软件生态中的新兴威胁力量。攻…

Three.js搭建小米SU7三维汽车实战(1)搭建开发环境

1.基本概念 ![](https://i-blog.csdnimg.cn/img_convert/a4676122e207e058f3a335df2c99d4f8.png)1) 场景 如何理解场景 场景就是一个三维的世界, 在这个世界中可以放置各种各样的物体 可以理解成一个**空间**, 或者**容器** 2) 相机 如何理解相机 🤔**思考: *…

Selenium 原理【selenium】

Selenium 是什么?Selenium 是一个专门用于自动化操作网页的工具集,它能够模拟人类在浏览器中进行的各种操作,如点击按钮、填写表单、滚动页面等。借助 Selenium,开发者可以编写脚本来控制浏览器,实现自动化测试、数据采…

【音视频】HLS-m3u8协议介绍

参考文档:https://datatracker.ietf.org/doc/html/rfc8216 一、m3u8协议概述 m3u8 协议是基于 M3U 格式扩展而来的一种多媒体播放列表协议,主要用于流媒体的索引和分发,尤其在 HLS(HTTP Live Streaming)技术中扮演核…

unity入门:动画等不显示问题——画布设置

unity入门:动画等不显示问题——画布设置动画等不显示问题大部分原因画布Canvas总结动画等不显示问题大部分原因 1、画布设置渲染模式不对,下文再讲这个问题。 2、在层级双击动画查看动画大小,有些动画创建完之后在场景大小实际很小需要在R…

【机器学习笔记 Ⅱ】3 前向传播

前向传播(Forward Propagation)实现详解 前向传播是神经网络中数据从输入层流向输出层的过程,通过逐层计算每一层的输出,最终得到预测结果。以下是其实现原理和步骤的完整解析:1. 前向传播的核心步骤 (1) 线性变换&…

人体坐姿检测系统开发实战(YOLOv8+PyTorch+可视化)

本文将手把手教你构建智能坐姿检测系统,结合目标检测与姿态估计技术,实现不良坐姿的实时识别与预警 ### 一、项目背景与价值 现代人每天平均坐姿时间超过8小时,不良坐姿会导致: - 脊椎压力增加300% - 颈椎病发病率提升45% - 腰椎间盘突出风险增加60% 本系统通过计算机…

卷积神经网络经典架构演进

LeNet-5 网络架构 #mermaid-svg-8VgsGVLusLXKY5lE {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8VgsGVLusLXKY5lE .error-icon{fill:#552222;}#mermaid-svg-8VgsGVLusLXKY5lE .error-text{fill:#552222;stroke:#5…

mybatis/mybatis-plus添加数据,自增id的值为负数

1、问题概述?使用mybatis-plus的insert方法添加数据的时候,数据虽然添加成功了,但是返回值为false,提示添加失败。当观察数据的时候,发现数据的自增主键id的值尽然为-1,或者无规律的长串负数,如…

商业创业融资项目计划书PPT模版

创业融资计划书PPT模版,营销模式分析PPT模版,创业计划书PPT模版,互联网电商创业推广手册PPT模版,商业项目计划书PPT模版,高端商业计划通用PPT模版,商业计划书,科技商业PPT模版 商业创业融资项目…

新人如何入门学习 STM32?

作为一个在嵌入式领域摸爬滚打了近10年的老兵,看到这个问题时我的思绪瞬间回到了当年那个懵懂的自己。说实话,2014年那个夏天,24岁的我刚从机械专业毕业却被调剂到了厦门某马的电子部门,第一次听到"STM32"这个词的时候&…

clickhouse数据库表和doris数据库表迁移starrocks数据库时建表注意事项总结

目录零、前言一、clickhouse数据库表在starrocks数据库建表时问题总结1.1 数据类型类问题:1.2 数据导出阶段:二、doris 数据库表在starrocks数据库建表时问题总结2.1 properties不支持的属性(直接删除):2.2 properties…

社区云管家 - 智慧生活新方式 ——仙盟创梦IDE

社区服务热门推荐数字化时代的社区服务新形态​在数字化浪潮席卷日常生活的今天,一个集多功能于一体的综合社区官网正成为连接居民与社区服务的核心纽带。这类平台以 “一站式解决生活需求” 为核心,将看房、外卖、物业、快递、求职、生鲜、出行、文具打…

MongoDB GridFS

MongoDB GridFS 引言 MongoDB 是一种高性能、可扩展的文档存储系统,它提供了灵活的数据模型和丰富的查询功能。在处理大量非结构化数据时,MongoDB 的 GridFS 功能尤为突出。GridFS 是一种用于存储和检索大文件的解决方案,它可以存储任意大小的文件,并将其分解为多个较小的…

Linux中程序的limits中的Max open files的配置由哪些参数决定

在 Linux 中,程序的 Max open files(最大打开文件数,即 ulimit -n)由多个层级的参数共同控制,具体如下: 1. 内核级全局限制(系统默认上限) 由 /proc/sys/fs/file-max 控制&#xff0…

git clone xxx.git 提示报错:fatal: Unable to find remote helper for ‘http‘

[rootroot /home]# git clone http://gitlab.xxx.qunar.com/xx/xxx.git Cloning into ‘xxx’… fatal: Unable to find remote helper for ‘http’ 我今天在Linux服务器上执行git clone一个仓库的代码到机器上,但是执行的时候提示上面的错误,我就很诧异…

【机器学习笔记Ⅰ】10 特征工程

特征工程(Feature Engineering)详解 特征工程是机器学习和数据科学中的核心环节,旨在通过对原始数据的转换、组合和提取,构建更适合模型的高质量特征。其质量直接决定模型性能上限(“数据和特征决定了模型的上限&#…

20250708-03-string结构及命令详解_笔记

一、字符串操作1. set命令1)set命令详解基本语法与参数命令格式:set key value [ex 秒数]/[px 毫秒数][nx]/[xx]有效期设置:ex参数:以秒为单位设置过期时间,如set a 1 ex 10表示1…