專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

USB2.0描述符小結(jié)

作者:佚名   來(lái)源:不詳   點(diǎn)擊數(shù):  更新時(shí)間:2014年08月17日   【字體:
   描述符(descriptor)是一個(gè)數(shù)據(jù)結(jié)構(gòu),使主機(jī)了解設(shè)備的格式化信息。每一個(gè)描述符可能包含整個(gè)設(shè)備的信息,或是設(shè)備中的一個(gè)組件。所有的USB外圍設(shè)備,都必須對(duì)標(biāo)準(zhǔn)的USB描述符作出響應(yīng)。

    在檢測(cè)設(shè)備的期間,主機(jī)使用控制傳輸來(lái)要求設(shè)備傳回描述符。表1列出了描述符的類(lèi)型。在檢測(cè)設(shè)備的過(guò)程中,要求的描述符首先是整個(gè)設(shè)備,然后是每一個(gè)設(shè)置配置,每一個(gè)設(shè)置配置的接口,最后是每一個(gè)接口的斷點(diǎn)。

表1 標(biāo)準(zhǔn)描述符類(lèi)型

 

描述符類(lèi)型

說(shuō)明

是否需要

Device

設(shè)備

Device_qualifier

 

只有同時(shí)支持全速與高速的設(shè)備才需要,其它設(shè)備不允許

Configuration

配置

Other_speed_configuration

 

只有同時(shí)支持全速與高速的設(shè)備才需要,其它設(shè)備不允許

Interface

接口

Endpoint

端點(diǎn)

否,如果設(shè)備只使用端點(diǎn)0

String

字符串

否,選擇性的描述文字

Interface_power

 

否。支持接口層級(jí)的電源管理

 

    每一個(gè)設(shè)備只能有一個(gè)設(shè)備描述符,設(shè)備描述符包含整個(gè)設(shè)備的信息,以及設(shè)備支持的配置號(hào)碼。

    每一個(gè)設(shè)備會(huì)有一個(gè)或多個(gè)配置描述符,來(lái)包含設(shè)備的電源管理使用,以及設(shè)置配置所支持的接口號(hào)碼。每個(gè)接口描述符有0個(gè)或多個(gè)端點(diǎn)描述符,來(lái)包含與端點(diǎn)通信所需的信息。沒(méi)有端點(diǎn)描述符的接口,仍然可以使用通信用的控制端點(diǎn)。

    當(dāng)設(shè)備接收到一個(gè)配置描述符的要求,應(yīng)該傳回該配置描述符以及所有該配置的接口、端點(diǎn)以及其他附屬描述符,來(lái)達(dá)到所要求的字節(jié)數(shù)目。

    同時(shí)支持全速與高速的設(shè)備,還支持兩個(gè)額外的描述符:device_qualifier與other_speed_configuration,這兩個(gè)額外的描述符與其他附屬描述符,包含了使用非目前選擇的速度時(shí)的設(shè)備行為。字符串描述符用來(lái)儲(chǔ)存廠商或設(shè)備名稱等文字,其他描述符可以儲(chǔ)存這些字符串描述符的索引值。之極可以使用get_descriptor要求,來(lái)讀取這些字符串描述符。

    USB2.0規(guī)范新增了一個(gè)interface_power描述符,該功能使得除了設(shè)備層級(jí)外,接口層級(jí)也能夠啟用電源管理。每一個(gè)描述符都包含有一個(gè)數(shù)值,來(lái)描述其描述符的類(lèi)型。表2列出了USB和HID規(guī)范所定義的數(shù)值。此數(shù)值的位7永遠(yuǎn)是0,位6和位5用來(lái)識(shí)別描述符的類(lèi)型(00h是標(biāo)準(zhǔn),01h是類(lèi)別,02h是廠商,03h是保留),位4到位0則用來(lái)識(shí)別描述符。

表2 描述符的數(shù)值

 

類(lèi)型

數(shù)值(十六進(jìn)制)

描述符

標(biāo)準(zhǔn)

(standard)

01

device

02

configuration

03

String

04

Interface

05

Endpoint

06

Device_qualifier

07

Other_speed_configuration

08

Interface_power

類(lèi)別

(class)

21

HID

29

Hub

HID類(lèi)別特定

22

Report

23

physical

 

每一個(gè)描述符包含有數(shù)個(gè)字段,大部分的字段使用前置名稱(prefix),來(lái)指出該字段的格式與內(nèi)容。例如:

b表示該字段為一個(gè)字節(jié)的長(zhǎng)度;

w表示兩個(gè)字節(jié)的長(zhǎng)度;

bm表示位映射,即字節(jié)中的每一位都對(duì)應(yīng)不同的含義;

bcd表示BCD碼;

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

id表示標(biāo)志符(identifier)。

 

       設(shè)備描述符

    設(shè)備描述符是在設(shè)備連接時(shí),主機(jī)第一個(gè)讀取的描述符,包含了主機(jī)需要從設(shè)備讀取的基本信息。設(shè)備描述符有14個(gè)字段,如表3所示。依照功能來(lái)分,設(shè)備描述符的字段包含了描述符本身、設(shè)備、配置以及類(lèi)別4大類(lèi)。

表3 設(shè)備描述符

 

位移

十進(jìn)制

字段

大小

(字節(jié))

數(shù)值

說(shuō)明

0

bLength

1

數(shù)字

描述符大。ㄗ止(jié))

1

bDescriptorType

1

常數(shù)

常數(shù)Device(01h)

2

bcdUSB

2

BCD

USB規(guī)范版本號(hào)碼

4

bDeviceClass

1

類(lèi)別

類(lèi)別碼

5

bDeviceSubclass

1

子類(lèi)別

子類(lèi)別碼

6

bDeviceProtocol

1

協(xié)議

協(xié)議碼

7

bMaxPacketSize(0)

1

數(shù)字

端點(diǎn)0的最大信息包大小

8

idVendor

2

ID

廠商ID

10

idProduct

2

ID

產(chǎn)品ID

12

bcdDevice

2

BCD

設(shè)備版本號(hào)碼

14

iManufacturer

1

索引值

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

15

iProduct

1

索引值

產(chǎn)品的字符串描述符的索引值

16

iSerialNumber

1

索引值

序號(hào)的字符串描述符的索引值

17

bNumConfigurations

1

數(shù)字

可能配置的數(shù)目

 

 

       Device_qualifier描述符

    同時(shí)支持全速與高速的設(shè)備,必須有一個(gè)device_qualifier描述符。當(dāng)設(shè)備轉(zhuǎn)換速度的時(shí)候,設(shè)備描述符中的某些字段可能改變。Device_qualifier描述符儲(chǔ)存當(dāng)前不適用的速度的字段數(shù)值。設(shè)備描述符與device_qualifier描述符中的字段數(shù)值,視所選擇的速度來(lái)做交替。

表4 device_qualifier描述符

 

位移

十進(jìn)制

字段

大小

(字節(jié))

數(shù)值

說(shuō)明

0

bLength

1

數(shù)字

描述符大。ㄗ止(jié))

1

bDescriptorType

1

常數(shù)

常數(shù)Device_qualifier(06h)

2

bcdUSB

2

BCD

USB規(guī)范版本號(hào)碼

4

bDeviceClass

1

類(lèi)別

類(lèi)別碼

5

bDeviceSubclass

1

子類(lèi)別

子類(lèi)別碼

6

bDeviceProtocol

1

協(xié)議

協(xié)議碼

7

bMaxPacketSize(0)

1

數(shù)字

端點(diǎn)0的最大信息包大小

8

bNumConfigurations

1

數(shù)字

可能配置的數(shù)目

9

Reserved

1

0

保留

 

       配置描述符

    在讀取設(shè)備描述符后,主機(jī)可以讀取該設(shè)備的配置、接口以及端點(diǎn)描述符。每一個(gè)設(shè)備都至少有一個(gè)配置描述符,用來(lái)描述該設(shè)備的特性與能力。通常一個(gè)設(shè)置配置就已經(jīng)足夠,不過(guò)多用途或模式的設(shè)備可以支持多個(gè)設(shè)置配置,在同一時(shí)間只能有一個(gè)作用。

    每一個(gè)設(shè)置配置都需要一個(gè)描述符,此描述符包含設(shè)備中的電源使用以及支持的接口數(shù)目。每一個(gè)配置描述符都有附屬的描述符,包含一個(gè)或多個(gè)接口描述符,以及選擇性的端點(diǎn)描述符。

配置描述符有8個(gè)字段,如表5所示,在許多設(shè)置配置中,有些字段并不使用。

表5 配置描述符

 

位移

十進(jìn)制

字段

大小

(字節(jié))

數(shù)值

說(shuō)明

0

bLength

1

數(shù)字

描述符大。ㄗ止(jié))

1

bDescriptorType

1

常數(shù)

常數(shù)configuration(02h)

2

wTotalLength

2

數(shù)字

此配置傳回的所有數(shù)據(jù)大小(字節(jié))

4

bNumInterfaces

1

數(shù)字

此配置支持的接口數(shù)目

5

bConfigurationValue

1

數(shù)字

Set_configuration與get_configuration要求的標(biāo)識(shí)符

6

iConfigurtion

1

索引值

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

7

bmAuributes

1

位圖

自身電源/總線電源以及遠(yuǎn)程喚醒設(shè)置

8

MaxPower

1

mA

需要總線電源,標(biāo)識(shí)法為(最大mA/2)

 

      bNumInterfaces:此配置支持的接口數(shù)目,最小值是1;

      bmAuributes:如果設(shè)備是自身電源,位6 = 1;位6 = 0 表示此配置是總線供電。如果設(shè)備支持遠(yuǎn)程喚醒(remote wakeup)特性,位5 = 1。如果總線無(wú)作用超過(guò)3ms,USB必須進(jìn)入掛起(suspend)狀態(tài),如果在掛起狀態(tài)的設(shè)備被主機(jī)要求,支持遠(yuǎn)程喚醒特性(并且啟用)的設(shè)備可以要求主機(jī)重新通信。

      MaxPower:指定設(shè)備所需的總線電流,以mA為單位。此字段等于所需電流的一半,例如設(shè)備需要200mA,則MaxPower取100mA。最大的允許電流500mA,如果主機(jī)發(fā)現(xiàn)所要求的電流無(wú)法得到,則會(huì)拒絕設(shè)置設(shè)備的配置。

       Other_speed_configuration描述符

同時(shí)支持全速與高速的設(shè)備,必須有一個(gè)Other_speed_configuration描述符。此描述符的結(jié)構(gòu)與配置描述符相同,唯一的差別是other_speed_configuration描述符描述的是當(dāng)設(shè)備是在非作用中速度時(shí)的配置,Other_speed_configuration描述符與設(shè)備配置描述符相同。

表6 other_speed_configuration描述符

 

位移

十進(jìn)制

字段

大小

(字節(jié))

數(shù)值

說(shuō)明

0

bLength

1

數(shù)字

描述符大。ㄗ止(jié))

1

bDescriptorType

1

常數(shù)

常數(shù)other_speed_configuration(07h)

2

wTotalLength

2

數(shù)字

此配置傳回的所有數(shù)據(jù)大。ㄗ止(jié))

4

bNumInterfaces

1

數(shù)字

此配置支持的接口數(shù)目

5

bConfigurationValue

1

數(shù)字

Set_configuration與get_configuration要求的標(biāo)識(shí)符

6

iConfigurtion

1

索引值

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

7

bmAuributes

1

位圖

自身電源/總線電源以及遠(yuǎn)程喚醒設(shè)置

8

MaxPower

1

mA

需要總線電源,標(biāo)識(shí)法為(最大mA/2)

 

       接口描述符

    接口表示被設(shè)備的特性或功能所使用的端點(diǎn)、配置的接口描述符,包含該接口所支持的端點(diǎn)信息。

每一個(gè)設(shè)置配置必須支持一個(gè)接口,對(duì)許多設(shè)備來(lái)說(shuō),一個(gè)接口就已經(jīng)足夠,不過(guò)一個(gè)設(shè)置配置,可以同時(shí)又多個(gè)作用中的接口。每一個(gè)接口有它自己的接口描述符,此接口所支持的所有端點(diǎn)又各有一個(gè)附屬描述符。

如果一個(gè)設(shè)備擁有同時(shí)多個(gè)作用中接口的設(shè)置配置,它就是一個(gè)復(fù)合設(shè)備,主機(jī)會(huì)為每一個(gè)接口,加載一個(gè)驅(qū)動(dòng)程序。

    一個(gè)設(shè)置配置可以支持多個(gè)互不相關(guān)的接口,改變接口比改變?cè)O(shè)置配置容易。主機(jī)使用set_interface來(lái)要求一個(gè)接口,并且以get_interface要求來(lái)讀取目前接口的號(hào)碼。每一個(gè)接口都有它自己的接口描述符與附屬描述符。

表7 接口描述符

 

位移

十進(jìn)制

字段

大小

(字節(jié))

數(shù)值

說(shuō)明

0

bLength

1

數(shù)字

描述符大。ㄗ止(jié))

1

bDescriptorType

1

常數(shù)

常數(shù)interface(04h)

2

bInterfaceNumber

1

數(shù)字

識(shí)別此接口的數(shù)字

3

bAlternateSetting

1

數(shù)字

用來(lái)選擇一個(gè)替代設(shè)置的數(shù)值

4

bNumEndpoints

1

數(shù)字

除了端點(diǎn)0外,支持的端點(diǎn)數(shù)量

5

bInterfaceClass

1

類(lèi)別

類(lèi)別碼

6

bInterfaceSubclass

1

子類(lèi)別

子類(lèi)別碼

7

bInterfaceProtocol

1

協(xié)議

協(xié)議碼

8

iInterface

1

索引值

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

 

       端點(diǎn)描述符

    每一個(gè)指定在接口描述符內(nèi)的端點(diǎn),都有一個(gè)端點(diǎn)描述符。斷掉0沒(méi)有端點(diǎn)描述符,因?yàn)槊恳粋(gè)端點(diǎn)都必須支持?jǐn)帱c(diǎn)0。設(shè)備描述符包含最大信息包大小的信息,而端點(diǎn)描述符則是定義端點(diǎn)的其他信息。

表8 端點(diǎn)描述符

 

位移

十進(jìn)制

字段

大小

(字節(jié))

數(shù)值

說(shuō)明

0

bLength

1

數(shù)字

描述符大小(字節(jié))

1

bDescriptorType

1

常數(shù)

常數(shù)endpoint(05h)

2

bEndpointAddress

1

端點(diǎn)

端點(diǎn)數(shù)目與方向

3

bmAttributes

1

數(shù)字

支持的傳輸類(lèi)型

4

wMaxPacketSize

2

數(shù)字

支持的最大信息包大小

6

bInterval

1

數(shù)字

最大延遲/輪詢時(shí)距/NAK速率

 

      bEndpointeAddress:包含端點(diǎn)的數(shù)目與方向,位0-3是端點(diǎn)的數(shù)目,低速設(shè)備最多可以有3個(gè)端點(diǎn)(編號(hào)0-2),全速與高速設(shè)備可以有16個(gè)端點(diǎn)9編號(hào)0-15)。位7是端點(diǎn)方向,0表示out,1表示in,Ignored表示雙向(控制傳輸)。位4 – 6不使用,必須是0。

      bmAttributes:位1和0指定端點(diǎn)支持的傳輸類(lèi)型:00表示控制傳輸,01表示實(shí)時(shí)傳輸,10表示批量傳輸,11表示中斷傳輸。如果是端點(diǎn)0,默認(rèn)是控制傳輸。USB2.0使用位2-5作為全速與高速的實(shí)時(shí)端點(diǎn)。位3和位2指定一個(gè)同步類(lèi)型:00是沒(méi)有同步(no synchronization),01是異步(asynchronous),10是adaptive,11是同步的。位5和位4指定使用類(lèi)型:00是數(shù)據(jù)端點(diǎn)(data endpoint),01是反饋端點(diǎn)(feedback endpoint),10是隱含反饋數(shù)據(jù)端點(diǎn)(implicit feedback data endpoint),11保留。如果是非實(shí)時(shí)端點(diǎn),位2-位5必須是0。所有的位6與位7必須是0。

       字符串描述符

字符串描述符包含描述的文字,USB規(guī)范定義了制造者、產(chǎn)品、序號(hào)、配置以及接口的字符串描述符,字符串描述符是選擇性的,設(shè)備可以支持額外的字符串描述符。

表9 字符串描述符

 

位移

十進(jìn)制

字段

大小

(字節(jié))

數(shù)值

說(shuō)明

0

bLength

1

N+2

描述符大。ㄗ止(jié))

1

bDescriptorType

1

常數(shù)

常數(shù)STRING(03h)

2

bString

不定

數(shù)字

如果是字符串描述符0,此字段是一個(gè)1個(gè)或更多語(yǔ)言標(biāo)識(shí)符碼的數(shù)組。如果是其他的字符串描述符,此字段是一個(gè)Unicode字符串

 

 

關(guān)閉窗口