USB复合设备Compoite Device与组合设备Compound Device
USB的设备有两种“复合”,这两种复合从硬件组成的解的角度分为两种:
为了便于区分,这里我们定义两个名词:
- USB组合设备Compound Device
- USB复合设备Compoite Device
USB组合设备-Compound Device
USB组合设备比较暴力,就是通过USB集线器将多个物理的USB设备通过集线器级联起来进行封装,对外预留一个USB集线器的上游端口。
USB组合设备中的每个设备包括集线器本身都会在该集线器上有独立的地址。
在USBTreeViewer这类工具下,会显示出设备的层级关系,如果移除设备,可以看到是一个设备树节点被移除。
假如我们有一个USB组合设备插入电脑,在USBTreeViewer中如下图中红框中显示:
系统一下子枚举出了一个USB集线器和其下游的子设备,如果移除设备,其USB集线器及其下游的所有设备均移除。
所以可以这样定义:从外观或者包装上来看的这个USB设备,如果其USB接口是其一个USB集线器的上游端口,这类设备被定义为USB组合设备(Compound Device)。
USB组合设备每个设备有独立的设备描述符,分配独立的USB总线地址。
USB组合设备是硬件工程师组合的USB设备。
USB组合设备各个设备的PIDVID一般不相同。
USB组合设备的每个设备有独立的配置描述符,并且都需要独立在USB总线上传输。
USB复合设备Composite Device
USB复合设备是一个USB物理设备,其表现为这个USB接口就是一个USB设备芯片的接口。
USB复合设备是一个USB设备芯片实现了多个USB设备功能,其是通过USB接口描述符来实现不同的设备功能。
USB复合设备在USBTreeVeiwer下只显示一个USB设备,是软件工程师复合的USB设备。
还是如上图的USBTreeViewer中的Port8,可以看到是一个UAC耳机。其在Windows设备管理器下如下:
其根节点必是通过USB Composite Device(usbccgp.sys)来驱动,其子节点的硬件ID必带MI_0X,并且所有设备其享一组PIDVID.
USB复合设备的配置描述符一次获取完整后,再由系统驱动根据其接口功能的不同,而进行逻辑拆分组合,生成逻辑设备。