设备描述符
设备描述符给出了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 };