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的流转路径:
1.5 批量传输的URB生命周期
在Linux USB驱动中,批量传输通过URB(USB Request Block)进行管理。一个典型的批量URB生命周期包含以下阶段:
- URB分配:使用
usb_alloc_urb()分配URB结构体,设置传输类型为USB_ENDPOINT_XFER_BULK。 - URB初始化:填充目标设备、端点地址、传输缓冲区、回调函数等字段。
- URB提交:调用
usb_submit_urb()将URB送入内核USB子系统。 - 调度执行:HCD将URB拆分为事务,加入批量调度队列,等待总线时间片。
- 硬件传输:主机控制器通过DMA将数据发送到USB总线,设备通过NAK进行流控。
- 完成回调:传输完成后,内核调用URB的回调函数,驱动处理数据或错误。
- 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后,会将该端点移入延迟重试队列,在后续帧中再次尝试。
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 |