USB基础知识(下)

 

问题八:在标准的USB请求命令中,经常会看到Descriptor,这是什么来的呢?

回答八:Descriptor即描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送这些信息的。它的作用就是通过如问答节中的命令操作来给主机传递信息,从而让主机知道设备具有什么功能、属于哪一类设备、要占用多少带宽、使用哪类传输方式及数据量的大小,只有主机确定了这些信息之后,设备才能真正开始工作,所以描述符也是十分重要的部分,要好好掌握。标准的描述符有5种,USB为这些描述符定义了编号:

1——设备描述符

2——配置描述符

3——字符描述符

4——接口描述符

5——端点描述符

上面的描述符之间有一定的关系,一个设备只有一个设备描述符,而一个设备描述符可以包含多个配置描述符,而一个配置描述符可以包含多个接口描述符,一个接口使用了几个端点,就有几个端点描述符。这间描述符是用一定的字段构成的,分别如下说明:

1、设备描述符

struct _DEVICE_DEscriptOR_STRUCT

{

 BYTE bLength;          //设备描述符的字节数大小,为0x12

 BYTE bDescriptorType;  //描述符类型编号,为0x01

 WORD bcdUSB;           //USB版本号

 BYTE bDeviceClass;     //USB分配的设备类代码,0x01~0xfe为标准设备类,0xff为厂商自定义类型

                        //0x00不是在设备描述符中定义的,如HID

    BYTE bDeviceSubClass;   //usb分配的子类代码,同上,值由USB规定和分配的

    BYTE bDeviceProtocl;    //USB分配的设备协议代码,同上

    BYTE bMaxPacketSize0;   //端点0的最大包的大小

    WORD idVendor;          //厂商编号

    WORD idProduct;         //产品编号

    WORD bcdDevice;         //设备出厂编号

    BYTE iManufacturer;     //描述厂商字符串的索引

    BYTE iProduct;          //描述产品字符串的索引

    BYTE iSerialNumber;     //描述设备序列号字符串的索引

    BYTE bNumConfiguration; //可能的配置数量   

}

2、配置描述符

struct _CONFIGURATION_DEscriptOR_STRUCT

{

 BYTE bLength;          //设备描述符的字节数大小,为0x12

 BYTE bDescriptorType;  //描述符类型编号,为0x01

 WORD wTotalLength;     //配置所返回的所有数量的大小

 BYTE bNumInterface;    //此配置所支持的接口数量

 BYTE bConfigurationVale;   //Set_Configuration命令需要的参数值

 BYTE iConfiguration;       //描述该配置的字符串的索引值

 BYTE bmAttribute;          //供电模式的选择

 BYTE MaxPower;             //设备从总线提取的最大电流

}

3、字符描述符

struct _STRING_DEscriptOR_STRUCT

{

 BYTE bLength;          //设备描述符的字节数大小,为0x12

 BYTE bDescriptorType;  //描述符类型编号,为0x01

 BYTE SomeDescriptor[36];          //UNICODE编码的字符串

}

4、接口描述符

struct _INTERFACE_DEscriptOR_STRUCT

{

 BYTE bLength;          //设备描述符的字节数大小,为0x12

 BYTE bDescriptorType;  //描述符类型编号,为0x01

 BYTE bInterfaceNunber; //接口的编号

 BYTE bAlternateSetting;//备用的接口描述符编号

 BYTE bNumEndpoints;    //该接口使用端点数,不包括端点0

 BYTE bInterfaceClass;  //接口类型

 BYTE bInterfaceSubClass;//接口子类型

 BYTE bInterfaceProtocol;//接口所遵循的协议

 BYTE iInterface;        //描述该接口的字符串索引值

}

5、端点描述符

struct _ENDPOIN_DEscriptOR_STRUCT

{

 BYTE bLength;          //设备描述符的字节数大小,为0x12

 BYTE bDescriptorType;  //描述符类型编号,为0x01

 BYTE bEndpointAddress; //端点地址及输入输出属性

 BYTE bmAttribute;      //端点的传输类型属性

 WORD wMaxPacketSize;   //端点收、发的最大包的大小

 BYTE bInterval;        //主机查询端点的时间间隔

}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值