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 包,包含请求类型、请求码、参数等。
  • 数据阶段(可选):根据请求方向,主机或设备发送数据。
  • 状态阶段:接收方返回握手包,确认操作成功或失败。
实时性注意: 控制传输的延迟受总线调度影响,且可能被其他传输类型阻塞。在实时系统中,应避免在关键路径上使用控制传输进行周期性数据交换。
控制传输三阶段流程 建立阶段 Setup 包 (8字节) 数据阶段 数据包 (可选) 状态阶段 握手包 控制传输是 USB 设备枚举和配置的唯一方式,实时系统中应避免频繁使用

3.3 批量传输:大吞吐量的非实时通道

批量传输专为大块数据设计,利用总线空闲带宽进行传输。当总线繁忙时,批量传输会被延迟,因此不保证延迟。

  • 特点: 硬件自动重试、CRC 校验、数据完整性高。
  • 带宽: 动态抢占,最高可达 80% 总线带宽(当其他传输空闲时)。
  • 典型应用: 存储设备(U 盘、SSD)、打印机、扫描仪。
实时系统避坑: 批量传输的延迟可能从微秒级到毫秒级不等,取决于总线负载。在实时通信中,严禁将批量传输用于周期性控制数据。

3.4 中断传输:实时通信的核心

中断传输是 USB 实时通信的主力军。它通过主机轮询机制保证有界延迟,同时具备硬件重试能力,兼顾实时性与可靠性。

  • 轮询机制: 主机在每帧(全速/低速)或微帧(高速)中为中断端点预留时间槽。
  • 有界延迟: 最大延迟 = 轮询间隔 × 2(考虑重试)。
  • 数据大小: 全速最大 64 字节,高速最大 1024 字节。
实践建议: 在 Linux 实时系统中,使用 usb_fill_int_urb() 创建中断 URB,并通过 usb_submit_urb() 提交。轮询间隔应设置为实时任务周期的整数倍。
中断传输轮询机制 USB 主机 USB 设备 轮询间隔 (bInterval) 数据/NAK 响应 时间轴:每个轮询周期内,主机发送 IN Token,设备返回数据或 NAK 中断传输的“有界延迟”特性使其成为实时控制的首选传输类型

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 周期): 中断传输(推荐)或等时传输(需应用层容错)。
  • 大块数据上传(如日志): 批量传输(非实时通道)。
  • 设备配置/枚举: 控制传输(仅在初始化阶段使用)。
  • 音视频流: 等时传输(容忍少量丢包)。
四种传输类型适用场景对比 USB 传输类型适用场景矩阵 延迟要求 数据量 高延迟 低延迟 小数据 大数据 控制传输 配置/枚举 批量传输 U盘/打印机 中断传输 鼠标/传感器 等时传输 音频/视频 实时通信首选

3.7 实时场景选择决策树

在实际项目中,可以通过以下决策树快速选择传输类型:

  1. 是否需要高可靠性?
    • 是 → 进入步骤 2
    • 否 → 考虑等时传输(音视频)
  2. 是否需要有界延迟?
    • 是 → 选择中断传输
    • 否 → 进入步骤 3
  3. 数据量是否大于 64 字节?
    • 是 → 选择批量传输
    • 否 → 选择控制传输(仅用于配置)
实战经验: 在工业以太网 + USB 的混合实时系统中,中断传输的轮询间隔应设置为 125μs(高速微帧)的整数倍,以匹配实时任务周期。例如,1ms 的实时任务周期对应 8 个微帧轮询一次。