Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177902
  • 博文数量: 34
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 374
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-30 10:46
文章分类

全部博文(34)

文章存档

2018年(5)

2015年(13)

2014年(13)

2013年(3)

我的朋友

分类: 嵌入式

2015-06-15 15:42:07

四种usb描述符:设备描述符,配置描述符,接口描述符和端点描述符。还有另外一种描述符:字符描述符

协议里规定一个usb设备是必须支持这四大描述符的,字符描述符可有可无。
这些描述符信息存放在何处:当然是在设备里。等待主机访问读取。通常usb设备中会有eeprom,这些描述符信息 即存放在这里。

我们由上一篇文章 Linux--usb(6)usb_interface 知道一个接口可以有多个设置,使用不同的设置,描述接口的信息会有些不同,所以接口描述符并没有放在struct usb_interface结构里,而是放在表示接口设置的struct usb_host_interface结构里



Linux--usb(6)usb_interface
 中我们详解了各元素含义,其中的 struct usb_host_interface *altsetting;我们解读为当前接口设置。

struct usb_host_interface {
struct usb_interface_descriptor desc;   // usb 接口描述符,保存了usb设备的各种属性还有相关信息。此描述符结构体定义也在本文中粘贴了。
int extralen;           //额外描述符长度
unsigned char *extra;   /* Extra descriptors */  // 额外描述符。 厂商为设备特别定义的描述符

/* array of desc.bNumEndpoints endpoints associated with this
* interface setting.  these will be in no particular order.
*/
struct usb_host_endpoint *endpoint; // 一个数组,表示这个设置所使用到端点.

char *string; /* iInterface string, if present */ // 设备接口字符描述符,字符串描述符可有可无,那这里的指针也有可能为空
}

usb接口描述符结构体:
struct usb_interface_descriptor {
__u8  bLength;   // 描述符的字节长度#define USB_DT_INTERFACE_SIZE           9
__u8  bDescriptorType;  // bDescriptorType,描述符的类型, 对于接口描述符来说,值为USB_DT_INTERFACE,也就是0x04。描述符类型在文件linux\usb\ch9.h
                                  // 中定义。
__u8  bInterfaceNumber; // 接口号。每个配置可以包含多个接口,这个值就是它们的索引值
__u8  bAlternateSetting; // 接口使用的是哪个可选设置。协议里规定,接口默认使用的设置总为0号设置
__u8  bNumEndpoints; // 接口拥有的端点数量,不包括端点0.
__u8  bInterfaceClass;  // 接口类值,由这个值 可知接口属于哪一个usb接口类。eg:mass storage Class就是0x08hubClass就是0x09
__u8  bInterfaceSubClass; // 接口子类值,由这个值可知属于接口类下的哪一个子类。
__u8  bInterfaceProtocol; // 接口遵循的协议编号值。
__u8  iInterface;  // 接口对应的字符串描述符的索引值,这个字符串描述符却是可有可无.字符串描述符主要就是提供一些设备接口相关的描述性信息,比如厂商的名字,产
             //品序列号等等。字符串描述符当然可以有多个,这里的索引值就是用来区分它们的。

} __attribute__ ((packed));  // __attribute__,意思就是告诉编译器,这个结构的元素都是1字节对










阅读(4851) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~