本文将针对USB3.0的Host Controller进行介绍
Host Controller介绍
Host Controller基本结构
英特尔发明了xHCI(Extensible Host Controller Interface)用于USB3.0的host controller,该控制器能向下兼容并混合使用各个速率的设备,如下图所示
当设备直接连接到Root Hub的端口上时,Host Controller将会判断是3.0还是2.0的设备,并由对应的控制器进行接管。有些SoC还提供了额外的Host Controller,通过挂载在PCIe总线上,支持USB3.1协议。每个Host最多支持127个设备,当系统上电后,和其他的PCI设备类似,系统会遍历所有的Host Controller并初始化。
Host Controller功能
对于一个简单的master/slave USB模型,一个Host Controller的功能如下:
- 报告设备的连接/移除
- 跟踪设备的上下文信息(设备速度/传输类型等)
- 响应软件的传输请求
- 初始化USB数据传输
- 记录传输和其他事务的状态
- 产生中断
Host Controller初始化
为了初始化Host Controller,需要读取并初始化两个寄存器组:
- PCI配置空间
- MMIO. 一个大块的包含xHCI功能结构(软件可以从这些寄存器中读取xHCI支持的功能)/操作寄存器(用于控制Host Controller的行为)/运行寄存器(动态寄存器,用于软件与设备交互)的寄存器块
USB 3.0新特性
相比USB2.0,USB3.0有如下特性:
- 最大的包长度增加:同步/中断/块增大为1024 bytes,控制增大为512 bytes
- 数据