UVC摄像头技术笔记
+ -

UVC摄像头USB批量传输BULK数据传输方式的打开与关闭StreamOn StreamOff

2023-02-14 591 0

USB的批量传输中断传输是一样的简单,但经常发现有人在问批量传输UVC摄像头的打开与半闭问题的边界问题,特别是摄像头关闭的判断。

BULK摄像头的打开

我们通过BUSHOUND抓包的内容如下:

Device  Length    Phase  Data                                                                                                    Description   
------  --------  -----  ------------------------------------------------------------------------------------------------------  --------------
  42.0            CTL    a1 81 00 01  01 00 22 00                                                                                GET CUR       
  42.0        34  IN     01 00 01 01  15 16 05 00  00 00 00 00  00 00 00 00  00 00 00 a4  1f 00 0c 48  3f 00 00 00  00 00 03 01  ..............
  42.0            CTL    21 01 00 01  01 00 22 00                                                                                SET CUR       
  42.0        34  OUT    01 00 02 02  15 16 05 00  00 00 00 00  00 00 00 00  00 00 00 a4  1f 00 00 00  00 00 00 00  00 00 03 01  ..............
  42.0            CTL    a1 81 00 01  01 00 22 00                                                                                GET CUR       
  42.0        34  IN     01 00 02 02  15 16 05 00  00 00 00 00  00 00 00 00  00 00 00 90  7e 00 0c c8  00 00 00 00  00 00 03 01  ..............
  42.0            CTL    a1 83 00 01  01 00 22 00                                                                                GET MAX       
  42.0        34  IN     00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ..............
  42.0            CTL    a1 82 00 01  01 00 22 00                                                                                GET MIN       
  42.0        34  IN     00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ..............
  42.0            CTL    21 01 00 02  01 00 22 00                                                                                SET CUR       
  42.0        34  OUT    01 00 02 02  15 16 05 00  00 00 00 00  00 00 00 00  00 00 00 90  7e 00 0c c8  00 00 00 00  00 00 03 01  ..............
  42.0            CTL    01 0b 00 00  01 00 00 00                                                                                SET INTERFACE 
  42.1     51200  IN     0c 80 00 00  00 00 00 00  00 00 00 00  00 00 00 01  40 01 0c 01  ff ff 01 60  00 00 03 00  00 03 00 00  ..............

可以看到,通过复杂的UVC特定类请求GET_CUR,SET_CUR等,最终VS_PROBE_CONTROLL/VS_COMMIT_CONTROL之后,然后SET_INTERFACE之后,通过BULK端点0x81获取到了数据。
关于其具体的类似分析可参见:https://www.usbzh.com/article/detail-105.html

而通过南京沁恒的USB总线分析仪USB2.0 Monior抓到的数据类示:
UVC摄像头USB批量传输BULK数据传输

BULK摄像头的关闭

通过BUSHOUND抓到的BULK数据传输的关闭摄像头的内容如下:

42.1     45388  IN     0c 83 00 00  00 00 00 00  00 00 00 00  00 00 00 01  02 01 d0 00  2d c4 0e e0  8b 42 8e f3  ef d8 f2 2f 
42.0            CTL    01 0b 00 00  01 00 00 00                                                                                SET INTERFACE

可以看到就是简单的SET_INTERFACE,但是通过USB总线分析仪就是再是这么简单了:
BULK摄像头的关闭
可以看到,这里的关键点其实是:

02 01 00 00 81 00 00 00

通过USB标准请求及描述符在线分析解析为:

0x02,        // bmRequestType: Dir: H2D, Type: Standard, Recipient: Endpoint
0x01,        // bRequest (Clear Feature)
0x00, 0x00,  // wValue Feature Selector: 0
0x81, 0x00,  // wIndex Endpoint: 0x81 (IN/D2H)
0x00, 0x00,  // wLength = 0

// 8 bytes

可以看到,其对应的是CLEAR_FEATURE,对比USB 清除特性请求ClearFeature https://www.usbzh.com/article/detail-89.html 一文可知:
这是对于端点的停止特性ENDPOINT_HALT.

所以这也证明了,BUSHOUND抓到的包并不一定是USB总线上的数据包,但大部分是。只是因为其所在的层次不同,故数据不同。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

UVC特定类请求get cur返回长度是26或者是34的是什么?
从返回的长度来看,你应该是在应用打开摄像头,进行视频格式及图形分辨率协商返回的数据长度.UVC视频流接口这两个特别重要的选择子,分别用于协商过程和提交数据格式,让固件开始发送数据。ControlSelector ValueVS_PROBE_CONTROL0x01VS_COMMIT_CONTROL0x......
UVC摄像头批量传输StreamOn和StreamOff
在UVC规范中,UVC摄像头视频数据的传输方式支持两种,分别为批量传输和同步传输。UVC摄像头数据传输的格式按负载数据头的方式按帧进行打包传输。根据USB规范可知,同步传输方式是只要带中带有同步端点的接口,系统会定时从设备中读取数据,无论设备中是否有数据。而如要要停止数据的传输,只需要选中不带有同步......
UAC 特定类请求
特定类请求一般用于设置或获取音频控制。这些控制又分为两大部分:音频控制请求:对音频控制单元或终端进行控制。音频流请求: 如对音频流控制的请求,如音频采相率等。音频设备类也支持其他特定于类的请求:内存请求(Memory Request),每个可寻址的实体或终端,可导出一个内存映射接口。提供对该实体内存......
UVC批量传输中的dwMaxVideoFrameSize和dwMaxPayloadTransferSize关系
上一节看了UVC等时/同步传输的关系,这里我们介绍一相批量传输批量传输在这里相对于同步传输要简单的多。uvc_video_start_transfer中的代码如下: else { /* Bulk endpoint, proceed to URB initialization. */ ......
【UVC调试笔记】第一个GET CUR请求产生babble detected的原因排查
【前言】开通blog的目的有两个:一是记录UVC调试过程中遇到的问题和解决方案,方便自己review二是给广大开发者提供一些解决问题的思路故障现象:枚举完以后,打开videocap,从bushoud上抓包,可以看出第一个GET CUR会产生一个babble detected的error排查过程:通......
USB超高速批量传输
批量传输类型是用来支持想要跟相当大的海量数据通信设备,传输能使用任何可用的超速带宽。超速批量传输功能端点提供以下:对基于有限带宽的超速总线访问保证数据的发送,但是不保证带宽和发送时间超速维持下面的批量传输管道特征:对批量传输管道通信流没有强制固定的数据结构批量传输管道是一个流式管道,因此总是有通信流......
USB 批量/块传输方式
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输。批量传输一般用于批量的和非实时的数据传输,通俗的来说就是用于数据量大但对时间要求又不高的场合的一种传输方式,类似用于USB打印机和USB扫描仪等等。批量传输使用批量传输事务,一次批量传输事务分为三个阶段:令牌包阶段、数据包......
SET_CUR/GET_CUR
设置请求SET_CUR设置请求用于设置视频功能的相关属性,这些属性一般由相关的端点、接口来实现。bmRequestType(1)bRequest(1)wValue(2)wIndex(2)wLength(2)Data(0~N)00100001(接口或实体)————— 001......
U盘枚举失败-该设备无法启动(GET_MAX_LUN请求)
群里有人用STM32搞了一个U盘,但是U盘在插入电脑后在设备管理器是枚举失败。我让他看一下设备状态:又是熟悉的错误码10,表示设备启动失败。设备的启动失败,一般在设备获取描述符获取之后,初始会失败,我之前在弄USB虚拟鼠标的时候也遇到此类情况。不过由于这个设备是U盘,本人还没有研究USB存储协议,只......
基于UVC规范的USB摄像头数据传输模式的总结
根据UVC(USB VIDEO CLASS)规范,UVC视频数据传输方式支持:同步传输即ISO传输批量传输即BULK传输但是不同的操作系统对UVC规范的支持不一定是全量支持的:Windows操作系统对于windows操作系统,对UVC版本的支持情况如下:UVC 版本Windows ......
使用BUSHOUND手动分析USB批量传输的URB
使用BUSHOUND抓取U盘的批量传输的URB数据,我们对其其进行数据分析:13 IN 55 53 42 53 40 0b ac 57 00 00 00 00 00 URB80 00 09 00 00 00 00 00 d8 f2 75 a0 77 7f 00 00 ......
USB键盘在Linux环境下一直返回NAK的输入端点和一直OUT数据的输出端点
群里有同学反馈,自己做的USB键盘在Windows下正常,但在Linux下就失败,想让帮忙分析一下原因。一个比较好的消息是他那边有USB总线分析仪,所以只需要抓包就可以进行分析了。最好开他给的抓包截图是样子的:从它的截图可以看到,USB键盘在获取了该键盘的HID报告描述符后,紧跟着一下发Report......
USB2.0 CLEAR_FEATURE传输及事务
USB2.0 CLEAR_FEATURE传输及事务,更多详见CLEAR_FEATURE标准请求......
USB2.0 中断传输和批量传输数据包的PID序列
其实在Windows下开发USB驱动时,USB的数据传输模式只有三种模式:多种控制传输方式同步传输方式批量或中断传输方式这一点在URB的结构体上表现的很清楚. struct _URB_CONTROL_TRANSFER UrbControlTransfer; struct _UR......
USB设备的端点停止(ENDPOINT_HALT)
USB设备在与主机进行通讯时,有时会出现端点停止问题,这时当主机与设备进行数据通讯时,设备会给主机返回STALL握手包,表示该端点已经停止即不能发或者接收数据。STALL握手包表示了该设备端点的当前状态,停止了的端点不能自行恢复,需要由主机发送CLEAR_FEATURE标准请求来恢复。USB端点的......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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