USB总线的物理结构及设备分类
USB物理体系如图所示,它的根结点为USB主控制器,由USB主控制器实现USB根HUB(根集线器),通过根HUB,可以外接USB设备和USB HUB(集线器)进行USB接口的扩展。
USB根集线器(ROOT HUB)
PC主机一般含有一个或多个根线器。在主机启动时在它的内部总线上查找这个根集线器。
USB主机控制器一般通过PCI/E枚举发现,主机控制器的PCI/E配置空间被访问并配置合适的值。控制器的寄存器通过IO或内存的方式映射,所有USB主机控制器也像其它物理设备一样占用系统总线进行它的数据传输。
PC机直接与USB主机控制器中的根集线器进行数据通讯枚举,然后根集线器再与连接的USB设备或USB集线器进行数据通讯枚举。
一个USB根集线器即为一个USB总线,如果系统中有两个根集线器,系统会当作2条USB总线来处理。
USB集线器(HUB)
USB集线器是USB众多标准设备中的一种,分类为HubClass标准类。USB集线器必须实现在USB规范中定义的功能,它有必要的描述符描述集线器的功能。
USB集线器必须实现USB规范中其定义的功能,并且其具有必要的描述符用于描述集线器的功能。
集线器主要由一个信号中继器和控制器组成,中继器沿正确的方向进行传递USB信号,控制器理解协议并指示中继器的动作。
集线器控制器自身由集线器通过两个端点控制。USB集线器通过它的标准端点0配置和查询。这个配置管道实现大多数的标准控制事务,然后继续实现各种集线器特定的控制事务。
这些事务包括:ClearHubFeature, ClearPortFeature, GetBusState, GetHubDescriptor, GetHusStatus, GetPortStatus, SetHubDescriptor, SetHubFeature,SetPortFeauture.
集线器有一个状态改变端点,用于将它的下游端口的变化告诉主机。如果下在的任何状态改变,将设置一个端口中变化位:设备连接、端口使能、挂起、过流指示、复位和加电。
主机每255ms查询USB集线器让其报告其各个下游设备的状态,如果什么也没有尽管变,集线器简单返回NAK.
状态的改变包括:设备连接,端口使能,挂起,过流指示,复位,加电和拨出等。
USB设备
USB设备可以插入USB集线器的任何USB端口。
另一类USB设备是USB集线器,这样这个USB集线器就可以连接更多的USB设备了。一个USB集线器有一个向上游(PC机端)连接的上游端口和多个连拉下游设备的端口(USB设备)。
一个USB集线器最多可以连接127个设备(包括集线器)。
USB设备的数据在主机和设备之间进行交换,USB设备之间不进行直接数据交换。
USB复合设备
USB复合设备其实是一个USB设备提供了多个USB接口(配制描述符),每个接口描述符都是一个独立的功能设备。
USB复合设备是由USB通用父驱动程序(USBCCGP.sys)驱动并再次枚举成个USB子设备。
Windows设备管理器中的USB设备树
如在Windows的设备管理器下,我们可以看到如下的设备树:
可以看到,系统中有一个USB主机控制器,名叫:Interl(R)USB 3.10可扩展主机控制器,通过查看其硬件可知,这是一个PIC/E设备。
在USB主机控制器下,有一个USB根集线器(Xhci),USB的其它设备都挂接在根集线器下。
USB根集线器下挂接着以下几个设备,分别为:
- 一块USB固态盘
- USB鼠标
- USB无线蓝牙输入设备(用于连接蓝牙键盘或鼠标)
- USB复合设备,此USB复合设备包括两个接口,第一个接口为一个标准的HID键盘,第二个接口为一个USB标准输入设备。在第二个设备中,又由于报告描述符的原因,系统枚举了3个USB标准输入设备。