USB控制器
+ -

可扩展主机控制器接口(xHCI)

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

1. 概述

可扩展主机控制器接口(xHCI)定义了通用串行总线(USB)主机控制器的寄存器级描述。
它能够直接对接 USB 1.x、2.0、3.0 兼容设备,不需要使用配套控制器(如 OHCI/UHCI/EHCI 组合)。

┌─────────────────────────────────────────────────────────────┐
│                      xHCI 主机控制器                        │
└───────────────────────┬─────────────────────────────────────┘
                        │
        ┌───────────────┴───────────────┬───────────────────────────── ┐
        │                               │                              │
┌───────▼───────┐               ┌───────▼───────┐              ┌───────▼───────┐
│  能力寄存器 CAP      │         │  操作寄存器 OP        │       │  端口寄存器 PORTSC │
│ CAPLENGTH/VERSION   │         │ USBCMD/USBSTS/CRCR    │       │ 连接/复位/速度     │
│ HCSPARAMS1~3        │         │ DCBAAP/COMMAND RING   │       └───────────────┘
│ DBOFF/RTSOFF        │         └───────────────┬───────┘
└───────────────┘                               │
                                                │
┌───────────────────────────────────────────────▼───────────────────────────────────────────┐
│                                        内存数据结构                                         │
│                                                                                           │
│  ┌───────────────┐    ┌───────────────┐    ┌───────────────┐    ┌───────────────┐        │
│  │ 设备上下文数组 │───►│  设备上下文 DC │    │端点上下文 EC  │     │  命令环 CR     │        │
│  │ DCBAAP        │    └───────┬───────┘    └───────┬───────┘    └───────┬───────┘        │
│  └───────────────┘            │                      │                    │                │
│                               │                      │                    │                │
│                      ┌────────▼───────┐    ┌─────────▼───────┐   ┌────────▼───────┐        │
│                      │  输入 TR 环     │    │  输出 TR 环      │   │  事件环 ER     │◄───────┘
│                      │  Transfer Ring  │    │  Transfer Ring  │   │  Event Ring    │
│                      └────────┬────────┘    └─────────┬───────┘   └────────┬───────┘
│                               │                        │                    │
└───────────────────────────────┼────────────────────────┼────────────────────┼─────────────┘
                                │                        │                    │
                       ┌────────▼────────┐     ┌─────────▼────────┐         ┌──────▼───────┐
                       │门铃寄存器 Doorbell │   │运行时寄存器Runtime │       │ 中断 IR & IMOD │
                       │写=通知控制器有任务  │   │MFINDEX/ERSTBA/ERDP│       │               │
                       └────────────────────   └────────────────────┘      └──────────────┘
┌─────────────────────────────────────────────────────────────┐
│                       xHCI 主机控制器                       │
└─────────────────────────────────────────────────────────────┘
                              │
          ┌───────────────────┴───────────────────┐
          │                                         │
┌─────────▼───────────┐                   ┌─────────▼───────────┐
│    命令环 Command Ring     │             │    事件环 Event Ring     │
│                         │               │                         │
│ 驱动 → 控制器:初始化、配置、命令          │ 控制器 → 驱动:完成事件、中断、错误 │
└─────────┬───────────┘                   └─────────┬───────────┘
          │                                         │
          │                                         │
┌─────────▼───────────┐                   ┌─────────▼───────────┐
│    设备上下文数组 DCBAAP        │        │    运行时寄存器 IR         │
│  每个设备槽指向一个设备上下文     │        │  ERST / ERDP / IMOD      │
└─────────┬───────────┘                   └─────────────────────┘
          │
          │
┌─────────▼───────────┐
│    设备上下文 DC           │
│  ┌─────────────────┐
│  │ 端点上下文 0     │
│  │ 端点上下文 1     │
│  │ 端点上下文 2     │
│  └────────┬────────┘
└───────────┼───────────┘
            │
            │  每个端点一个独立环
            ▼
┌─────────────────────────────────────────────────────┐
│                传输环 Transfer Ring                 │
│                                                     │
│  ┌───────┐  ┌───────┐  ┌───────┐  ┌───────┐        │
│  │ TRB   │→ │ TRB   │→ │ TRB   │→ │ TRB   │→ ...   │
│  └───────┘  └───────┘  └───────┘  └───────┘        │
│                                                     │
└─────────────────────────────────────────────────────┘
            │
            │ 驱动写门铃 = 启动传输
            ▼
┌─────────────────────────────────────────────────────┐
│                  门铃寄存器 Doorbell                  │
└─────────────────────────────────────────────────────┘

1.1 命令环 Command Ring(CR)

  • 驱动发给 xHCI 的全局命令
  • 如:初始化、复位、分配设备槽、管理集线器

1.2 事件环 Event Ring(ER)

  • xHCI 发给驱动的完成/中断事件
  • 传输完成、端口变化、错误等

1.3 设备上下文数组 DCBAAP

  • 每个设备占一个槽(Slot)
  • 每个槽指向:设备上下文 DC + 多个端点上下文 EC

1.4 传输环 Transfer Ring(TR)

  • 每个端点一个独立环
  • 真正收发数据的队列
  • 完全替代 EHCI 的 QH / qTD / iTD / siTD

1.5 门铃 Doorbell

  • 驱动写一下门铃 = 告诉控制器:
    “这个端点的传输环有任务了,快来处理”

1.66. 运行时寄存器 Runtime

  • 管理事件环、中断、微帧时钟
  • 实现中断节流(IMOD)降低 CPU 占用

xHCI 与 EHCI 最大区别

  • EHCI:QH + qTD + iTD + siTD + 周期/异步双调度
  • xHCI:全统一为 TR 环 + 事件环 + 门铃
    • 不分等时/批量/中断/控制
    • 不分高速/全速/低速
    • 不分 TT/多TT
    • 全部用一套环结构搞定

2. 技术细节

  • xHCI 控制器通过内存映射寄存器与操作系统通信。
  • 可在 PCI 配置空间中按固定类别信息搜索:
    • 类 ID:0x0C
    • 子类 ID:0x03
    • 接口号:0x30
  • 该设备的配置空间包含两个基地址寄存器:BAR0、BAR1
  • 两个 32 位地址组合成一个 64 位地址,指向控制器寄存器的基地址。

3. 能力寄存器(Capability Registers)

位于 PCI 配置空间给出的内存地址。

偏移(十六进制) 名称 说明
00 CAPLENGTH 能力寄存器长度
01 RSVD 保留
02 HCIVERSION 接口版本号
04 HCSPARAMS1 结构参数 1
08 HCSPARAMS2 结构参数 2
0C HCSPARAMS3 结构参数 3
10 HCCPARAMS1 能力参数
14 DBOFF 门铃寄存器偏移
18 RTSOFF 运行时寄存器空间偏移
1C HCCPARMS2 能力参数 2

4. 操作寄存器(Operational Registers)

位于能力寄存器之后,地址 = 基地址 + CAPLENGTH。

偏移(十六进制) 名称 说明
00 USBCMD USB 命令
04 USBSTS USB 状态
08 PAGESIZE 页大小
14 DNCTRL 设备通知控制
18 CRCR 命令环控制
30 DCBAAP 设备上下文基地址数组指针
38 CONFIG 配置寄存器

补充说明:
读取 CRCR 会返回 0,软件需自行维护该地址。
CRCR 第 0 位是 消费者周期状态(CCS) 标志。


5. 端口寄存器(Port Registers)

位于操作寄存器末尾,固定偏移 0x400
每个根集线器端口对应一组寄存器,数量由 HCSPARAMS1 中的 MaxPorts 决定。

偏移(十六进制) 名称 说明
00 PORTSC 端口状态与控制
04 PORTPMSC 端口电源管理状态与控制
08 PORTLI 端口链路信息
0C 保留 保留

6. 运行时寄存器(Runtime Registers)

地址 = 基地址 + RTSOFF。

偏移(十六进制) 名称 说明
00 MFINDEX 微帧索引
20 IR0–1023 中断器寄存器组

从偏移 0x20 开始,每个中断器寄存器组定义事件环的内存地址,用于在 USB 总线上收发事件与数据。

中断器寄存器内部字段:

偏移 名称 说明
00 IMAN 中断器管理
04 IMOD 中断节流控制
08 ERSTSZ 事件环段表大小
10 ERSTBA 事件环段表基地址
18 ERDP 事件环出队指针

7. 门铃寄存器(Doorbell Registers)

地址 = 基地址 + DBOFF。
长度由 HCSPARAMS1 中的 MaxSlots(最大设备槽数)决定。
每个门铃寄存器 32 位,用于通知控制器:指定设备槽有待处理操作


8. 虚拟寄存器

xHCI 支持虚拟控制器,可在一台物理机上支持多个虚拟机。
这些寄存器由虚拟机宿主配置管理,为客户机提供一套完整的虚拟寄存器副本。


10. 同时集成 EHC 与 xHC 的芯片组

部分芯片组(如 Intel Panther Point,ID:8086:1e31)同时集成 EHCIxHCI
两者共享同一组端口,端口归属由硬件开关决定:

  • 0 = EHCI
  • 1 = xHCI

切换端口归属需操作两个 PCI 配置寄存器:

  • USB3_PSSEN(0xD0):开启 USB3 超高速
  • XUSB2PR(0xD8):将 USB2 端口切换给 xHCI

示例(将所有端口切到 xHCI):

#define USB3_PSSEN 0xd0
#define XUSB2PR   0xd8

u32 *usb3_pssen = (u32 *)(pci_header + USB3_PSSEN);
u32 *xusb2pr    = (u32 *)(pci_header + XUSB2PR);

*usb3_pssen = 0xFFFFFFFF; // 开启 USB3 超高速
*xusb2pr    = 0xFFFFFFFF; // USB2 端口切到 xHCI
本文链接为:http://www.usbzh.com/article/detail-1616.html ,欢迎转载,转载请附上本文链接。

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 篇笔记 写笔记

USB主控器(OCHI,UCHI,ECHIC,xHCI)有什么区别?
OHCI、UHCI都是USB1.1的接口标准,而EHCI是对应USB2.0的接口标准,最新的xHCI是USB3.0的接口标准。OHCI(Open Host Controller Interface)是支持USB1.1的标准,但它不仅仅是针对USB,还支持其他的一些接口,比如它还支持Apple的火......
一台电脑上最多可以连接多少台USB设备?
从理论上来讲,一个USB控制器下最多可以连接127个USB设备,不过这也只是理论。实际上由于INTER硬件设计上的缺陷,根本达不到这么多。每个USB设备最多可以定义32个端点(16个输入和16个输出,但必须是一对控制端点),但大多数设备只定义2或3个端点(例如数据输入、数据输出和一个控制端点)。集......
可扩展主机控制器接口(xHCI
1. 概述可扩展主机控制器接口(xHCI)定义了通用串行总线(USB)主机控制器的寄存器级描述。它能够直接对接 USB 1.x、2.0、3.0 兼容设备,不需要使用配套控制器(如 OHCI/UHCI/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
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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