嵌入式USB Host驱动与ehci控制器适配 - 第1节
1.1 USB总线拓扑结构
USB(Universal Serial Bus)采用星形-级联拓扑,由主机(Host)、集线器(Hub)和设备(Device)三层节点构成。物理上最多支持7层深度(含根集线器),逻辑上最多可挂接127个设备(含集线器)。
关键概念:USB 2.0 总线采用半双工通信,所有事务由主机发起,设备被动响应。EHCI 控制器负责高速(480 Mbps)模式下的调度与传输。
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(全速),微帧级精确调度。
1.4 传输事务与帧结构
USB 2.0 以帧(Frame)为时间单位,每帧 1ms。高速模式(480 Mbps)下每帧进一步划分为 8 个微帧(Microframe),每个 125μs。EHCI 控制器在每微帧开始时加载周期列表,执行完毕后处理异步列表。
常见误区:批量传输并不总是“慢”。在 EHCI 控制器中,批量传输可以利用所有未被周期传输占用的带宽。如果总线上没有中断/同步传输,批量传输可以达到接近 480 Mbps 的线速。但嵌入式系统中,批量传输常因 CPU 中断处理延迟或 DMA 带宽不足而成为瓶颈。
1.4.1 事务组成
每个 USB 传输事务由以下阶段组成:
- 令牌包(Token):主机发送,标识传输类型、方向、端点地址。
- 数据包(Data):数据负载,最大 1024 字节(高速批量)。
- 握手包(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 驱动适配中最容易出错的环节之一。