专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

USB2.0描述符小结

作者:佚名   来源:不详   点击数:  更新时间:2014年08月17日   【字体:
   描述符(descriptor)是一个数据结构,使主机了解设备的格式化信息。每一个描述符可能包含整个设备的信息,或是设备中的一个组件。所有的USB外围设备,都必须对标准的USB描述符作出响应。

    在检测设备的期间,主机使用控制传输来要求设备传回描述符。表1列出了描述符的类型。在检测设备的过程中,要求的描述符首先是整个设备,然后是每一个设置配置,每一个设置配置的接口,最后是每一个接口的断点。

表1 标准描述符类型

 

描述符类型

说明

是否需要

Device

设备

Device_qualifier

 

只有同时支持全速与高速的设备才需要,其它设备不允许

Configuration

配置

Other_speed_configuration

 

只有同时支持全速与高速的设备才需要,其它设备不允许

Interface

接口

Endpoint

端点

否,如果设备只使用端点0

String

字符串

否,选择性的描述文字

Interface_power

 

否。支持接口层级的电源管理

 

    每一个设备只能有一个设备描述符,设备描述符包含整个设备的信息,以及设备支持的配置号码。

    每一个设备会有一个或多个配置描述符,来包含设备的电源管理使用,以及设置配置所支持的接口号码。每个接口描述符有0个或多个端点描述符,来包含与端点通信所需的信息。没有端点描述符的接口,仍然可以使用通信用的控制端点。

    当设备接收到一个配置描述符的要求,应该传回该配置描述符以及所有该配置的接口、端点以及其他附属描述符,来达到所要求的字节数目。

    同时支持全速与高速的设备,还支持两个额外的描述符:device_qualifier与other_speed_configuration,这两个额外的描述符与其他附属描述符,包含了使用非目前选择的速度时的设备行为。字符串描述符用来储存厂商或设备名称等文字,其他描述符可以储存这些字符串描述符的索引值。之极可以使用get_descriptor要求,来读取这些字符串描述符。

    USB2.0规范新增了一个interface_power描述符,该功能使得除了设备层级外,接口层级也能够启用电源管理。每一个描述符都包含有一个数值,来描述其描述符的类型。表2列出了USB和HID规范所定义的数值。此数值的位7永远是0,位6和位5用来识别描述符的类型(00h是标准,01h是类别,02h是厂商,03h是保留),位4到位0则用来识别描述符。

表2 描述符的数值

 

类型

数值(十六进制)

描述符

标准

(standard)

01

device

02

configuration

03

String

04

Interface

05

Endpoint

06

Device_qualifier

07

Other_speed_configuration

08

Interface_power

类别

(class)

21

HID

29

Hub

HID类别特定

22

Report

23

physical

 

每一个描述符包含有数个字段,大部分的字段使用前置名称(prefix),来指出该字段的格式与内容。例如:

b表示该字段为一个字节的长度;

w表示两个字节的长度;

bm表示位映射,即字节中的每一位都对应不同的含义;

bcd表示BCD码;

i表示索引或是指针(index);

id表示标志符(identifier)。

 

       设备描述符

    设备描述符是在设备连接时,主机第一个读取的描述符,包含了主机需要从设备读取的基本信息。设备描述符有14个字段,如表3所示。依照功能来分,设备描述符的字段包含了描述符本身、设备、配置以及类别4大类。

表3 设备描述符

 

位移

十进制

字段

大小

(字节)

数值

说明

0

bLength

1

数字

描述符大小(字节)

1

bDescriptorType

1

常数

常数Device(01h)

2

bcdUSB

2

BCD

USB规范版本号码

4

bDeviceClass

1

类别

类别码

5

bDeviceSubclass

1

子类别

子类别码

6

bDeviceProtocol

1

协议

协议码

7

bMaxPacketSize(0)

1

数字

端点0的最大信息包大小

8

idVendor

2

ID

厂商ID

10

idProduct

2

ID

产品ID

12

bcdDevice

2

BCD

设备版本号码

14

iManufacturer

1

索引值

制造者的字符串描述符的索引值

15

iProduct

1

索引值

产品的字符串描述符的索引值

16

iSerialNumber

1

索引值

序号的字符串描述符的索引值

17

bNumConfigurations

1

数字

可能配置的数目

 

 

       Device_qualifier描述符

    同时支持全速与高速的设备,必须有一个device_qualifier描述符。当设备转换速度的时候,设备描述符中的某些字段可能改变。Device_qualifier描述符储存当前不适用的速度的字段数值。设备描述符与device_qualifier描述符中的字段数值,视所选择的速度来做交替。

表4 device_qualifier描述符

 

位移

十进制

字段

大小

(字节)

数值

说明

0

bLength

1

数字

描述符大小(字节)

1

bDescriptorType

1

常数

常数Device_qualifier(06h)

2

bcdUSB

2

BCD

USB规范版本号码

4

bDeviceClass

1

类别

类别码

5

bDeviceSubclass

1

子类别

子类别码

6

bDeviceProtocol

1

协议

协议码

7

bMaxPacketSize(0)

1

数字

端点0的最大信息包大小

8

bNumConfigurations

1

数字

可能配置的数目

9

Reserved

1

0

保留

 

       配置描述符

    在读取设备描述符后,主机可以读取该设备的配置、接口以及端点描述符。每一个设备都至少有一个配置描述符,用来描述该设备的特性与能力。通常一个设置配置就已经足够,不过多用途或模式的设备可以支持多个设置配置,在同一时间只能有一个作用。

    每一个设置配置都需要一个描述符,此描述符包含设备中的电源使用以及支持的接口数目。每一个配置描述符都有附属的描述符,包含一个或多个接口描述符,以及选择性的端点描述符。

配置描述符有8个字段,如表5所示,在许多设置配置中,有些字段并不使用。

表5 配置描述符

 

位移

十进制

字段

大小

(字节)

数值

说明

0

bLength

1

数字

描述符大小(字节)

1

bDescriptorType

1

常数

常数configuration(02h)

2

wTotalLength

2

数字

此配置传回的所有数据大小(字节)

4

bNumInterfaces

1

数字

此配置支持的接口数目

5

bConfigurationValue

1

数字

Set_configuration与get_configuration要求的标识符

6

iConfigurtion

1

索引值

此配置的字符串描述符的索引值

7

bmAuributes

1

位图

自身电源/总线电源以及远程唤醒设置

8

MaxPower

1

mA

需要总线电源,标识法为(最大mA/2)

 

      bNumInterfaces:此配置支持的接口数目,最小值是1;

      bmAuributes:如果设备是自身电源,位6 = 1;位6 = 0 表示此配置是总线供电。如果设备支持远程唤醒(remote wakeup)特性,位5 = 1。如果总线无作用超过3ms,USB必须进入挂起(suspend)状态,如果在挂起状态的设备被主机要求,支持远程唤醒特性(并且启用)的设备可以要求主机重新通信。

      MaxPower:指定设备所需的总线电流,以mA为单位。此字段等于所需电流的一半,例如设备需要200mA,则MaxPower取100mA。最大的允许电流500mA,如果主机发现所要求的电流无法得到,则会拒绝设置设备的配置。

       Other_speed_configuration描述符

同时支持全速与高速的设备,必须有一个Other_speed_configuration描述符。此描述符的结构与配置描述符相同,唯一的差别是other_speed_configuration描述符描述的是当设备是在非作用中速度时的配置,Other_speed_configuration描述符与设备配置描述符相同。

表6 other_speed_configuration描述符

 

位移

十进制

字段

大小

(字节)

数值

说明

0

bLength

1

数字

描述符大小(字节)

1

bDescriptorType

1

常数

常数other_speed_configuration(07h)

2

wTotalLength

2

数字

此配置传回的所有数据大小(字节)

4

bNumInterfaces

1

数字

此配置支持的接口数目

5

bConfigurationValue

1

数字

Set_configuration与get_configuration要求的标识符

6

iConfigurtion

1

索引值

此配置的字符串描述符的索引值

7

bmAuributes

1

位图

自身电源/总线电源以及远程唤醒设置

8

MaxPower

1

mA

需要总线电源,标识法为(最大mA/2)

 

       接口描述符

    接口表示被设备的特性或功能所使用的端点、配置的接口描述符,包含该接口所支持的端点信息。

每一个设置配置必须支持一个接口,对许多设备来说,一个接口就已经足够,不过一个设置配置,可以同时又多个作用中的接口。每一个接口有它自己的接口描述符,此接口所支持的所有端点又各有一个附属描述符。

如果一个设备拥有同时多个作用中接口的设置配置,它就是一个复合设备,主机会为每一个接口,加载一个驱动程序。

    一个设置配置可以支持多个互不相关的接口,改变接口比改变设置配置容易。主机使用set_interface来要求一个接口,并且以get_interface要求来读取目前接口的号码。每一个接口都有它自己的接口描述符与附属描述符。

表7 接口描述符

 

位移

十进制

字段

大小

(字节)

数值

说明

0

bLength

1

数字

描述符大小(字节)

1

bDescriptorType

1

常数

常数interface(04h)

2

bInterfaceNumber

1

数字

识别此接口的数字

3

bAlternateSetting

1

数字

用来选择一个替代设置的数值

4

bNumEndpoints

1

数字

除了端点0外,支持的端点数量

5

bInterfaceClass

1

类别

类别码

6

bInterfaceSubclass

1

子类别

子类别码

7

bInterfaceProtocol

1

协议

协议码

8

iInterface

1

索引值

此接口的字符串描述符的索引值

 

       端点描述符

    每一个指定在接口描述符内的端点,都有一个端点描述符。断掉0没有端点描述符,因为每一个端点都必须支持断点0。设备描述符包含最大信息包大小的信息,而端点描述符则是定义端点的其他信息。

表8 端点描述符

 

位移

十进制

字段

大小

(字节)

数值

说明

0

bLength

1

数字

描述符大小(字节)

1

bDescriptorType

1

常数

常数endpoint(05h)

2

bEndpointAddress

1

端点

端点数目与方向

3

bmAttributes

1

数字

支持的传输类型

4

wMaxPacketSize

2

数字

支持的最大信息包大小

6

bInterval

1

数字

最大延迟/轮询时距/NAK速率

 

      bEndpointeAddress:包含端点的数目与方向,位0-3是端点的数目,低速设备最多可以有3个端点(编号0-2),全速与高速设备可以有16个端点9编号0-15)。位7是端点方向,0表示out,1表示in,Ignored表示双向(控制传输)。位4 – 6不使用,必须是0。

      bmAttributes:位1和0指定端点支持的传输类型:00表示控制传输,01表示实时传输,10表示批量传输,11表示中断传输。如果是端点0,默认是控制传输。USB2.0使用位2-5作为全速与高速的实时端点。位3和位2指定一个同步类型:00是没有同步(no synchronization),01是异步(asynchronous),10是adaptive,11是同步的。位5和位4指定使用类型:00是数据端点(data endpoint),01是反馈端点(feedback endpoint),10是隐含反馈数据端点(implicit feedback data endpoint),11保留。如果是非实时端点,位2-位5必须是0。所有的位6与位7必须是0。

       字符串描述符

字符串描述符包含描述的文字,USB规范定义了制造者、产品、序号、配置以及接口的字符串描述符,字符串描述符是选择性的,设备可以支持额外的字符串描述符。

表9 字符串描述符

 

位移

十进制

字段

大小

(字节)

数值

说明

0

bLength

1

N+2

描述符大小(字节)

1

bDescriptorType

1

常数

常数STRING(03h)

2

bString

不定

数字

如果是字符串描述符0,此字段是一个1个或更多语言标识符码的数组。如果是其他的字符串描述符,此字段是一个Unicode字符串

 

 

关闭窗口