新闻中心

EEPW首页>嵌入式系统>设计应用> USB的描述符及各种描述符之间的依赖关系

USB的描述符及各种描述符之间的依赖关系

作者: 时间:2016-12-15 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/201612/330287.htm

2.接口描述符

//定义标准的接口描述符结构

typedef struct _INTERFACE_DESCRIPTOR_STRUCT
{
BYTE bLength;//接口描述符的字节数大小
BYTE bDescriptorType;//接口描述符的类型编号
BYTE bInterfaceNumber;//该接口的编号
BYTE bAlternateSetting;//备用的接口描述符编号
BYTE bNumEndpoints;//该接口使用的端点数,不包括端点0
BYTE bInterfaceClass;//接口类型
BYTE bInterfaceSubClass;//接口子类型
BYTE bInterfaceProtocol;//接口遵循的协议
BYTE iInterface;//描述该接口的字符串索引值
}
INTERFACE_DESCRIPTOR_STRUCT, * pINTERFACE_DESCRIPTOR_STRUCT;

4.端点描述符

//定义标准的端点描述符结构

typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
{
BYTE bLegth;//端点描述符字节数大小
BYTE bDescriptorType;//端点描述符类型编号
BYTE bEndpointAddress;//端点地址及输入输出属性
BYTE bmAttributes;//端点的传输类型属性
WORD wMaxPacketSize;//端点收、发的最大包大小
BYTE bInterval;//主机查询端点的时间间隔
}
ENDPOINT_DESCRIPTOR_STRUCT, * pENDPOINT_DESCRIPTOR_STRUCT;

下面是一个配置描述符集合的定义
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),//配置描述符的字节数大小,这里为9
CONFIGURATION_DESCRIPTOR,//配置描述符类型编号,配置描述符为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,//只包含一个接口
0x01,//该配置的编号
0x00,//iConfiguration字段
0x80,//采用总线供电,不支持远程唤醒
0xC8//从总线获取最大电流400mA
},
//interface_descritor//接口描述符
{
sizeof(INTERFACE_DESCRIPTOR_STRUCT),//接口描述符的字节数大小,这里为9
INTERFACE_DESCRIPTOR,//接口描述符类型编号,接口描述符为3
0x00,//接口编号为4
0x00,//该接口描述符的编号为0
ENDPOINT_NUMBER,//非0端点数量为2,只使用端点主端点输入和输出
0x08,//定义为USB大容量存储设备
0x06,//使用的子类,为简化块命令
0x50,//使用的协议,这里使用单批量传输协议
0x00//接口描述符字符串索引,为0,表示没有字符串
},

//endpoint_descriptor[]
{
{//主端点输入描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端点描述符的字节数大小,这里为7
ENDPOINT_DESCRIPTOR,//端点描述符类型编号,端点描述符为5
MAIN_POINT_IN,//端点号,主输入端点
ENDPOINT_TYPE_BULK,//使用的传输类型,批量传输
0x4000,//该端点支持的最大包尺寸,64字节
0x00//中断扫描时间,对批量传输无效
},

{//主端点输出描述
sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端点描述符的字节数大小,这里为7
ENDPOINT_DESCRIPTOR,//端点描述符类型编号,端点描述符为5
MAIN_POINT_OUT,//端点号,主输出端点
ENDPOINT_TYPE_BULK,//使用的传输类型,批量传输
0x4000,//该端点支持的最大包尺寸,64字节
0x00//中断扫描时间,对批量传输无效
}
}
};

其中关于端点的类型定义如下
//定义的端点类型
#define ENDPOINT_TYPE_CONTROL0x00//控制传输
#define ENDPOINT_TYPE_ISOCHRONOUS0x01//同步传输
#define ENDPOINT_TYPE_BULK0x02//批量传输
#define ENDPOINT_TYPE_INTERRUPT0x03//中断传输

端点号的定义如下
#define MAIN_POINT_OUT0x02//2号输出端点
#define MAIN_POINT_IN0x82//2号输入端点


上一页 1 2 下一页

关键词:USB描述符依赖关

评论


技术专区

关闭