zl程序教程

您现在的位置是:首页 >  其他

当前栏目

USB协议2

协议 USB
2023-09-14 09:15:30 时间

USB协议基础——2

标准的USB设备有6种常用的USB描述符:设备描述符、配置描述符、字符串描述符、接口描述符、端点描述符、设备限定描述符。另外,还有一种特殊的描述符称为接口关联描述符,用于将一组有关的描述符关联起来共同描述一个特定的功能。下图是USB描述符结构框图。
在这里插入图片描述
设备描述符指明了该设备有几个配置描述符,每个配置描述符都分别指明了该配置描述符中的接口描述符,而接口描述符指明了该接口有几个端点描述符。当主机需要获取配置描述符的时候,该配置描述符拥有的接口描述符和端点描述符会一并返回。在同一个配置描述符的多个功能,(由一个或者多个接口描述符组成)能够同时工作,但是如果USB设备存在多个配置描述符,USB主机会通过SetConfiguration()使用其中一个。

设备描述符

一个设备有且只有一个设备描述符。设备描述符描述了设备的基本属性,USB设备描述符的位域,如下表所示。
在这里插入图片描述
在设备描述符中只会给出这个设备所支持的配置描述符的数量,设备的配置描述符的索引从1开始,比如当设备的配置描述符有两个时,这两个配置描述符的索引分别是1和2.USB主机就是使用这个索引作为GetDescriptor(Configuration)的参数来分别获取对应的设备的配置描述符。

配置描述符

配置描述符定义了设备的一种配置信息,一个设备可以有一个或者多个配置描述符。USB配置描述符的位域如下表所示。
在这里插入图片描述
配置描述符包括了配置的基本信息,如该设备的接口描述符的个数、配置描述符的长度、供电属性等。配置描述符的长度(wTotalLength)描述了该配置描述符的总长度,包括该描述符本身的长度,以及配置描述符中所有接口描述符和端点描述符的总长度等等
当主机需要获取配置描述符时,该配置描述符所拥有的接口描述符和端口描述符都一并返回。

接口描述符

接口描述符位于配置描述符中,指明了某个特殊的USB类接口。接口描述符通过端点完成数据传输,实现特定类的特定功能。USB接口描述符的位域如下表所示。
在这里插入图片描述

端点描述符

端点描述符包括该端点地址、端点属性、支持包最大长度、传输时间间隔等。在主机获取配置描述符时,端点描述符和接口描述符一起返回。USB端点描述符的位域如下表所示。
在这里插入图片描述
端点描述符包括该端点地址、端点属性、支持的最大包长度、传输时间间隔等。端点地址的0-3bit代表该端点所使用的地址,第7比特代表该端点是用作输入还是输出端点。端点属性的第0和第1bit代表该端点的支持的四种传输属性。

字符串描述符

字符串描述符是可选的。如果设备不支持字符串描述符,需要将设备描述符、配置描述符、接口描述符中的字符串索引值设为0,字符串描述符用UNICODE编码。
主机获得设备的某个字符串描述符两条命令:首先主机发送USB标准命令GetDescriptor(),其中所使用的字符串的索引值为0,设备返回一个零字符串描述符的位域,如下表所示
在这里插入图片描述
其中wLANGID[0]~[x]代表改设别支持的语言,可以从USB设备语言ID规定中获得具体值,典型值0x0409代表英语。
主机根据自己是否支持该语言,再次发出USB标准命令GetDescriptor(),指明所要求得到的字符串的索引值和语言。这次设备所返回的是UNICODE编码的字符串描述符,UNICODE字符串描述符的位域如表2-12所示。
在这里插入图片描述

接口关联描述符

作用是把多个接口定义成一个类设备。接口关联描述符的位域如下表所示,bFirstInterface代表起始的接口编号,bInterfaceCount代表属于这个IAD的接口数目,编号中间不能有间隔。在一个类的所有合并接口都结束之后,第二个类的所有需要合并的接口又以IAD开始。如下图所示,IAD1的bFirstInterface为0,bInterfaceCount为2;IAD2的bFirstInterface为2,bInterfaceCount为2。
在这里插入图片描述

设备限定描述符

设备限定描述符用于描述一个能够同时支持高速和全速模式的USB设备工作在另外一个模式时的设备信息。如果一个设备能够同时支持高速和全速模式,并且其在高速模式下和全速模式下信息有所不同,则它必须支持设备限定描述符。如果一个只支持全速模式的设备收到一个获取设备限定描述符的命令,需要告诉主机这是个错误请求。设备限定描述符的位域如下表所示。

在这里插入图片描述
参考 微控制器USB的信号和协议实现