UVC使用指南(上)

Comake Online


作者| sigmastar_项文强


本期技术专题将介绍在设备端配置 UVC 的方法以及设备端相关应用的实现方法。



1. 概述


本文将介绍在设备端配置 UVC 的方法以及设备端相关应用的实现方法。


2. 关键词介绍


EP


EP代表Endpoint,即端点,usb 传输协议中重要的概念。在USB通信中,数据的传输是通过端点来进行的。一个USB设备可以包含一个或多个端点,每个端点都有唯一的端点地址,用于在设备和主机之间进行数据传输。其中端点的传输方式主要分为控制传输(Control)、批量传输(Bulk )、终端传输(Interrupt )、等时传输(Isochronous )。


interval


在USB传输中,数据传输是以帧为单位进行传输的,interval 也就是帧间隔,是用来描述两个连续的数据传输之间时间间隔的一个参数。


maxpacket


USB 设备是通过 endpoint 进行数据传输的,而 endpoint 进行传输的时候是以包(packet)的形式进行传输的,maxpacket 就定义了对应 endpoint 最大包的大小,单位为字节。


burst


在 USB 通信中,数据传输被分为帧(frame),每个帧都包含一个特定数量的数据包(packet)。Burst 就是在一个帧周期内,USB 主机或设备发送或接收多个数据包的过程。由于 USB 的带宽是有限的,使用 Burst 可以提高数据传输的速度,从而提高设备的性能。


mult


代表一次传输可以发送多少maxpacket的数量,取决于其EP下的硬件FIFO深度。


isoc


isoc传输是一种基于时间的传输方式,它提供了一种实时传输的机制,用于传输音频和视频等实时数据。isoc传输的特点是固定带宽和数据传输速率,但是对数据包的重传和丢失不作任何处理,因此不适合传输对数据传输延迟和数据完整性要求较高的数据。


bulk


bulk传输是一种面向传输的传输方式,它提供了一种高效的机制,用于传输大量数据。bulk传输的特点是不保证数据传输速率,但是对于数据包的重传和丢失进行了处理,因此适合传输对数据传输延迟和数据完整性要求不高的数据。


PU


PU(Processing Unit)是用于描述视频处理单元的描述符,它包含了视频处理单元的各种属性和控制选项。


XU


XU(Extension Unit)是用于描述扩展单元的描述符,它允许设备厂商定义和支持自定义的功能和控制选项,以扩展设备的功能。


ConfigFs


ConfigFs(Configuration Filesystem)是一个在 Linux 内核中实现的虚拟文件系统,用于配置和管理设备和驱动程序的运行时参数。它通过将设备和驱动程序的配置参数表示为文件和目录的形式,使得用户可以通过修改这些文件和目录来配置和控制设备的行为。



3. 硬件端点说明


端点作为USB传输的唯一实体,设备和主机之间的通信都是由端点来完成,不同的端点配置会对设备的传输速率产生影响,所以下文会对端点配置如何对传输速率的影响有所介绍。此外在使用UVC设备同时可能会复合其他功能,例如RNDIS、DFU,因为每一个硬件端点的资源有限,如果端点参数配置不合理可能会造成EP端点分配不到的情况。


Ispahan系列EP信息 该系列chip只有usb2.0,使用udc-msb250x.ko



Pudding系列EP信息 该系列chip有usb2.0,使用udc-msb250x.ko,也有usb3.0,使用dwc3.ko。


使用udc-msb250x.ko的,EP为:



使用dwc3.ko的,EP为:



Tiramisu系列EP信息,同Pudding系列


Muffin系统EP信息 该系列chip有usb2.0,使用udc-msb250x.ko,也有usb3.0,使用dwc3.ko。


使用udc-msb250x.ko的,EP为:



使用dwc3.ko的,EP为:



Maruko系列EP信息 该系列chip同时有USB2.0 device usb2.0的EP信息为:



Souffle系列EP信息 该系列chip同时有USB2.0和USB3.0 usb2.0的EP信息为:



usb3.0的EP信息为:



3.1. 带宽速度说明


说明:8000代表USB一秒内可以传输的最大次数,USB2.0协议中定义了帧和微帧的概念,每个帧长为1ms,USB高速模式下,每个帧又分为8个微帧,即每个微帧长度为125us。所以理论上1s内USB可以发送的最大次数是8000。


3.1.1. bulk mode 


Interval:1-16


maxpacketsize :USB2.0协议中最大值可设置为512,USB3.0协议中最大值可设置为1024


burst:1-13 最大值视硬件情况有所改变 


因为bulk的实际带宽会根据视频流的分辨率等因素变化,所以具体传输速率要根据实际Device端的端点配置和Host端的空闲带宽决定。


3.1.2. isoc mode 


usb2.0–>max_loadsize = 8000/(2^(Interval-1))* maxpacketsize * mult 


usb3.0–>max_loadsize = 8000/(2^(Interval-1))* maxpacketsize * mult * burst 


取值范围 


Interval:1-16


maxpacketsize :最大设置为1024


mult:1-3


burst:1-13 最大值视硬件情况有所改变 


例:Interval=1,maxpacketsize =1024,mult=3,burst=5


USB2.0下对应其使用的EP速率为:23.4MB/s


USB3.0下对应其使用的EP速率为:117.1MB/s


3.2. EP端点分配说明


3.2.1. 常用设备EP占用


使用方向 EP占用情况



3.2.2. EP端点分配举例


若目前的USB2.0硬件EP的情况为下表:



如果使用UVC(IN)+UAC(IN)+RNDIS(bulk-IN+bulk-OUT+int-IN),会占用五个EP,如果设置的maxpacketsize为512,可以支持maxpacketsize大于等于512的EP只有四个,所以无法满足分配情况。


》》原帖地址


未完待续.



往期回顾


串口应用参数设置说明


SSD21X/22X如何支持USB转Ethernet?


RTOS下如何定位TTL屏颜色显示不对的问题?


如何搭建USB RNDIS并使用RTSP出流?


RTOS如何适配USB Host?





扫码进入论坛

原厂答疑|产品选型|官方资源



扫码咨询客服

SDK下载|芯片、开发板购买



X 提交 下一题

查看更多