USB控制器
+ -

增强型主机控制器接口(EHCI)

2026-04-20 本文链接为:http://www.usbzh.com/article/detail-1611.html ,欢迎转载,转载请附上本文链接。

EHCI(Enhanced Host Controller Interface) 是 USB 2.0 唯一指定的主机控制器接口标准,由 Intel 主导开发,USB 实施者论坛(USB‑IF)强制统一规范,解决了 USB 1.x 时代 OHCI 与 UHCI 两套不兼容标准共存的问题。

EHCI规范

USB-IF坚持由英特尔生产单一实现,所以USB2.0只有了一个标准EHCI。

1 接口概述

  • PC 上 EHCI 控制器仅挂载于 PCI 总线,这是规范规定的唯一访问方式。
  • USB 2.0 兼容 USB 1.x 设备,但 EHCI 本身不直接支持低速/全速设备,需搭配配套控制器companion controllers(UHCI 或 OHCI 二选一,不会同时存在)。

如下示意(左下角,配套UHCI或者OHCI)
175224145376

  • PCI 识别标识
    • 类代码:0x0C
    • 子类代码:0x03
    • 接口代码:0x20
  • 寄存器基地址存于 PCI 配置空间的 BAR0,为内存映射地址。

2 能力寄存器(Capability Registers)

位于 PCI BAR0 给出的内存地址,只读,描述控制器硬件属性。

偏移(十六进制) 名称 说明
00 CAPLENGTH 能力寄存器区域长度
01 保留
02 HCIVERSION 接口版本号(BCD 格式)
04 HCSPARAMS 结构参数
08 HCCPARAMS 能力参数
0C HCSP‑PORTROUTE 配套端口路由描述

3 运行寄存器(Operation Registers)

位于能力寄存器之后,地址 = BAR0 基地址 + CAPLENGTH,用于控制与状态查询。

偏移(十六进制) 名称 说明
00 USBCMD USB 命令寄存器-启动 / 停止控制器、复位、使能调度
04 USBSTS USB 状态寄存器-中断、错误、端口变化
08 USBINTR USB 中断使能寄存器
0C FRINDEX USB 帧索引 -当前微帧编号(低 13 位有效)
10 CTRLDSSEGMENT 4G 段选择器
14 PERIODICLISTBASE 周期列表基地址
18 ASYNCLISTADDR 异步列表下一项地址 - 异步队列链表头
40 CONFIGFLAG 配置标志寄存器
44 PORTSC[1–N_PORTS] 端口状态/控制寄存器组-端口连接、复位、速度、使能

3.1 USB 命令寄存器(USBCMD)

位域 名称 说明
31–24 保留
23–16 中断阈值 两次中断间处理的微帧数
15–12 保留
11 异步调度暂停模式使能
10 保留
9–8 异步调度暂停模式计数
7 轻量级主机控制器复位 复位控制器,不影响已连接设备
6 异步推进门铃中断 软件可触发中断
5 异步调度使能
4 周期调度使能
3–2 可编程帧列表大小 配置帧列表容量
1 主机控制器复位 全局硬复位
0 运行 启动/停止控制器

3.2 USB 状态寄存器(USBSTS)

位域 名称 说明
31–16 保留
15 异步调度状态
14 周期调度状态
13 回收状态
12 已停机 控制器已停止
11–6 保留
5 门铃中断
4 主机系统错误
3 帧列表翻转
2 端口变化检测
1 USB 错误中断
0 USB 传输中断

3.3 USB 中断使能寄存器(USBINTR)

位域 名称 说明
31–6 保留
5 异步推进中断使能
4 主机系统错误中断使能
3 帧列表翻转中断使能
2 端口变化中断使能
1 USB 错误中断使能
0 USB 传输中断使能

3.4 端口状态/控制寄存器(PORTSC)

位域 名称 说明
31–23 保留
22 过流唤醒使能
21 断开唤醒使能
20 连接唤醒使能
19–16 端口测试控制 测试模式配置
15–14 端口指示控制 0=关闭,1=黄,2=绿
13 配套端口控制 0=本控制器,1=配套控制器
12 端口供电
11–10 线路状态 差分信号电平
9 保留
8 端口复位
7 挂起
6 强制端口恢复
5 过流状态变化
4 过流
3 端口使能变化
2 端口使能
1 连接状态变化
0 已连接

4 异步队列列表(Asynchronous Queue List)

异步队列是队列头(Queue Head)构成的环形链表,每个队列头指向链表下一个队列头及本组第一个传输描述符(TD)。

  • 使能异步调度后,控制器从 ASYNCLISTADDR 指向的第一个队列头开始遍历,直到遇到回收头标志的队列头。
  • 首个队列头不检查回收头标志,可将首节点设为回收头形成闭环。
  • 队列头缓存当前 TD,硬件直接用此副本执行传输。

4.1 队列头(Queue Head)

偏移(十六进制) 名称 说明
00 水平链接指针 指向下一个队列头/TD
04 端点特性 设备/端点/速度/包长等核心属性
08 端点能力 高带宽、拆分事务、调度掩码
0C 当前 TD 地址 正在执行的 TD 物理地址
10 当前 TD 工作区 硬件缓存的 TD 副本

4.2 水平链接指针

位域 名称 说明
31–5 下一个队列头 环形链表中下一个队列头地址
4–3 保留
2–1 下一个队列类型 0=等时 TD,1=队列头,2=拆分事务等时 TD,3=帧跨度遍历节点
0 终止位 周期列表的尾节点置 1;异步列表不使用

4.3 端点特性

位域 名称 说明
31–28 NAK 重载 NAK 重试计数
27 控制端点 高速设备不使用
26–16 最大包长度 端点单次最大载荷
15 回收链表头 标记为异步列表首节点
14 数据翻转控制 为 1 则使用 TD 中的数据翻转
13–12 端点速度 0=全速,1=低速,2=高速
11–8 端点号 端点编号
7 失活 仅周期列表使用
6–0 设备地址 USB 设备地址

4.4 端点能力

位域 名称 说明
31–30 高带宽管道乘数 必须 >0,对应 1/2/3 事务/微帧
29–23 端口号 用于拆分事务
22–16 集线器地址 用于拆分事务
15–8 拆分完成掩码 用于拆分事务
7–0 中断调度掩码 用于拆分事务

EHCI 核心速记

一、基础框架

  • EHCI = USB 2.0 高速主机控制器标准
  • 时间单位:微帧 Microframe = 125μs
  • 每秒:8000 微帧
  • 只负责高速 HS全速/低速交给 companion controller

二、调度结构(最重要)

EHCI 分两套调度:

1. 周期性调度(Periodic)

用于:中断 + 等时 Isoch
结构:

  • Periodic List(帧列表)
  • 每微帧一个节点
  • 节点可以是:
    • iTD(等时传输描述符)
    • siTD(拆分等时,用于 FS/LS)
    • QH(中断队列头)

2. 异步调度(Asynchronous)

用于:控制 + 批量
结构:

  • 一条环形链表:Async List
  • 节点都是 QH(Queue Head)
  • 每个 QH 下挂 qTD(队列传输描述符)

三、四大数据结构

EHCI 主机控制器
├─ 周期性调度列表 (Periodic List)  〈= 中断、等时传输
│   ├─ 微帧 0 ~ 微帧 7FFF
│   │
│   ├─ 节点类型:
│   │    ├─ iTD      → 高速等时 Isoch
│   │    ├─ siTD     → 全速/低速等时(拆分事务)
│   │    └─ QH       → 中断端点(中断QH)
│   │         └─ qTD 链 → 中断传输
│
└─ 异步调度列表 (Async List)      〈= 控制、批量传输
    └─ QH 环形链表
         └─ qTD 链 → 控制/批量传输

1. QH —— Queue Head(队列头)

  • 代表一个端点
  • 保存:设备地址、端点号、最大包长、速度
  • 内部缓存一个 qTD,硬件直接用
  • 异步/中断都用 QH

2. qTD —— 普通传输描述符

  • 用于:控制、批量、普通中断
  • 一个 qTD 对应一次或多个数据包
  • 记录缓冲区、长度、状态、DATA0/DATA1 翻转
  • 不支持微帧内 burst

3. iTD —— 等时传输描述符

  • 仅用于高速等时 Isoch
  • 一个 iTD 可以覆盖 8 个微帧
  • 每个微帧可发 1~3 个数据包(burst)
  • 高带宽 = burst = 多事务/微帧

4. siTD —— 拆分等时描述符

  • 用于:全速/低速等时
  • 通过 EHCI 拆分事务(Split Transaction)转发
  • 和高速 burst 无关

四、高带宽 burst 考点(你最关心)

一句话核心

高带宽 = 一个微帧内同一个端点连续多次事务 = burst

  • 由 QH 中 Multiplier(乘数) 控制:

    • 00 = 1 事务/微帧
    • 01 = 2 事务/微帧
    • 10 = 3 事务/微帧
    • 11 = 保留
  • 只有两类端点能用:

    • 高速等时端点
    • 高速中断端点
  • 实现结构:

    • 等时:iTD 直接支持多包 burst
    • 中断:QH 下多个 qTD 连发实现 burst

五、微帧与事务数量(标准答案)

  • 1 微帧 = 125μs
  • 单个端点最大事务数:3 个(burst)
  • 整个微帧总事务数:数十个(由总线带宽决定)
  • 周期性传输最多占用微帧 80% 时间
  • 异步传输至少保留 20%

六、寄存器极简版

核心运行寄存器

  • USBCMD:启动/停止控制器、复位、使能调度
  • USBSTS:中断、错误、端口变化
  • FRINDEX:当前微帧编号(低 13 位有效)
  • PERIODICLISTBASE:周期性列表基址
  • ASYNCLISTADDR:异步队列链表头
  • PORTSC:端口连接、复位、速度、使能

七、一句话串联所有概念

EHCI 使用 微帧(125μs) 调度,
iTD/QH 实现 1 微帧最多 3 个事务的 burst 高带宽传输
周期性调度处理等时/中断,异步调度处理控制/批量,
所有传输由 TD/QH 描述,硬件自动执行。

本文链接为:http://www.usbzh.com/article/detail-1611.html ,欢迎转载,转载请附上本文链接。

翻译原文:https://wiki.osdev.org/Enhanced_Host_Controller_Interface

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936     USB技术交流3:1031974172

0 篇笔记 写笔记

增强型主机控制器接口(EHCI
EHCI(Enhanced Host Controller Interface) 是 USB 2.0 唯一指定的主机控制器接口标准,由 Intel 主导开发,USB 实施者论坛(USB‑IF)强制统一规范,解决了 USB 1.x 时代 OHCI 与 UHCI 两套不兼容标准共存的问题。EHCI规范......
USB2.0EHCI控制器与集线器关系
┌───────────────────────────────────────────────────────────────┐│ EHCI 主机控制器 │└───────────────────┬─......
OHCI / EHCI /xHCI 整体架构对比图
OHCI / EHCI / xHCI 整体架构对比图一张看懂三代 USB 主控制器进化关系┌─────────────────────────────────────────────────────────────────────────────┐# 1. OHCI (USB 1.1 全速/低速)......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!