新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > USB設(shè)備驅(qū)動開發(fā)-USB協(xié)議相關(guān)(3)

USB設(shè)備驅(qū)動開發(fā)-USB協(xié)議相關(guān)(3)

作者: 時間:2016-12-12 來源:網(wǎng)絡(luò) 收藏

一、USB設(shè)備標(biāo)準(zhǔn)請求

本文引用地址:http://m.butianyuan.cn/article/201612/329079.htm

USB設(shè)備標(biāo)準(zhǔn)請求是為所有USB設(shè)備定義的操作,即使設(shè)備還沒有被分配地址或還沒有被配置都必須相應(yīng)設(shè)備標(biāo)準(zhǔn)請求。

標(biāo)準(zhǔn)特性選擇子

特性選擇子用于對特性使能或設(shè)置特性,若一個不支持或非法的請求發(fā)送給USB設(shè)備,設(shè)備將在數(shù)據(jù)或狀態(tài)傳輸階段返回STALL作為響應(yīng)。若設(shè)備的默認(rèn)控制通道由于錯誤不能通信,則設(shè)備將被reset來清除錯誤狀態(tài)并重啟默認(rèn)控制通道。

1. Clear Feature

wValue中的特性選擇子必須和操作對象匹配,即設(shè)備特性對應(yīng)設(shè)備,接口特性對應(yīng)接口,端點特性對應(yīng)端點。

若對應(yīng)的特性不存在或不能被清除,或者操作的接口或端點不存在,將返回一個請求錯誤狀態(tài)。

在Default狀態(tài):設(shè)備接收到這個請求后的操作是未定義的;

在Address狀態(tài):對設(shè)備操作是有效的,但對接口和端點的操作將返回請求錯誤;

在Configured狀態(tài):所有的請求都是有效的。

其中TEST_MODE特性不能被ClearFeature請求清除。

2. Set Feature

設(shè)置或使能特性

3. Get Configuration

返回當(dāng)前的設(shè)備配置值(一個字節(jié)),在配置狀態(tài)下,返回非0的bConfigurationValue值。若設(shè)備沒有配置則返回0。

4. Set Configuration

設(shè)置設(shè)備的配置

在wValue的低字節(jié)是配置值,若配置值為0,則設(shè)備將仍處于Address狀態(tài)。

5. Set Descriptor

用于更新已有的描述符或新增描述符。

6. Get Descriptor

其中wValue的高字節(jié)表示描述符的類型,如下表所示;低字節(jié)表示描述符的索引。一個設(shè)備可以實現(xiàn)多個配置描述符和字符串描述符,因此只有這兩種描述符才會用到索引值。

7. Get Interface

這個請求返回接口目前選擇的可選設(shè)置(Alernate Setting)。

8. Set Interface

設(shè)置接口

9. Get Status

返回操作對象的狀態(tài)。

10. Set Address

設(shè)置設(shè)備的地址

只允許對設(shè)備描述符、配置描述符和字符串描述符進(jìn)行操作。

11. Synch Frame

在等時傳輸方式中,用于設(shè)置并返回端點的同步幀。

二、描述符

USB設(shè)備使用描述符來報告屬性,一個描述符即預(yù)先定義好的數(shù)據(jù)結(jié)構(gòu)。每個描述符的第一個字節(jié)表示描述符的長度,第二個字節(jié)表示描述符的類型。

在描述符中可能包含有對字符串描述符的引用來描述這個描述符,若設(shè)備不支持字符串描述符,則其他描述符中字符串描述符引用域必須存儲,但需要設(shè)置為0來描述沒有可用字符串描述符。

1. 設(shè)備描述符

設(shè)備描述符用于描述一個設(shè)備的通用信息,一個USB設(shè)備只具有一個設(shè)備描述符。高速設(shè)備的設(shè)備描述符有一個版本號bcdUSB,0200H來表示USB 2.0

struct usb_device_descriptor {

__u8 bLength;

__u8 bDescriptorType;

__le16 bcdUSB;

__u8 bDeviceClass;

__u8 bDeviceSubClass;

__u8 bDeviceProtocol;

__u8 bMaxPacketSize0;

__le16 idVendor;

__le16 idProduct;

__le16 bcdDevice;

__u8 iManufacturer;

__u8 iProduct;

__u8 iSerialNumber;

__u8 bNumConfigurations;

} __attribute__ ((packed));

2. Device_Qualifier

對于高速設(shè)備,若在其他速度下需要更改一些配置,這需要定義這個描述符。

3. 配置描述符

配置描述符描述一個設(shè)備配置的信息,其中的bConfigurationValue值作為傳輸傳遞給SetConfiguration()請求,使設(shè)備采用這個配置。

一個USB設(shè)備有一個或多個配置描述符,一個配置描述符擁有一個或多個接口,一個接口擁有0個或多個端點。在同一個配置中,一個端點不能在不同的接口之間共用,但可以在同一個接口的不同設(shè)置共有。但在不同的配置中,端點可以在接口之間共用。

一旦配置選定,則設(shè)備一般僅少有的可變設(shè)置,即接口擁有可選設(shè)置則才可能更改設(shè)置。

4. 接口描述符

接口描述符描述一個配置中的接口。一個配置提供一個或多個接口。當(dāng)一個配置支持一個或多個接口時,接口描述將作為配置描述符的一部分返回,端點描述符將緊跟著接口描述符返回。接口描述符不能通過GetDescriptor()或SetDescriptor訪問。

一個接口包含可變設(shè)置來允許在設(shè)備配置后允許端點或一些特性做一定的改變。接口默認(rèn)的設(shè)置都為0,SetInterface()請求用于選擇一個設(shè)置或返回默認(rèn)的設(shè)置。GetInterface()請求返回選擇的設(shè)置。

如果一個設(shè)備配置支持單個接口并此接口有兩個可選設(shè)置,配置描述表返回以后會緊跟著返回bInterfaceNumber與bAlternateSetting域皆為0的第一個設(shè)置的接口描述表及相關(guān)的結(jié)點描述表,而隨之后是另一個設(shè)置接口描述表與結(jié)點描述表第二個接口描述表的bInterfaceNumber域也應(yīng)為0但bAlternate Setting域應(yīng)為1 。

如果一個接口僅使用節(jié)點0則接口描述表以后就不再返回節(jié)點描述表并且此接口表示的是一個請求接口它使用連在節(jié)點0上的缺省通道在這種情況下bNumberEndpoints域應(yīng)被設(shè)置成0 ,一個接口描述表的節(jié)點個數(shù)不把結(jié)點0計在內(nèi)。

5. 端點描述符

接口的端點擁有自己的描述符,描述符包含主機(jī)分配每個端點帶寬的信息。每個端點描述符是作為配置信息的一部分在GetDescriptor請求中返回的。端點描述符不能直接通過GetDescriptor()或SetDescriptor()請求訪問,這點與接口描述符一致。端點0沒有端點描述符。

6. 字符串描述符

字符串描述符是可選的,但若設(shè)備不支持字符串描述符,則設(shè)備中配置描述符、接口描述符中對字符串描述符的引用值必須設(shè)置為0。字符串描述符使用UNICODE編碼方式。USB設(shè)備可能需要支持多種語言,字符串描述符中16位的LANGID來表示支持的語言。




評論


技術(shù)專區(qū)

關(guān)閉