嵌入式USB Host驱动与ehci控制器适配 - 第1节

1.1 USB总线拓扑结构

USB(Universal Serial Bus)采用星形-级联拓扑,由主机(Host)、集线器(Hub)和设备(Device)三层节点构成。物理上最多支持7层深度(含根集线器),逻辑上最多可挂接127个设备(含集线器)。

关键概念:USB 2.0 总线采用半双工通信,所有事务由主机发起,设备被动响应。EHCI 控制器负责高速(480 Mbps)模式下的调度与传输。
USB 总线拓扑结构(嵌入式主机视角) USB 主机(Host) 根集线器(Root Hub) Hub 1(第1层) Hub 2(第1层) Hub 3(第1层) 鼠标(低速) 键盘(低速) U盘(全速) 摄像头(高速) 网卡(高速) 拓扑约束 • 最大层数:7层(含根集线器) • 最大设备数:127个(含集线器) • 嵌入式主机通常只有 1~2 个下行端口,通过外接 Hub 扩展

1.2 主机与设备角色

1.2.1 主机(Host)

  • 唯一总线主控:所有传输事务由主机发起,设备不能主动发送数据。
  • 调度器:管理帧/微帧时间片,按传输类型分配带宽。
  • 枚举器:检测设备插入/拔出,分配地址,加载驱动。
  • 电源管理:控制端口供电、挂起/唤醒。

1.2.2 设备(Device)

  • 端点(Endpoint):设备内部的数据收发单元,每个端点有唯一编号和方向。
  • 接口(Interface):一组端点的集合,对应一个功能(如 HID、Mass Storage)。
  • 配置(Configuration):设备可切换的工作模式,每种配置包含若干接口。
嵌入式开发提示:在 EHCI 驱动中,主机通过队列头(QH)和传输描述符(qTD)描述设备端点,调度器按帧周期遍历异步/周期列表。理解端点与 QH 的映射关系是适配 EHCI 控制器的关键。

1.3 USB传输类型

USB 2.0 定义了四种传输类型,分别对应不同的带宽、延迟和可靠性需求。EHCI 控制器为每种类型提供独立的硬件调度队列。

传输类型 带宽保证 延迟 错误重试 典型设备 EHCI 调度队列
控制传输 10% 保留 中等 硬件重试 所有设备(枚举、配置) 默认控制管道(端点0)
批量传输 无保证(空闲带宽) 大 硬件重试 U盘、打印机 异步列表(Async List)
中断传输 ≤90% 可分配 低(1~255ms 轮询) 硬件重试 鼠标、键盘 周期列表(Periodic List)
同步传输 固定带宽 极低 不重试 音频、摄像头 周期列表(Periodic List)

1.3.1 控制传输

  • 用途:设备枚举、获取描述符、设置配置、类特定命令。
  • 阶段:建立阶段(Setup)→ 数据阶段(Data,可选)→ 状态阶段(Status)。
  • 特点:最高可靠性,硬件自动重试,每个设备必须实现端点0。

1.3.2 批量传输

  • 用途:大块数据,如 U盘读写、打印机数据。
  • 特点:利用空闲带宽,无实时性保证,硬件自动重试直到成功或超时。
  • EHCI 实现:异步列表中的 QH 按轮转调度,批量端点可抢占空闲帧时间。

1.3.3 中断传输

  • 用途:周期性小数据,如鼠标坐标、键盘按键。
  • 特点:保证最大延迟(bInterval 字段指定轮询间隔),硬件重试。
  • EHCI 实现:周期列表中的 iTD/siTD 描述符,按帧/微帧调度。

1.3.4 同步传输

  • 用途:实时流数据,如音频、视频。
  • 特点:固定带宽,无重试,允许少量丢包。
  • EHCI 实现:周期列表中的 iTD(高速)或 siTD(全速),微帧级精确调度。
EHCI 传输类型调度架构 EHCI 主机控制器 帧/微帧调度器 异步列表 批量传输 QH 周期列表 中断/同步 iTD/siTD 批量设备(U盘) 中断/同步设备 调度规则 每帧(1ms)先执行周期列表,剩余时间执行异步列表;控制传输占用异步列表最高优先级

1.4 传输事务与帧结构

USB 2.0 以帧(Frame)为时间单位,每帧 1ms。高速模式(480 Mbps)下每帧进一步划分为 8 个微帧(Microframe),每个 125μs。EHCI 控制器在每微帧开始时加载周期列表,执行完毕后处理异步列表。

常见误区:批量传输并不总是“慢”。在 EHCI 控制器中,批量传输可以利用所有未被周期传输占用的带宽。如果总线上没有中断/同步传输,批量传输可以达到接近 480 Mbps 的线速。但嵌入式系统中,批量传输常因 CPU 中断处理延迟或 DMA 带宽不足而成为瓶颈。

1.4.1 事务组成

每个 USB 传输事务由以下阶段组成:

  1. 令牌包(Token):主机发送,标识传输类型、方向、端点地址。
  2. 数据包(Data):数据负载,最大 1024 字节(高速批量)。
  3. 握手包(Handshake):设备返回 ACK/NAK/STALL/NYET 状态。

1.4.2 传输速率对比

速率模式 信号速率 帧/微帧 最大包大小(批量) 典型 EHCI 应用
低速(LS) 1.5 Mbps 1ms 帧 8 字节 鼠标、键盘(通过事务翻译器)
全速(FS) 12 Mbps 1ms 帧 64 字节 U盘、HID 设备(通过事务翻译器)
高速(HS) 480 Mbps 125μs 微帧 512 字节 EHCI 原生支持,U盘、摄像头、网卡
嵌入式适配要点:EHCI 控制器通常包含一个事务翻译器(TT),用于兼容低速/全速设备。在驱动初始化时,需要检测端口速率寄存器(PORTSC),根据设备速率选择直接高速传输或通过 TT 转发。这是 EHCI 驱动适配中最容易出错的环节之一。