usb鼠标枚举过程深度解析(中)

转载 2012年03月22日 10:25:13

转载自:

http://blog.csdn.net/woshixingaaa/archive/2011/05/03/6387488.aspx

Transfer3:

 

 

Transfer3是获得配置描述符。Transaction12是SETUP Transaction,要记住令牌包指明当前Transaction的类型,所以第一个Packet328包指明当前Transaction为SETUP事务。Packet329的数据域80表示数据是需要从device发向host的,06指明bRequest为GET_DESCRIPTOR,02表示的是CONFIGURATION,然后device回复了一个ACK握手包。Transaction13是一个IN型Transaction,令牌包Packet331指明该Transaction为IN类。下面分析一下Packet332的Data域,参照下图:

 

0x09表示配置描述符的长度为9个字节,0x02是描述符的类型,0x22是使用GET_DESCRIPTION请求时,返回的数据长度。也就是说对包括配置描述符,接口描述符,端点描述符,class-或vendor-specific描述符在内的所有描述符进行统计。0x01为bNumInterfaces表示接口的数目,0x01为bConfigurationValue,对拥有多个配置的USB设备来说,可以用SET_CONFIGURATION改变正在被使用的USB配置,bConfigurationValue指明了将要激活那个配置。iConfiguration为描述配置信息的字符串描述符的索引值,bmAttributes这个字段表示了配置的一些特点。Transaction14的DATA包的数据域就一个字节为0x32,MaxPower,表示设备正常运转时,从总线那里分得的最大电流值。Transaction15首先host向device发送了一个OUT包,表示这个Transaction是一个OUT类型,然后host向device发送了一个为0字节的包,device返回了一个ACK握手包。

Transfer4:

 

 

 

Transfer4获得了4个描述符。Transaction16是一个SETUP Transaction。Packet342的数据域80表示数据是需要从device发向host的,06指明bRequest为GET_DESCRIPTOR,02表示的是CONFIGURATION,然后device回复了一个ACK握手包。Transaction17获得的是配置描述符,最后一个MaxPower在Transaction18的Packet349的Data域中的第一个字节,注意这些数据是小端存放的。现在分析剩下的7个字节,0x09为bLength,是指描述符的长度;0x04为bDescriptorType,是指描述符的类型;0x00为bInterfaceNumber,是指接口号。0x00为bAlternateSetting,是指接口使用的是哪个可选设置;0x01为bNumEndpoints,接口拥有的端点数量;0x03为bInterfaceClass,0x01为bInterfaceSubClass,0x02为bInterfaceProtocol,0x00为iInterface,是接口描述符对应的字符串描述符的索引值。

 

HID(Human interface device)是人机接口设备,主要是指一些人与计算机进行交互的设备,如键盘,鼠标,游戏杆等;但是HID设备不一定非要是这些人机交互设备,只要符合HID设备级定义规范要求的都可以认为是HID设备。HID设备有以下主要优点:

1)  交换的数据存储在报告的结构内,设备必须支持HID报告格式。

2)  每笔事务可以携带小量或中量的数据。低速设备每笔最大为8字节,全速设备每笔最大为64字节,高速设备每笔最大为1024字节。

3)  有最大速度限制

4)  没有传输速度的保证

如下图,除了USB标准定义的一些描述符外,HID设备还必须定义HID描述符。另外设备和主机的通信是通过报告的形式来实现的,所以还必须定义报告描述符。USB的四种传输方式,HID只支持控制和中断传输方式。

 

 

现在分析Transaction20的DATA包的Data域,参照下图。0x07为bLength,表示描述符的长度;0x05为bDescriptorType,表示描述符的类型;0x81为bEndpointAddress,表示这个端点的方向,端点的地址,端点的端点号。0x03为bmAttributes,表示属性信息;0x0005为wMaxPacketSize,表示端点一次能够处理的最大字节数;0x0A为bInterval,表示希望主机轮询自己的间隔时间。

 


相关文章推荐

usb鼠标枚举过程深度解析(下)

转载自: http://blog.csdn.net/woshixingaaa/archive/2011/05/03/6387626.aspx Transfer5,Transfer6,Transfe...
  • sun_x_t
  • sun_x_t
  • 2012年03月22日 10:29
  • 1233

USB枚举过程介绍.pdf

  • 2010年05月26日 21:42
  • 107KB
  • 下载

USB枚举过程详细分析

  • 2017年02月10日 17:14
  • 214KB
  • 下载

Windows,Linux,Mac系统中,USB HID枚举过程的异同

http://www.crifan.com/order_windows_linux_mac_systems_usb_hid_similarities_and_differences_between_t...

USB枚举过程图解

  • 2014年07月17日 23:09
  • 1.2MB
  • 下载

USB枚举过程

  • 2013年11月21日 17:32
  • 962KB
  • 下载

usb枚举过程分析之hub_events

当守护程序第一次运行或usb port上状态发生变化,守护进程被唤醒都会运行hub_events函数,这个函数在usb系统中处理核心位置,usb的枚举过程就是由它完成,usb枚举过程流程图如图1所示;...

实例讲解USB的枚举(配置)过程

  • 2013年07月10日 13:31
  • 1.09MB
  • 下载

usb枚举详细过程

  • 2012年12月24日 15:56
  • 27KB
  • 下载

linux usb枚举过程分析

当守护程序第一次运行或usb port上状态发生变化,守护进程被唤醒都会运行hub_events函数,这个函数在usb系统中处理核心位置,usb的枚举过程就是由它完成,usb枚举过程流程图如图1所示;...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:usb鼠标枚举过程深度解析(中)
举报原因:
原因补充:

(最多只允许输入30个字)