新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > USB的描述符及各種描述符之間的依賴關(guān)系

USB的描述符及各種描述符之間的依賴關(guān)系

作者: 時(shí)間:2016-12-15 來(lái)源:網(wǎng)絡(luò) 收藏

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

2.接口描述符

//定義標(biāo)準(zhǔn)的接口描述符結(jié)構(gòu)

typedef struct _INTERFACE_DESCRIPTOR_STRUCT
{
BYTE bLength;//接口描述符的字節(jié)數(shù)大小
BYTE bDescriptorType;//接口描述符的類(lèi)型編號(hào)
BYTE bInterfaceNumber;//該接口的編號(hào)
BYTE bAlternateSetting;//備用的接口描述符編號(hào)
BYTE bNumEndpoints;//該接口使用的端點(diǎn)數(shù),不包括端點(diǎn)0
BYTE bInterfaceClass;//接口類(lèi)型
BYTE bInterfaceSubClass;//接口子類(lèi)型
BYTE bInterfaceProtocol;//接口遵循的協(xié)議
BYTE iInterface;//描述該接口的字符串索引值
}
INTERFACE_DESCRIPTOR_STRUCT, * pINTERFACE_DESCRIPTOR_STRUCT;

4.端點(diǎn)描述符

//定義標(biāo)準(zhǔn)的端點(diǎn)描述符結(jié)構(gòu)

typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
{
BYTE bLegth;//端點(diǎn)描述符字節(jié)數(shù)大小
BYTE bDescriptorType;//端點(diǎn)描述符類(lèi)型編號(hào)
BYTE bEndpointAddress;//端點(diǎn)地址及輸入輸出屬性
BYTE bmAttributes;//端點(diǎn)的傳輸類(lèi)型屬性
WORD wMaxPacketSize;//端點(diǎn)收、發(fā)的最大包大小
BYTE bInterval;//主機(jī)查詢端點(diǎn)的時(shí)間間隔
}
ENDPOINT_DESCRIPTOR_STRUCT, * pENDPOINT_DESCRIPTOR_STRUCT;

下面是一個(gè)配置描述符集合的定義
typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT
{
CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor;
INTERFACE_DESCRIPTOR_STRUCTinterface_descritor;
ENDPOINT_DESCRIPTOR_STRUCTendpoint_descriptor[ENDPOINT_NUMBER];
}CON_INT_ENDP_DESCRIPTOR_STRUCT;

配置描述符集合的示例
code CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor=//配置描述符集合
{
//configuration_descriptor//配置描述符
{
sizeof(CONFIGURATION_DESCRIPTOR_STRUCT),//配置描述符的字節(jié)數(shù)大小,這里為9
CONFIGURATION_DESCRIPTOR,//配置描述符類(lèi)型編號(hào),配置描述符為2
(sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+
sizeof(INTERFACE_DESCRIPTOR_STRUCT)+
sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)*256+
(sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+
sizeof(INTERFACE_DESCRIPTOR_STRUCT)+
sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)/256,//配置描述符集合的總大小
0x01,//只包含一個(gè)接口
0x01,//該配置的編號(hào)
0x00,//iConfiguration字段
0x80,//采用總線供電,不支持遠(yuǎn)程喚醒
0xC8//從總線獲取最大電流400mA
},
//interface_descritor//接口描述符
{
sizeof(INTERFACE_DESCRIPTOR_STRUCT),//接口描述符的字節(jié)數(shù)大小,這里為9
INTERFACE_DESCRIPTOR,//接口描述符類(lèi)型編號(hào),接口描述符為3
0x00,//接口編號(hào)為4
0x00,//該接口描述符的編號(hào)為0
ENDPOINT_NUMBER,//非0端點(diǎn)數(shù)量為2,只使用端點(diǎn)主端點(diǎn)輸入和輸出
0x08,//定義為USB大容量存儲(chǔ)設(shè)備
0x06,//使用的子類(lèi),為簡(jiǎn)化塊命令
0x50,//使用的協(xié)議,這里使用單批量傳輸協(xié)議
0x00//接口描述符字符串索引,為0,表示沒(méi)有字符串
},

//endpoint_descriptor[]
{
{//主端點(diǎn)輸入描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端點(diǎn)描述符的字節(jié)數(shù)大小,這里為7
ENDPOINT_DESCRIPTOR,//端點(diǎn)描述符類(lèi)型編號(hào),端點(diǎn)描述符為5
MAIN_POINT_IN,//端點(diǎn)號(hào),主輸入端點(diǎn)
ENDPOINT_TYPE_BULK,//使用的傳輸類(lèi)型,批量傳輸
0x4000,//該端點(diǎn)支持的最大包尺寸,64字節(jié)
0x00//中斷掃描時(shí)間,對(duì)批量傳輸無(wú)效
},

{//主端點(diǎn)輸出描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端點(diǎn)描述符的字節(jié)數(shù)大小,這里為7
ENDPOINT_DESCRIPTOR,//端點(diǎn)描述符類(lèi)型編號(hào),端點(diǎn)描述符為5
MAIN_POINT_OUT,//端點(diǎn)號(hào),主輸出端點(diǎn)
ENDPOINT_TYPE_BULK,//使用的傳輸類(lèi)型,批量傳輸
0x4000,//該端點(diǎn)支持的最大包尺寸,64字節(jié)
0x00//中斷掃描時(shí)間,對(duì)批量傳輸無(wú)效
}
}
};

其中關(guān)于端點(diǎn)的類(lèi)型定義如下
//定義的端點(diǎn)類(lèi)型
#define ENDPOINT_TYPE_CONTROL0x00//控制傳輸
#define ENDPOINT_TYPE_ISOCHRONOUS0x01//同步傳輸
#define ENDPOINT_TYPE_BULK0x02//批量傳輸
#define ENDPOINT_TYPE_INTERRUPT0x03//中斷傳輸

端點(diǎn)號(hào)的定義如下
#define MAIN_POINT_OUT0x02//2號(hào)輸出端點(diǎn)
#define MAIN_POINT_IN0x82//2號(hào)輸入端點(diǎn)


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: USB描述符依賴關(guān)

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉