USB2.0规范
+ -

USB 批量/块传输方式

2020-09-15 9803 403

USB协议规定了四种传输类型:控制传输、批量传输、同步传输中断传输

批量传输一般用于批量的和非实时的数据传输,通俗的来说就是用于数据量大但对时间要求又不高的场合的一种传输方式,类似用于USB打印机和USB扫描仪等等。

批量传输使用批量传输事务,一次批量传输事务分为三个阶段:令牌包阶段、数据包阶段、握手包阶段。
批量传输分为批量读和批量写,批量读使用批量输入事务,批量写使用批量输出事务。注意:不论输入还是输出都是以主机为参考的。

对于批量传输,如果启动批量传输,如果USB总线中有多余的总线带宽,批量传输会立即执行,但当带宽比较紧张时,批量传输会把带宽让给其它传输类型。所以批量传输的优先级相对其它传输优先级比较低。

批量传输数据包

  • 只有全速高速设备可以使用批量传输,低速模式不支持批量传输。
  • 高速模式固定为512个字节;
  • 全速模式最大包长可在8、16、32、64字节中选择;
  • 高速设备数据包最大长度为1024字节,批量传输端点应在其端点描述符中设置最大的数据包负载大小为 1024 字节。它还指定端点可以接受或者发送到超高速总线的突发大小。对于批量端点允许的突发大小应在 1 至 16 范围。

    批量功能端点必须传输数据字段小于或等于 1024 字节的数据负载。如果批量传输有比之更多的数据,在突发事务交易的所有数据的有效载荷必须为 1024 字节长度,除了突发的最后一个数据有效载荷,它可能包含剩余数据。

如果传输的数据量大于端点所支持的最大数据包长度,USB主控制器会把该数据按最大数据包长度分为多个批量数据包进行传输,最后一个批量传输长度可以小于或等于最大包长度。

批量输出流程:

批量传输数据流传输包括IN传输和OUT传输,分别对应于数据的读和写,其也分为3个阶段,分别为为令牌阶段、数据段和握手段。
批量输出流程IN

对于批量传输的最后一个IN事务:

  • 如果USB主机收到的数据长度小于端点支持的最大包长度,那么USB主机认为数据已经接收完成。
  • 如果USB主机收到的数据长度等于端点支持的最大包长度,需要额外的0数据的包,告诉USB主机数据已经接收完成。

批量输出流程OUT

比较全批量传输,速PING
比较全批量传输,速PING

令牌阶段
  • 主机发送BULK令牌包,令牌包中包含设备地址、端点号和数据方向。
数据段
  • 从机如果接收令牌包出错,无响应,让主机等待超时;
  • 从机端点不存在,回送STALL
  • 从机端点数据未准备好,回送NAK
  • 从机端点数据准备好,回送数据包。
握手端设备
  • 数据包正确,并有足够的空间保存数据:设备返回ACK握手包或NYET握手包(只有高速模式才有NYET握手包,它表示本次数据接收成功,但是没有能力接收下一次传输)。
  • 数据包正确,但是没有足够的空间保存数据:设备返回NAK握手包。主机收到NAK,延时一段时间后,再重新进行批量输出事务。
  • 数据包正确,但端点处于挂起状态:设备返回一个STALL握手包。
  • 数据包错误:设备不返回任何握手包,让主机等待超时。
  • CRC错误或位填充错误:设备不返回任何握手包,让主机等待超时。

USB批量传输抓包分析

USB批量读数据

由于批量读数据,是设备给主机传输数据,所以是数据阶段是IN事务。
USB批量读数据

USB批量写数据

因为是主机给设备传输数据,所以是数据阶段是OUT事务,如下图。
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摄像头批量传输的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......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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