UVC 基础学习(6):端点描述符介绍

简介: 今天带大家认识一下UVC端点描述符信息。

在USB规范中,端点描述符用于描述设备的端点信息。


UVC 端点描述符 分为两大类:


  • VideoControl Endpoint Descriptor:视频控制接口端点描述符。


  • VideoStream Endpoint Descriptor:视频流接口端点描述符。


VC Endpoint Descriptor


视频控制接口(VC)的端点描述符可以存在,也可以不存。默认使用端点0进行控制传输

如果存在,必须是中断类型的,且必须为输入端点。


Standard VC Interrupt Enpoint Descriptor


  • bLength : 描述符大小.固定为0x07.


  • bDescriptorType : 接口描述符类型.固定为0x05.


  • bEndpointType : USB设备的端点地址.Bit7为方向位,必须为1,用于标识为输入端点;BIT4-6为0,BIT0-3表示端点ID


  • bmAttributes : 端点属性.BIT0-1必须为11,标识为中断端点;BIT2-3对于同步/等时传输有效,这里必须为00;


  • wMaxPacketSize:本端点接收或发送的最大信息包大小.


  • bInterval : 时间间隔,对于全速为1ms为单位;对于高速为2的N次方。


image.png


static struct usb_endpoint_descriptor uvc_control_ep = {
 .bLength  = USB_DT_ENDPOINT_SIZE,
 .bDescriptorType = USB_DT_ENDPOINT,
 .bEndpointAddress = USB_DIR_IN,
 .bmAttributes  = USB_ENDPOINT_XFER_INT,
 .wMaxPacketSize  = cpu_to_le16(UVC_STATUS_MAX_PACKET_SIZE),
 .bInterval  = 8,
};


Class-Specific Standard VC Interrupt Enpoint Descriptor


  • bLength : 描述符大小.固定为0x05.


  • bDescriptorType : 描述符类型.固定为USB_DT_CS_ENDPOINT


  • bDescriptorSubType : 描述符子类。固定为UVC_EP_INTERRUPT


  • wMaxTransferSize:最大传输size


image.png


static struct uvc_control_endpoint_descriptor uvc_control_cs_ep = {
 .bLength  = UVC_DT_CONTROL_ENDPOINT_SIZE,
 .bDescriptorType = USB_DT_CS_ENDPOINT,
 .bDescriptorSubType = UVC_EP_INTERRUPT,
 .wMaxTransferSize = cpu_to_le16(UVC_STATUS_MAX_PACKET_SIZE),
};


VS Endpoint Descriptor


VS 中的端点描述符用于传输视频数据。VS Data Endpoint 可以是同步传输(iso)或者批量传输(bulk)


Standard VS Isochronous Video Data Endpoint Descriptor


  • bLength : 描述符大小.固定为0x07.


  • bDescriptorType : 接口描述符类型.固定为0x05.


  • bEndpointType : USB设备的端点地址.Bit7为方向位,必须为1,用于标识为输入端点;BIT4-6为0,BIT0-3表示端点ID


  • bmAttributes : 端点属性.BIT0-1必须为01,标识为等时传输;BIT2-3:


  • 00:无同步


  • 01:异步(UVC规范上设置为异步)


  • 10:适配


  • 11:同步


  • wMaxPacketSize:本端点接收或发送的最大信息包大小.


  • bInterval : 时间间隔


image.png


高速设备


static struct usb_endpoint_descriptor uvc_hs_streaming_ep = {
 .bLength  = USB_DT_ENDPOINT_SIZE,
 .bDescriptorType = USB_DT_ENDPOINT,
 .bEndpointAddress = USB_DIR_IN,
 .bmAttributes  = USB_ENDPOINT_SYNC_ASYNC
    | USB_ENDPOINT_XFER_ISOC,
 /* The wMaxPacketSize and bInterval values will be initialized from
  * module parameters.
  */
};


Standard VS Bulk Video Data Endpoint Descriptor


当为批量传输时,和普通的批量端点描述符一致。这里需要注意bmAttributes设置


参考


《UVC 1.5 Class specification.pdf》


《USB_Video_Example 1.5.pdf》


 www.usbzh.com

相关文章
|
Ubuntu Linux 编译器
字符驱动设备原理及其相关函数(一)
字符驱动设备原理及其相关函数(一)
132 0
|
3月前
|
存储 安全 测试技术
GPIO描述符消费者接口 【ChatGPT】
GPIO描述符消费者接口 【ChatGPT】
|
内存技术
USB摄像头描述符参数获取和来源分析(下)
USB摄像头描述符参数获取和来源分析(下)
86 0
|
存储 Linux API
嵌入式Linux 字符设备驱动标准ioctl接口
嵌入式Linux 字符设备驱动标准ioctl接口
|
编解码
USB摄像头描述符参数获取和来源分析(上)
USB摄像头描述符参数获取和来源分析
159 0
|
监控 Linux
uvc摄像头驱动uvc设备的注册分析
uvc摄像头驱动uvc设备的注册分析
410 0
|
Linux
字符驱动设备原理及其相关函数(二)
字符驱动设备原理及其相关函数(二)
69 0
|
索引
UVC 基础学习(3):基础描述符介绍
UVC 基础学习(3):基础描述符介绍
593 0
|
编解码 C++ 索引
UVC 基础学习(5):VideoStream Interface 描述符介绍
今天我们继续学习UVC的接口描述符:VideoStream 。 VideoStream 接口描述符是整个UVC设备最重要的组成之一,和VideoControl一样,其也包含标准接口和特殊类接口。
876 0
|
索引
UVC 基础学习(4):VideoContrl Interface 及其描述符介绍
所有信息整理来源于UVC 官方spec 翻译理解及内核源码做参考
758 0