USB描述符举例

 设备描述符

  设备描述符给出了USB设备的一般信息。这包括设备及设备设置全程起作用的信息,一个USB设备只能有一个设备描述符。所有的USB设备都有缺省的控制管道,在设备描述符中给定了缺省控制管道最大包长度。      

  ROM USB_DEVICE_DESCRIPTOR device_dsc=

{ 0x12,    //BYTE bLength描述符长度

 0x01,     // BYTE bDescriptorType描述符类型固定 为 0x01  一个字节

 0x0200,   //WORD bcdUSB规范版本号(采用BCD码)

 0x00,    //BYTE bDeviceClass,类代码 表示所遵循的标准设备类0x01~0xfe为标准设//备类,0xff为厂商自定义类型 //0x00不是在设备描述符中定义的,如HID  为0时表示//设备的各个接口相互独立,在接口描述符中将进一步定义

 0x00,   //BYTE bDeviceSubClass对设备类更加细致定义 

 0x00,   //BYTE bDeviceProtocl协议代码,为0 表示不使用任何设备类协议

 8,     //BYTE bMaxPacketSize0端点0所支持的最大数据包长度,

0x04D8,   //WORD idVendor USB设备的供应商ID

0x003F,   //WORD idProduct USB产品ID

0x0002,   // BCD码表示USB设备的版本号,由供应商指定

0x01,    //WORD bcdDevice供应商字符串描述符索引值

0x02,    // BYTE iManufacturer产品字符串描述符索引值

0x00,    // BYTE iProduct USB设别序列号字符串描述符索引值,为0 表示没有  

0x01     // BYTE iSerialNumber USB设备所支持的配置数数

       };

 配置描述符

  配置描述符给出了设备配置的信息,描述表包括一个bConfigurationValue域,在SetConfiguration( )请求时作为参数来设置所需的配置备。此描述符给出了此配置下的接口数,每个接口可能独立操作。

ROM BYTE configDescriptor1[]={

0x09,    //BYTE bLength  配置描述符长度,固定为 0x09字节

0x02, //BYTE bDescriptorType USB描述符类型 固定为 02H 对应上面为0x12则为0x01

0x29,0x00,  //WORD wTotalLength 配置信息总长度,包括配置、接口、端点描述符

 1,      // BYTE bNumInterface 该配置所支持的接口数

 1,      //BYTE bConfigurationVale配置值Set_Configuration命令需要的参数值 

 0,      // BYTE iConfiguration字符串描述符索引值,为0 表示没有配置字符串

 0xe0,   //BYTE bmAttribute配置属性,供电模式的选择, see usb_device.h 第六位置 1//              //表示使用总线电源,第五位置 1 表示支持远程唤醒功能,其它为保留,一般         //0~4位置0,第七位置1,设为11100000b

50,        // BYTE MaxPower所需要的最大总线电流即设备从总线提取的最大电流单位          //2mA,最大500mA,设置为250

 

接口描述符

  接口描述符在一个配置内给出一个接口的信息,如果一个配置支持多个接口,端点的描述符会跟在接口描述符后被返回。接口描述符总是作为配置描述符的一部分返回的。SetInterface( )与GetInterface( )用来选择和返回选择了的接口设置。一个接口描述符的端点个数不把端点0计算在内。

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

 0x04,     // BYTE bDescriptorType  描述符类型编号

  0,        // BYTE bInterfaceNunber   接口的编号 

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

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

0x03,     // BYTE bInterfaceClass  接口类型,所属设备类,这里为HID类 

 0,      // BYTE bInterfaceSubClass   接口子类型如果设备类在1-FEH之间则需进一         //步表示设备子类

0,     // BYTE bInterfaceProtocol    接口所遵循的协议 

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

 HID 描述符

       除了标准的USB描述符,HID设备还必须支持HID描述符、报告描述符和物理描述符(可选)。HID描述符用于识别USB设备中包含的额外描述符例如报告描述符. 

 0x09,        //bLength描述符长度  sizeof(USB_HID_DSC)+3,   

 0x21,         //bDescriptorType 描述符类型:  HID = 0x21

 0x11,0x01,    //bcdHID   HID规范版本号(BCD码),此为1.11

 0x00,         //bCountryCode 国家代码 00 表示设备不是本土化的

 1,           // bNumDescriptor 支持的其他类描述符数量 see usbcfg.h

 0x22,         //bDescriptorType 报告描述符类型

 28,0x00,      //WDescriptorLength  报告描述符总长度sizeof(hid_rpt01),      

 端点描述符

  每个接口使用的端点都有自己的描述符,描述符被主机用来决定每个端点的带宽需求。每个端点的描述符总是作为设备设置描述的一部分返回,而控制端点0没有描述符。

/***************端点1 描述符 输入*********************/

0x07,   // BYTE bLength  设备描述符长度 字节数大小 *sizeof(USB_EP_DSC)

0x05,    // BYTE bDescriptorType  描述符类型编号

0x81,    // BYTE bEndpointAddress 端点号、传输方向,,第7位 表示端点的数据传输        //方向,0表示OUT数据传输,1表示IN数据传输,第0~3表示端口号001B         //表示端点1,。

0x03,   //端点特性,00B表示控制传输 01同步传输,10B块传输,11B 中断

0x40,0x00,    //WORD wMaxPacketSize  端点收、发的最大包的大小

0x01,         //BYTE bInterval   主机查询端点的时间间隔 ms

       /***************端点1描述符 输出*********************/

0x07,    //BYTE bLength

 0x05,    //Endpoint Descriptor

 0x01,     //EndpointAddress  0表示OUT输入

0x03,       //Attributes

0x40,0x00   //size

 0x01        //Interval

       };

 

转载于:https://www.cnblogs.com/markmin214/archive/2013/04/07/3006134.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值