一个USB主控制系统包括若干硬件组件和相关软件栈,参见下图:
主要软硬件层包括:
- 客户(设备)驱动软件。这类驱动主要针对USB设备硬件逻辑来设计的,这类驱动分为两类:第一类是免驱设备驱动,例如USB HID驱动,USB storage驱动等,免驱设备驱动一般由操作系统提供;第二类是特定厂商USB设备驱动,这类设备驱动需要厂商提供,并集成到操作系统中。
- 核心层软件。该核心层软件主要是对底层主控器驱动进行抽象,给上层客户(设备)驱动软件提供统一的访问接口。
- 主控制器驱动软件。主控制器驱动主要是针对主控制器硬件逻辑来设计的,这类驱动由主控制器硬件逻辑的厂商提供,并集成到操作系统中。
- 主控制器硬件逻辑和设备硬件逻辑。主控制器硬件逻辑和设备硬件逻辑通过USB电气信号接口连接,参见下图。
USB2.0主控制器逻辑
USB2.0主控制器硬件逻辑必须实现一个EHCI接口的高速模式主控制器,另外可选实现一个或多个USB1.1主控制器硬件逻辑(OHCI或UHCI接口的全速/慢速主控制器,这部分硬件逻辑又称为伴生控制器)。USB2.0主控制逻辑,端口路由逻辑可以灵活地连接前端接口和后端端口(后端端口是指EHCI/OHCI/UHCI接口部分)。主控制器驱动软件用来对端口路由逻辑进行配置;如果主控制器驱动软件不支持EHCI,端口路由逻辑默认将前端端口连接到OHCI/UHCI端口;如果主控制器驱动软件对EHCI逻辑进行了初始化,端口路由逻辑就将前端端口连接到EHCI端口。
一旦EHCI硬件逻辑被初始化/配置/运行,所有前端端口默认和EHCI控制器连接;EHCI及其驱动会对所有插入的设备进行早期检测。EHCI可以访问每个端口寄存器中的控制位,从而管理端口路由硬件逻辑。如果低速设备插入前端接口,EHCI驱动就会将前端端口配置给伴生主控制器,OHCI/UHCI就会重新开始枚举检查插入设备,直到发现低速设备;如果是高速设备插入,EHCI驱动就会保持EHCI逻辑对前端端口的连接,并且完成设备枚举。