USB学习系列之二——USB设备的插入检测机制

时间:2022-07-25 16:09:22

1.USB的插入检测机制:USB端口的D+和D-均用一个15k的电阻接地,当无设备接入时,均处于低电平;在设备端在D+(表示高速设备或者全速设备)或者D-(表示低速设备)接了一个1.5k的上拉电阻到+3.3v,一旦将设备接入,USB端口的D+或者D-其中一个被拉高为3v,系统识别到外部设备接入。

注意:高速设备首先会被识别为全速设备,然后再通过集线器和设备二者的确认最后切换到高速模式下。

在高速模式下,采用的是电流传输模式,这个时候上拉电阻需要从D+上断开。

2.当设备没有枚举成功时(可以通过一个10K的电阻将USB的电源端和D+或者D-连接起来,电脑会发现一个无法识别的设备,这个设备的PID和VID都是0,根据每个特性可以简单的判定设备的枚举是否成功。

3.一个具体的USB实现什么功能,USB主机并不知道。USB主机通过读取USB的设备描述符来获取设备的类型、厂商的ID和产品的ID(通常依靠它们来加载对应的驱动程序)、端点情况、版本号等众多信息。

4.USB1.1协议定义的标准描述符有设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)和字符串描述符(String Descriptor)。

USB2.0相比于USB1.1新增加的两个描述符:限定符描述符(Qualifier Descriptor)和其他速度配置描述符(Other Speed Configuration Descriptor)。

5.一个USB设备只有一个设备描述符。

设备描述符里面决定了该设备有多少种配置,每种配置都有一个配置描述符;

而在每个配置描述符中又定义了该配置有多少个接口,每个接口都有一个接口描述符;

在接口描述符里面又定义了该接口有多少个端点,每个端点都有一个端点描述符,端点描述符定了端点的大小、类型等。

如果有类特殊描述符,它跟在相应的接口描述符之后。

注意:USB主机获取描述符时,从上到下逐层获取。对于字符串描述符,USB主机是单独获取的,主机通过发送获取字符串中描述符的请求以及描述符的索引号、语言ID来获取对应的字符串描述符。

6.设备描述符:设备所使用的USB协议版本号、设备类型、端点0的最大包大小、厂商ID(VID)和产品ID(PID)、设备版本号、厂商字符串索引、产品字符串索引、设备序列号索引、可能的配置数等。

配置描述符:记录配置所包含的接口数、配置的编号、供电方式、是否支持远程唤醒、电流需求量等。

接口描述符:记录接口的编号、接口的端点数、接口所使用的类、子类、协议等。

端点描述符:端点号及方向、端点的传输类型、最大包长度、查询时间间隔等。

字符串描述符:提供一些方便人们阅读的信息,它不是必需的。

7.与USB设备进行通信时需要的地址:设备的地址和端点的地址。配置和接口是为了更加方便的管理端点抽象出来的概念。一个设备可以有多个配置,但是一个时刻只能有一个配置有效;每个配置下又可以有多个接口,一个接口下面可以有多个端点。

8.具有多个接口,并由接口来实现功能的设备叫做USB复合设备。例如一个USB音频设备,它具有一个音频控制接口,另外还有一个到多个音频流或者MIDI流接口。在主机端会把USB复合设备的每个接口当做一个功能设备来看待,常见的USB鼠标,U盘等通常是单一的设备,即一个设备下只有一个配置描述符、一个接口描述符。