USB调试笔记
+ -

USB大包数据数据传输问题分析

2025-03-27 7 0

经常做WINUSB或者LIBUSB驱动开发的同学可以知道,这些设备一般的输入输出端点为bulk传输,对于高速设备,它们的最大包大小一般为512字节。
如本会手中使用WCH569芯片(该芯片本身支持USB3.0,不过本人这里让其工作在USB2.0高速下),使用沁恒自带的示例CH372Device,下载固件后,其有多达7对输入输出端点,并且示例代码实现了INOUT端点的收发回环。

Number of open Pipes     : 0x0E (14 pipes to data endpoints)
Pipe[0]                  : EndpointID=1  Direction=IN   ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[1]                  : EndpointID=1  Direction=OUT  ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[2]                  : EndpointID=2  Direction=IN   ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[3]                  : EndpointID=2  Direction=OUT  ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[4]                  : EndpointID=3  Direction=IN   ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[5]                  : EndpointID=3  Direction=OUT  ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[6]                  : EndpointID=4  Direction=IN   ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[7]                  : EndpointID=4  Direction=OUT  ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[8]                  : EndpointID=5  Direction=IN   ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[9]                  : EndpointID=5  Direction=OUT  ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[10]                 : EndpointID=6  Direction=IN   ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[11]                 : EndpointID=6  Direction=OUT  ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[12]                 : EndpointID=7  Direction=IN   ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0  
Pipe[13]                 : EndpointID=7  Direction=OUT  ScheduleOffset=0  Type=Bulk  wMaxPacketSize=0x200   bInterval=0

对于Windows上位机,对其安装winusb驱动,应用通讯使用LIBUSB实现。

    CLibUsb usb;
    if (!usb.CreateUsbDevice(0x1000, 0x2d04))
    {
        printf("CreateUsbDevice err\n");
        usb.UsbClose();
        return;
    }
    usb.SelectInterface(0x00);

    UCHAR buff[1024];
    for(UCHAR i=0;;i++)
    {
        INT rtn;
        memset(buff, i, sizeof(buff));
        if (usb.SendData(0x01, buff, sizeof(buff), &rtn))
        {
            printf("send=%d\n", rtn);
        }
        if (usb.RecvData(0x81, buff, sizeof(buff), &rtn))
        {
            printf("RecvData=%d\n", rtn);
        }
    }

但在实际测试过程中,第一包数据都无法发送正常。
使用总线分析仪抓包可知:
16040895177
数据有大量的NAK,是由于设备端无法接收导致。

而将每次发送的数据和接收大小改为512字节之后,可以看到发送512字节,接收512字节。
161000624586

这里的原因是IN和OUT端点是同步引起的。

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摄像头批量传输的StreamOn和StreamOff
在UVC规范中,UVC摄像头视频数据的传输方式支持两种,分别为批量传输和同步传输。UVC摄像头数据传输的格式按负载数据头的方式按帧进行打包传输。根据USB规范可知,同步传输方式是只要带中带有同步端点的接口,系统会定时从设备中读取数据,无论设备中是否有数据。而如要要停止数据的传输,只需要选中不带有同步......
UVC批量传输中的dwMaxVideoFrameSize和dwMaxPayloadTransferSize关系
上一节看了UVC等时/同步传输的关系,这里我们介绍一相批量传输批量传输在这里相对于同步传输要简单的多。uvc_video_start_transfer中的代码如下: else { /* Bulk endpoint, proceed to URB initialization. */ ......
USB超高速批量传输
批量传输类型是用来支持想要跟相当大的海量数据通信设备,传输能使用任何可用的超速带宽。超速批量传输功能端点提供以下:对基于有限带宽的超速总线访问保证数据的发送,但是不保证带宽和发送时间超速维持下面的批量传输管道特征:对批量传输管道通信流没有强制固定的数据结构批量传输管道是一个流式管道,因此总是有通信流......
USB 批量/块传输方式
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输。批量传输一般用于批量的和非实时的数据传输,通俗的来说就是用于数据量大但对时间要求又不高的场合的一种传输方式,类似用于USB打印机和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 ......
USB2.0 中断传输和批量传输数据包的PID序列
其实在Windows下开发USB驱动时,USB的数据传输模式只有三种模式:多种控制传输方式同步传输方式批量或中断传输方式这一点在URB的结构体上表现的很清楚. struct _URB_CONTROL_TRANSFER UrbControlTransfer; struct _UR......
USB2.0低速、全速、高速模式四种传输模式速宽对比
USB 数据传输通过事务来实现。事务在帧的主机控制时间间隔内进行。事务的长度和频率取决于端点使用的传输类型。可以在一个帧中发送的传输类型和帧长度由 USB 的指定速度定义。低速模式下控制传输、中断传输、批量传输、同步传输对比低速帧速率为1ms传输类型最大传输长度每帧的传输次数最大理......
USB传输模式选择及各传输特性对比
通用串行总线 (USB) 传输类型是指主机和设备端点之间使用的通信模式。传输类型决定了用于与端点通信的事务的频率和长度。传输类型还可以分配一个循环冗余校验和 (CRC),以对每个传输的数据包进行验证。传输类型由设备设置,并在枚举过程中与主机通信。USB分为四种传输模式,分别为中断传输模式,控制传输......
批量传输:自定义接口实现
[TOC]在进行 usb 传输的过程中,往往需要大容量传输。无外乎批量传输。典型的批量传输协议如下:cdc-acm :usb 转串口。win10 以下需要 pc 驱动。massstroage:U 盘设备。通常仅仅只需要批量传输,而不想引入复杂的协议,这个时候自定义接口进行批量传输就比较合适了,需......
UVC摄像头USB批量传输BULK数据传输方式的打开与关闭StreamOn StreamOff
USB的批量传输和中断传输是一样的简单,但经常发现有人在问批量传输的UVC摄像头的打开与半闭问题的边界问题,特别是摄像头关闭的判断。BULK摄像头的打开我们通过BUSHOUND抓包的内容如下:Device Length Phase Data ......
UVC摄像头dwMaxPayloadTransferSize批量传输与USB端点描述符wMaxPacketSize的关系说明
这个问题是老生常谈了,其实结合以前的文章我们应该能说明白,可详见:USB数据长度为0的DATA/IN事务 https://www.usbzh.com/article/detail-624.htmlUSB2.0 事务 https://www.usbzh.com/article/detail-691......
UVC批量传输与同步传输各自的优缺点和适用领域
UVC规范中视频数据可以使用批量传输,也可以使用同步传输。但是有一些不同之处。以下是UVC视频领域批量传输和等时传输的特点:批量传输批量传输是基本的视频数据传输方式,因为它提供了高速数据传输的能力,而对于实时性的要求则相对较低。批量传输的带宽分配不是固定的,而是动态变化的,因此在多个批量传输设......
USBIP 中断传输批量传输
对于USB批量传输或中断传输。static NTSTATUSstore_urb_bulk(PIRP irp, PURB urb, struct urb_req *urbr){ struct _URB_BULK_OR_INTERRUPT_TRANSFER *urb_bi = &a......
UVC相机配置描述符-BULK批量传输-NV12-H265
格式概述格式分辨率NV12640X360x30H2653840X2160X30传输方式批量传输,BULK模式功能支持处理单元D0:亮度D1:对比度D2:色调D3:饱和D4:锐度扩展单元选择子9-11D0的选择子为1视频流端点地址0x81其它附......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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