2. 事务翻译器(TT)基础

2.1 TT 在 USB 2.0 Hub 中的位置与作用

USB 2.0 Hub 是 USB 拓扑结构中的关键节点,负责将主机的一个上行端口扩展为多个下行端口。当全速(Full-Speed, 12 Mbps)或低速(Low-Speed, 1.5 Mbps)设备连接到 USB 2.0 Hub 时,Hub 必须解决高速(High-Speed, 480 Mbps)总线与全速/低速设备之间的速率鸿沟。这一任务由 事务翻译器(Transaction Translator, TT) 完成。

TT 在 Hub 中的位置如下图所示:

TT 在 USB 2.0 Hub 中的位置 USB 2.0 Hub 内部结构 — TT 位置 上行端口(高速 480 Mbps) Hub 控制器(Repeater) 事务翻译器(TT) 全速/低速 ↔ 高速 高速直通路径 仅限高速设备 下行端口组(Port 1 ~ Port N) 全速/低速设备 → 经 TT 处理 | 高速设备 → 直通

TT 的核心作用可归纳为以下三点:

作用维度 说明
速率适配 将高速总线上的 480 Mbps 微帧(125 µs)转换为全速/低速设备可理解的帧(1 ms)或低频信号。
协议转换 将高速 Split Transaction(拆分事务)拆分为全速/低速的完整事务(Setup/IN/OUT/Handshake)。
缓冲管理 在 TT 内部使用 FIFO 暂存数据,解决高速与全速/低速之间的瞬时带宽差异。

关键概念:TT 不是简单的速率降频器,而是一个完整的协议代理。它代表全速/低速设备与主机进行高速通信,同时向下行端口呈现标准的全速/低速信号时序。

2.2 全速/低速事务与高速事务的转换机制

USB 2.0 规范定义了 拆分事务(Split Transaction) 协议来实现速率转换。主机在高速总线上发起一个拆分事务,TT 将其拆分为两个阶段:开始拆分(SSPLIT) 和 完成拆分(CSPLIT)。

转换流程如下图所示:

全速/低速事务与高速事务转换流程 拆分事务(Split Transaction)转换流程 主机(Host) 高速 480 Mbps 事务翻译器(TT) SSPLIT / CSPLIT 全速 12 Mbps / 低速 1.5 Mbps 全速/低速 设备 拆分事务执行步骤 ① SSPLIT(开始拆分) 主机在高速微帧中发送 SSPLIT Token,包含目标端口号和方向。 TT 接收后,立即在全速/低速总线上发起标准事务(SETUP/OUT/IN)。 ② 全速/低速事务执行 TT 与设备完成数据阶段和握手阶段,将结果暂存于内部 FIFO。 此过程可能跨越多个高速微帧(125 µs × N)。 ③ CSPLIT(完成拆分) 主机在后续微帧中发送 CSPLIT Token,TT 返回数据或握手状态。 若设备未就绪,TT 返回 NAK,主机继续轮询直到成功。

转换机制涉及三个关键时序参数:

参数 高速侧 全速/低速侧 TT 处理方式
帧周期 125 µs(微帧) 1 ms(帧) TT 将 8 个微帧映射到 1 个全速帧
数据包大小 最大 512 字节(Bulk) 最大 64 字节(全速 Bulk) TT 自动分片/重组
握手延迟 立即响应 最长 16 位时间 TT 缓冲握手状态,延迟返回

实践要点:TT 的 FIFO 深度直接影响全速设备的吞吐量。若 FIFO 过小,高速总线上的 CSPLIT 轮询间隔会变长,导致全速设备实际带宽下降。建议在 Hub 选型时关注 TT 的 FIFO 大小(通常为 64~256 字节)。

2.3 TT 的两种实现模式

USB 2.0 Hub 规范允许两种 TT 实现方式:

  • 单 TT(Single TT):所有下行端口共享一个 TT 实例。适用于端口数较少(≤4)的 Hub,成本低,但全速/低速设备之间会竞争 TT 资源。
  • 多 TT(Multiple TT, MTT):每个下行端口拥有独立的 TT 实例。适用于端口数较多(≥4)的 Hub,每个全速/低速设备获得独立的转换通道,性能更优。

两种模式的对比:

特性 单 TT(STT) 多 TT(MTT)
TT 实例数 1 个 每个下行端口 1 个
资源竞争 所有全速/低速设备共享 端口间完全隔离
最大全速带宽 受限于单个 TT 的处理能力 每个端口独立达到全速带宽
典型应用 低成本 Hub、嵌入式 Hub 高性能 Hub、扩展坞

性能陷阱:在单 TT Hub 上同时连接多个全速摄像头或音频设备时,TT 可能成为瓶颈,导致丢帧或同步失败。此时应优先使用多 TT Hub,或将部分设备迁移到高速端口。

2.4 TT 与 USB 2.0 协议栈的交互

从软件角度看,TT 对主机驱动是透明的。主机通过 Hub 类请求 配置 TT 的行为:

  • Set Port Feature(PORT_RESET):复位下行端口,TT 重新初始化。
  • Set Port Feature(PORT_SUSPEND):暂停下行端口,TT 停止转换。
  • Get Port Status:读取端口状态,TT 返回当前转换状态。

TT 内部维护一个 事务状态机,用于跟踪每个端口的拆分事务进度:

TT 事务状态机(简化)
┌─────────────┐
│   IDLE      │ ← 等待 SSPLIT
└──────┬──────┘
       │ 收到 SSPLIT
       ▼
┌─────────────┐
│  SSPLIT_RCVD │ → 在全速/低速总线上发起事务
└──────┬──────┘
       │ 事务完成
       ▼
┌─────────────┐
│  DATA_READY  │ → 数据存入 FIFO,等待 CSPLIT
└──────┬──────┘
       │ 收到 CSPLIT
       ▼
┌─────────────┐
│  CSPLIT_DONE │ → 返回数据/握手,回到 IDLE
└─────────────┘