USB基础知识(下)

来源:互联网 发布:逆战刷帮豆软件手机版 编辑:程序博客网 时间:2024/05/29 07:33
 

问题八:在标准的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;        //主机查询端点的时间间隔

}

 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 机场没带身份证怎么办 儿童坐飞机没有户口本怎么办 不需要行李托运化妆品怎么办 坐飞机被限制了怎么办 坐飞机没买保险怎么办 飞机起飞时难受怎么办 婴儿坐飞机没座位怎么办 转机行李不直达怎么办 儿童自己坐飞机怎么办手续 两岁宝宝发烧怎么办 网上购票待核验怎么办 老人坐飞机找不到登机口怎么办 儿童不能值机怎么办 飞机上旅客刁难怎么办 飞机上婴儿哭闹怎么办 飞机上婴儿啼哭怎么办 飞机儿童陪护手续怎么办 孕妇感冒鼻子堵怎么办 孕妇用了眼药水怎么办 孕妇用眼药水了怎么办 错过了登机时间怎么办 过了登机时间怎么办 孩子不喜欢做作业怎么办 宝宝腿不一样粗怎么办 一个小腿肿了怎么办 左右小腿不一样粗怎么办 小孩不敢自己睡怎么办 小孩不一个人睡怎么办 晚上一个人睡觉害怕怎么办 孩子自己睡害怕怎么办 小孩晚上睡觉怕怎么办 小孩分房睡害怕怎么办 坐飞机不认识字怎么办 科目一不识字怎么办 孩子不自己睡觉怎么办 70岁老人坐高铁怎么办 八岁儿童怎么办护照 第一次坐飞机有点紧张怎么办 坐飞机恐高耳鸣怎么办 火车坐过站怎么办 凌晨的火车应该怎么办