1. USB批量传输概述

USB批量传输(Bulk Transfer)是USB协议中面向数据完整性、非实时、大块数据传输的传输类型。它在主机与设备之间提供可靠但无带宽保证的通信通道,是USB体系中吞吐量最高的传输模式之一。

1.1 批量传输的核心特点

特性 说明
数据完整性 硬件级CRC校验 + 重传机制,保证数据100%正确到达
无带宽保证 仅在总线空闲时传输,优先级低于中断和等时传输
非周期性 没有固定的帧/微帧占用,按需排队发送
最大包长度 USB 2.0: 512字节;USB 3.0/3.1: 1024字节
错误恢复 自动重传失败的传输事务,直到成功或超时
流控支持 通过NAK握手包实现设备侧流量控制
性能关键点:批量传输的吞吐量高度依赖于USB调度器的公平性、URB(USB Request Block)的提交策略以及端点FIFO深度。在驱动层面,批量传输的性能调优通常围绕“如何最大化总线利用率”展开。

1.2 批量传输的典型应用场景

  • U盘/大容量存储设备:文件系统读写操作,数据块通常为512B~64KB,对吞吐量要求极高,对延迟不敏感。
  • 打印机:打印作业数据流,数据量大但可容忍秒级延迟,批量传输提供可靠交付。
  • 数据采集卡:高速ADC/DAC数据流,需要持续高带宽传输,批量传输配合DMA可实现数百MB/s的吞吐。
  • 网络适配器(USB Ethernet):网络数据包收发,批量传输提供可靠的包传输通道。
  • 工业相机/机器视觉:图像数据流传输,批量传输在USB 3.0下可达350MB/s以上。

1.3 批量传输与中断/等时传输的对比

对比维度 批量传输 中断传输 等时传输
带宽保证 无 有(最多90%帧时间) 有(预先分配)
延迟 高(排队等待) 低(轮询间隔保证) 极低(固定帧传输)
数据完整性 100%(CRC+重传) 100%(CRC+重传) 无重传(允许丢包)
最大包长(USB 2.0) 512字节 64字节 1023字节
典型应用 U盘、打印机、数据采集 鼠标、键盘、HID设备 音频、视频、摄像头
总线优先级 最低 中 高
错误恢复机制 硬件自动重传 硬件自动重传 无(数据丢失)
选型建议:当应用需要绝对可靠且数据量大时,批量传输是唯一选择。如果同时需要低延迟,应考虑使用批量传输配合URB批处理(Bulk Streaming)或USB 3.0的Streams机制。

1.4 批量传输在USB协议栈中的位置

下图展示了批量传输在USB软件栈中的层次关系,从用户空间到硬件端点,清晰呈现URB的流转路径:

USB批量传输协议栈与URB流转路径 用户空间应用层 文件系统 (VFS) / libusb / 字符设备驱动接口 内核空间 USB 核心层 USB 设备驱动 / URB 分配与提交 / 端点管理 USB 主机控制器驱动 (HCD) URB 解析 → 事务拆分 → TD 链表构建 → 调度器排队 USB 主机控制器硬件 (xHCI / EHCI) DMA 引擎 / 帧微帧调度 / 批量端点轮询 / 事务执行 USB 总线物理层 (差分信号 / 包传输) 批量传输URB 无带宽保证 URB队列管理 批量端点映射 批量调度策略 NAK/重传处理 DMA描述符环 批量端点轮询

1.5 批量传输的URB生命周期

在Linux USB驱动中,批量传输通过URB(USB Request Block)进行管理。一个典型的批量URB生命周期包含以下阶段:

  1. URB分配:使用 usb_alloc_urb() 分配URB结构体,设置传输类型为 USB_ENDPOINT_XFER_BULK。
  2. URB初始化:填充目标设备、端点地址、传输缓冲区、回调函数等字段。
  3. URB提交:调用 usb_submit_urb() 将URB送入内核USB子系统。
  4. 调度执行:HCD将URB拆分为事务,加入批量调度队列,等待总线时间片。
  5. 硬件传输:主机控制器通过DMA将数据发送到USB总线,设备通过NAK进行流控。
  6. 完成回调:传输完成后,内核调用URB的回调函数,驱动处理数据或错误。
  7. URB回收:驱动调用 usb_free_urb() 释放URB资源。
常见性能陷阱:批量传输在USB 2.0下理论带宽为53.248 MB/s(480 Mbps × 90% 批量可用比例),但实际驱动中如果URB提交粒度不合理(如每次只提交1个512字节URB),吞吐量可能骤降至10 MB/s以下。合理的URB批处理(多个URB同时提交)是性能调优的第一步。

1.6 批量传输的流控机制

批量传输使用NAK握手实现设备侧流控。当设备端点无法接收/发送数据时,返回NAK包通知主机重试。主机控制器在收到NAK后,会将该端点移入延迟重试队列,在后续帧中再次尝试。

批量传输NAK流控时序图 主机 (Host) 设备 (Device) OUT + DATA0 (512B) ACK (接收成功) OUT + DATA1 (512B) NAK (设备忙,请重试) 主机将端点移入延迟重试队列,等待下一帧 OUT + DATA1 (重传,512B) ACK (重传成功) NAK机制保证设备不会因数据溢出而丢失数据,但过多的NAK会严重降低批量传输吞吐量

1.7 批量传输性能关键指标

指标 定义 典型值 (USB 2.0) 典型值 (USB 3.0)
理论带宽 总线物理层最大速率 480 Mbps 5 Gbps
批量可用带宽 扣除协议开销后的最大批量数据速率 ~53 MB/s ~400 MB/s
URB吞吐量 驱动实际达到的数据传输速率 10~45 MB/s 100~380 MB/s
NAK率 NAK事务占总事务的比例 0%~30% 0%~15%
URB提交延迟 从提交到硬件开始传输的时间 100 μs ~ 1 ms 50 μs ~ 500 μs