全部博文(26)
分类: LINUX
2009-10-09 23:41:39
usb设备描述符:
因为总线识别USB设备必须是经过总线枚举,通过枚举过程主机来识别和管理必要的设备状态变化。
USB总线枚举过程
设备连接
设备上电
主机检测到设备,并发出复位信号:使对应的端口可用
设备默认状态:(即通过00h来对设备进行寻址)
分配设备地址
读取设备描述符:(确认设备属性)****注意,此处用到了设备描述符
配置设备:主机依照读取设备描述符来配置设备,当设备请求的USB资源得到满足,主机就发送命令给USB设备,表示配置完毕
挂起:为了省电,当总线空闲3ms以后,设备驱动程序就会进入挂起状态,当驱动被挂起时,
USB设备保留了包括其地址和配置信息在内的所有信息
设备描述符给出了USB设备的一般信息,这包括对设备及设备配置起全程作用的信息
设备描述符给出了 设备类码,设备子类码,协议码,厂商标志,产品标志等
struct usb_device_descriptor{}
设备类码典型值如下:
#define USB_CLASS_PER_INTERFACE 0
#define USB_CLASS_AUDIO 1//声音设备
#define USB_CLASS_comm 2//调制解调设备,网卡,ISDN连接
#define USB_CLASS_HID 3//HID 设备,如鼠标键盘
#define USB_CLASS_*******等等,可以查看源代码
配置描述符
配置描述符给出了USB设备的配置信息,配置描述符包括一个bConfigurationValue域,
在Setconfiguration请求时被用作参数来设置所需配置。此描述符给出此配置下的接口数,
每个接口可能的独立操作。每个USB设备有一个或多个配置。每一个配置有一个或多个接口
。每个接口又有0个或多个端点。一个配置下端点不会在接口之间共享,除非同一个节点被同一个
接口下的不同配置使用。当主机发出请求时,要求获取配置描述符时,所有有关接口,端点的描述符都被返回。
接口描述符包括该接口的接口号,不同配置可选的索引值,此接口使用的端点数量
接口描述符在一个配置中给出一个接口的信息。一个接口可能包含被选设置,以使得端点配置好以后,还可以改变。
SetInterface()与GetInterface()用于选择与返回选择了的接口设置。
举例:一个设备配置只支持单个接口,这个借口有两个接口描述符,可以任选其一,
当配置描述符返回以后,后面会跟着第一个接口描述符(bInterfaceValue=0,bAlternateSetting=0
---------bAlternateSetting表示不同设备配置的可选的索引值)及它的相关端点和
第二个接口描述符(bInterfaceValue=0,bAlternateSetting=1)及它的相关端点
如果一个接口仅仅使用0端点,那么就区别于其他情况,不再返回端点描述符,
且此接口表示一个请求接口,同时使用0端点的默认通道
(此时bNumberEndpoints=0设置为0),接口含有的端点个数不把0端点包含在内。
端点描述符
每个端点都有自己的端点描述符,主机用该描述符来决定每个端口的带宽需求(即当前配置下,
此端点能够接收或者发送的最大数据包的大小),每个端点配置描述符总是作为配置描述符的一部分来返回
字串描述符(可有可无,若无,其他描述符中有关该项的字串描述符的索引都为0)
设备限定描述符
其他速度配置描述符