3. USB 传输类型详解:特性与适用场景对比
USB 协议定义了四种传输类型,分别针对不同的通信需求:控制传输、批量传输、中断传输和等时传输。理解它们的差异是设计实时 USB 系统的前提。
核心观点: 在实时通信场景中,中断传输是首选,因为它提供了“有界延迟”和“自动重试”的平衡。等时传输虽延迟更低,但缺乏错误恢复机制,适用于音视频等可容忍丢包的应用。
3.1 四种传输类型总览
下表从带宽、延迟、可靠性、应用场景等维度对四种传输类型进行横向对比。
| 传输类型 | 带宽 | 延迟 | 可靠性 | 数据量 | 典型应用 |
|---|---|---|---|---|---|
| 控制传输 | 低(10% 保留) | 中等(无保证) | 高(硬件重试 + CRC) | 小(8/16/32/64 字节) | 设备枚举、配置描述符、命令 |
| 批量传输 | 高(动态抢占) | 高(无保证) | 高(硬件重试 + CRC) | 大(8/16/32/64 字节) | U 盘、打印机、文件传输 |
| 中断传输 | 中(轮询周期保证) | 低(有界延迟) | 高(硬件重试 + CRC) | 中(1~64 字节) | 鼠标、键盘、实时传感器 |
| 等时传输 | 高(预留带宽) | 最低(固定周期) | 低(无重试) | 大(1~1023 字节) | 音频、视频、摄像头 |
实时性关键指标: 中断传输的“有界延迟”使其在工业控制、机器人、医疗设备中成为主力。批量传输虽然吞吐量高,但延迟不可预测,不适合实时场景。
3.2 控制传输:设备初始化的基石
控制传输是 USB 协议中唯一必须实现的传输类型,用于主机与设备之间的配置、状态查询和命令发送。它采用“建立-数据-状态”三阶段模型。
- 建立阶段:主机发送 Setup 包,包含请求类型、请求码、参数等。
- 数据阶段(可选):根据请求方向,主机或设备发送数据。
- 状态阶段:接收方返回握手包,确认操作成功或失败。
实时性注意: 控制传输的延迟受总线调度影响,且可能被其他传输类型阻塞。在实时系统中,应避免在关键路径上使用控制传输进行周期性数据交换。
3.3 批量传输:大吞吐量的非实时通道
批量传输专为大块数据设计,利用总线空闲带宽进行传输。当总线繁忙时,批量传输会被延迟,因此不保证延迟。
- 特点: 硬件自动重试、CRC 校验、数据完整性高。
- 带宽: 动态抢占,最高可达 80% 总线带宽(当其他传输空闲时)。
- 典型应用: 存储设备(U 盘、SSD)、打印机、扫描仪。
实时系统避坑: 批量传输的延迟可能从微秒级到毫秒级不等,取决于总线负载。在实时通信中,严禁将批量传输用于周期性控制数据。
3.4 中断传输:实时通信的核心
中断传输是 USB 实时通信的主力军。它通过主机轮询机制保证有界延迟,同时具备硬件重试能力,兼顾实时性与可靠性。
- 轮询机制: 主机在每帧(全速/低速)或微帧(高速)中为中断端点预留时间槽。
- 有界延迟: 最大延迟 = 轮询间隔 × 2(考虑重试)。
- 数据大小: 全速最大 64 字节,高速最大 1024 字节。
实践建议: 在 Linux 实时系统中,使用
usb_fill_int_urb() 创建中断 URB,并通过 usb_submit_urb() 提交。轮询间隔应设置为实时任务周期的整数倍。
3.5 等时传输:低延迟但不可靠
等时传输提供最低的延迟和固定的带宽,但不保证数据完整性。它没有握手阶段,也不进行重试。
- 带宽预留: 主机在帧/微帧中为等时端点预留固定时间槽。
- 无重试: 数据丢失或 CRC 错误时,直接丢弃。
- 典型应用: 音频流、视频流、摄像头数据。
实时性权衡: 等时传输的延迟最低,但不可靠。在工业实时控制中,除非应用层有冗余机制(如双缓冲区、前向纠错),否则应避免使用等时传输。
3.6 四种传输类型的 Linux 内核 API 对比
在 Linux USB 子系统中,每种传输类型对应不同的 URB 初始化函数和标志位。
| 传输类型 | URB 初始化函数 | 关键标志/参数 | 回调时机 |
|---|---|---|---|
| 控制传输 | usb_fill_control_urb() |
setup_packet |
状态阶段完成后 |
| 批量传输 | usb_fill_bulk_urb() |
buffer, length |
数据传输完成后 |
| 中断传输 | usb_fill_int_urb() |
interval (轮询间隔) |
每次轮询完成后 |
| 等时传输 | usb_fill_isoc_urb() |
iso_frame_desc[] |
每帧传输完成后 |
实时系统选择指南:
- 周期性控制数据(< 1ms 周期): 中断传输(推荐)或等时传输(需应用层容错)。
- 大块数据上传(如日志): 批量传输(非实时通道)。
- 设备配置/枚举: 控制传输(仅在初始化阶段使用)。
- 音视频流: 等时传输(容忍少量丢包)。
3.7 实时场景选择决策树
在实际项目中,可以通过以下决策树快速选择传输类型:
- 是否需要高可靠性?
- 是 → 进入步骤 2
- 否 → 考虑等时传输(音视频)
- 是否需要有界延迟?
- 是 → 选择中断传输
- 否 → 进入步骤 3
- 数据量是否大于 64 字节?
- 是 → 选择批量传输
- 否 → 选择控制传输(仅用于配置)
实战经验: 在工业以太网 + USB 的混合实时系统中,中断传输的轮询间隔应设置为 125μs(高速微帧)的整数倍,以匹配实时任务周期。例如,1ms 的实时任务周期对应 8 个微帧轮询一次。