UVC摄像头技术笔记
+ -

USB3.0 UVC摄像头数据断传问题的分析

2021-07-22 1590 0

今天本站USB中文网站内技术交流群有人提了一个问题,说是:电脑关机重开有时候后会偶尔不出图,抓包就是传一帧就不传了
UVC摄像头数据断传问题的分析

通过与他的沟通,基本确定信息如下:

  • 自行开发的UVC摄像头
  • 采用的是USB3.0传输规范
  • USB3.0端的芯片为赛普拉斯的CYUSB3014
  • 设备的主控为FPGA
  • UVC图像数据采用的是BULK传输

使用抓包工具如BUSHOUD和力科的总线分析仪,出问题时都是传了一包后主机端不再请求数据,需要要插拔设备(即设备上电复位)才可以。

还有就是当设备出现问题时:
FPGA

这说明它的底层是有持续的数据的,但是主机不再读。
所以我当时第一怀疑是BULK传输的问题,可能是链路层的问题。不会因为链路训练失败降成USB2.0了吧。我也看不到限象,确实是在胡猜的。

另外根据它的问题,我提出了几个建议:

  • 降低数据的传输大小,这样用以确认是否数据过大引起的边界问题
  • 查看负载数据头
  • 可续可以考虑先用USB2.0调试试试

问题建议

不过这哥们的公司确实也厉害,不但买了一个力科的USB总线分析仪,还买了一个支持USB3.0的。让我是一顿佩服,直呼奢侈。
直呼奢侈
所以怪不得这哥们上来直接问我用没用过USB总线分析仪:
用没用过USB总线分析仪

现在言归正转,直接胡乱猜测也不是办法,让它把抓包时的抓包内容我看一下:
打开抓包内容,好家伙,这和USB2.0的还是有很大变化的,我差点不会玩了。。。
USB总线分析仪
后来打开它的最后几包数据可以看到:

VS_COMMIT_CONTROL请求

VS_COMMIT_CONTROL
特定类请求是:

21 01 00 02 01 00 1A 00 //VS_COMMIT_CONTROL

数据内容为:

 0: 00 00 01 0D 0B 8B 02 00
 8: 00 00 00 00 00 00 00 00
16: 00 00 00 EC 5E 00 00 40
24: 00 00

可以看到,这个数据长度是26字节,使用的是UVC1.0规范。

失败了的SelectInterface请求

后面紧跟着的是一个控制请求,看不到数据,但根据经验,COMMIT请求之后,是需要SelectInterface的,无论是BULK传输还是同步传输
失败了的SelectInterface请求

打开UVC摄像头(特定类请求)数据分析: http://www.usbzh.com/article/detail-105.html

读数据失败

后面的两个事务都是IN事务,是读数据的,可见每次读的是16384个字节,只是第一包数据读后,再次读的时候,失败了:
读数据失败

问题分析

第一次都成功了,为什么第二次失败了,由于看不到第二次的数据信息,所以我打开了第一次读数据的内容,展开如下:
数据显示
这时发现,这个数据的前4个字节为00,这明显是不正确的负载数据头啊。
负载数据头位于这4个字节之后,可以看到是12个字节的负载数据头。

关于负载数据头的分析可详见:http://www.usbzh.com/article/detail-7.html

这里基本上最大的嫌疑就是这4个00的问题了,4个00这样看来他的是32位数据总线,我怀疑他的逻辑在写数据时,由于时序的边界的问题导致FIFO多采了一组数据包导致。
所以我也问了一下他:
问题分析
也证明了是32位总线
165114200077

最后就是最后扯了一上别的,就没然后了。。。。
换了一个哦字。。。。
我是不是要多了,至始自终连个谢字都没有。。。。

我发誓,以后再也不在QQ中回答问题了。。。。
想要让我回答问题,得先分享本站链接,总不能白漂吧。就算没有说声谢字,也帮我分享了网站(虽然可能会立即删除掉分享链接),但我至少没觉地自己就是个工具人

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 篇笔记 写笔记

Linux V4L2 UVC摄像头框架浅析
V4L2 :video for linux version 2 ,是 Linux 里一套标准的视频驱动,它支持 UVC 标准的摄像头。本文来分析一下它的核心框架。整个v4l2的框架分为三层:在应用层,我们可以在 /dev 目录发现 video0 类似的设备节点,上层的摄像头程序打开设备节点进行......
打开UVC摄像头(特定类请求)数据分析
通过上节可以知道,设备支持4种的视频格式,且每种格式如下:MPJPG数据格式bFormatIndexbFrameIndex分辩率及及帧率11640x480x(30,15,10)121280x720x(30,15,10)131920x1080x(30,15......
UVC摄像头扩展单元功能的开发步骤是什么?
写在扩展单元的题外话本人在开发支持UVC扩展单元的directShow应用时,必现并不需要注册接口,只需要在其源过滤器参照后续的代码枚举相关的接口如IKsControl,IKsTopologyInfo定位到指定的扩展单元接口后,直接使用其对应的IKsControl::KsProperty即可实现扩展......
UVC摄像头的延迟reduce latency
一般的ISP,200W30帧来说,sensor进来缓存一帧就是33ms+vpu处理时间大概10ms+jpeg编码时间16ms+USB传输时间200KB大概7、8ms,最后就是windows上的显示延迟时间,如果JPEG编码出来缓存不止一帧,时间就更长了,所以一般会超过100多ms另外,网络传输如使......
UVC Windows下UVC摄像头数据分析
这里我们分析一款UVC摄像头来进行数据分析。环境:win10 x64工具:bushound,usbviewer将摄像头插入PC后,打开usbviewer工具,可以看到关于此摄像头的相关信息。可以看到,这个摄像头其实是一个USB复合设备,所以其对应的系统驱动为USBCCGP,然后再由USB复合设......
UVC摄像头的关闭流程及抓包分析
通过UVC协议规范可以知道,UVC的数据传输支持USB四种传输中的批量传输和同步传输,所以对于UVC摄像头,当我们在摄像头正在工作时,需要停止摄像头工作,执行的操作是不同的。在Linux的源代码中,摄像头的流关闭是由函数uvc_video_stop_streaming完成的。代码比较简单,我们直接给......
UVC摄像头批量传输的StreamOn和StreamOff
在UVC规范中,UVC摄像头视频数据的传输方式支持两种,分别为批量传输和同步传输。UVC摄像头数据传输的格式按负载数据头的方式按帧进行打包传输。根据USB规范可知,同步传输方式是只要带中带有同步端点的接口,系统会定时从设备中读取数据,无论设备中是否有数据。而如要要停止数据的传输,只需要选中不带有同步......
Linux源码分析UVC摄像头的初始化流程分析
UVC摄像头的初始化发生在硬件被接入USB集线器中,设备初USB驱动识别为摄像头的后续初始化流程。和Windows的AddDevice驱动函数一样,Linux设备的创建和侦测是通过int uvc_probe函数实现的。其函数的调用关系如下://linux/v5.11.11/source/drive......
关于UVC摄像头指示灯的调试过程总结
最近遇到了一个很是奇怪的UVC摄像头指示灯问题,现象如下:上层应用是一个会议系统软件,当需要进行会议时,点击会议按钮添加会议。这时应用软件打开摄像头,并开始与服务器进行网络连接。当然由于摄像头的打开,摄像头指示灯点亮。上层应用软件与服务器连接后,进行会议界面。这时突然摄像头指示灯熄灭,但会议正常,摄......
UVC摄像头打开关闭数据分析
UVC相机在打开时,会使用SET_INTERFACE命令,在停止播放时,也会发送SET_INTERFACE命令。打开时,数据抓包为:CTL 01 0b 01 00 01 00 00 00 SET INTERFACE停播放时,数据抓包为:CTL 01 0b 00 00 01......
USB 等时/同步传输、块传输与转换设置在UVC摄像头驱动中的探讨
最近在Windows10 x64环境下,开发了一个虚拟UVC摄像头驱动。确切的来说这不是摄像头驱动,而是一个虚拟USB总线驱动。使用该虚拟总线驱动使用应用软件通过IOCTL控制总线子设备的创建与卸载。框架设计驱动安装完成后,是一个单纯的USB虚拟总线。应用软件通过发送自定义IOCTL码IOCTL......
USB通用父驱动usbccgp.sys的过滤UVC摄像头、UAC麦克风和HID设备硬件ID
激动的心情,无溢言表。。虽然只是一个很简单的东西。。但相于折腾了这么久,还是很开心的了。最近有个需求,功能是这样的:有一个USB复合设备,连接到windows系统中它在windows下的设备树如下:USB Composite Device(usbccgp.sys)UVC CameraUAC ......
怎么开发UVC摄像头应用软件程序及使用请求接口API
在Windows环境下,摄像头的视频流属于多媒体流范畴,故不能直接使用Windows提供的API接口进行视频程序的开发.所以微软精心为我们准备了提供了一套关于多媒体流的开发框架。微软提供的多媒体流的开发框架当前有两种:.DirectShow,适用了windows xp及以后的操作系统,不过从Vist......
比较好用的UVC摄像头应用测试工具有那些?
PotPlayer播放器个人当前使用感觉最好的工具,支持的解码器比较全,而且可以查看视频的一些信息。在菜单/打开/设备设置可以指定需要打开的视频流格式。打开摄像头,可以按快捷键TAB键,实时显示当前视频流的信息。简易摄像头playcap个人在下载的代码上修改的,详见:http://www.usbzh......
Linux源码分析UVC摄像头的打开流程及抓包分析
和关闭摄像头类似,Linux使用uvc_video_start_streaming函数打开摄像头int uvc_video_start_streaming(struct uvc_streaming *stream){ int ret; ret = uvc_video_clock_init......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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