原创 图解USB协议之三 USB标准描述符

2010-2-21 12:03 5491 11 12 分类: MCU/ 嵌入式

    最近忙于公司的项目和本人的驾驶证考试,拖延了这个系列第三篇的完成,先向各位支持我的DX表示一下歉意。不过好在驾驶证的蝴蝶桩考试顺利通过,自己先庆贺一下


0
嘿嘿。
   

这段时间做一个手持机的项目,第一次真正感受到了手头这个小设备的功力。事情是这样的:要将n年前写的基于51的固件代码移植到AVR,问题出现了….,枚举不成功!立刻想到用协议分析仪看看……(此处省略168字),结果当然是一目了然,几分钟轻松搞定!关于这次的经历,回头专门写一个帖子吧,先卖个关子,哈。

闲话少说,本篇图解USB标准描述符。

数据采集设备:HD-USB12 USB协议分析仪。

还是先复习一下USB协议的相关内容。USB通迅配置是通过描述符完成的,下面对USB标准描述符进行说明。

一、USB标准描述符
   1、标准设备描述符 
  


偏移量




大小




描述


0


bLength


1


数字


描述符的大小=12H


1


bDecriptorType


1


常量


设备描述符类型=01H


2


bcdUSB


2


BCD


此设备与描述符兼容的USB设备说明版本号(BCD 码)


4


bDeviceClass


1




设备类码

如果此域的值为0则一个设置下每个接口指出它自己的类,并个接口各自独立工作。

如果此域的值处于1~FEH之间,则设备在不同的接口上支持不同的类。并这些接口可能不能独立工作。此值指出了,这些接口集体的类定义。

如果此域设为FFH,则此设备的类由厂商定义。


5


bDeviceSubClass


1


子类


子类码

   这些码值的具体含义根据bDeviceClass 域来看。

   bDeviceClass 域为零,此域也须为零

bDeviceClass 域为FFH,此域的所有值保留。


6


bDevicePortocol


1


协议


协议码

   这些码的值视bDeviceClass bDeviceSubClass 的值而定。

     如果设备支持设备基础上的类相关的协议,此码标志了设备类说明上的值。

     如果此域的值为零,则此设备不在设备基础上支持设备类相关的协议。然而,它可能在接口基础上支持设备类相关的协议。

    如果此域的值为FFH,此设备使用厂商定义的协议。


7


bMaxPacketSize0


1


数字


端点0的最大包大小(仅8,16,32,64为合法值)


8


idVendor


2


ID


厂商标志(由USB标准付值)


10


idProduct


2


ID


产品标志(由厂商付值)


12


bcdDevice


2


BCD


设备发行号(BCD 码)


14


iManufacturer


1


索引


描述厂商信息的字串的索引。


15


iProduct


1


索引


描述产品信息的字串的索引。


16


iSerialNumber


1


索引


描述设备序列号信息的字串的索引。


17


bNumConfigurations


1


数字


可能的设置数


 

   2标准配置描述符   


偏移量




大小




描述


0


bLength


1


数字


描述符的大小=09H


1


bDescriptorType


1


常量


配置描述符类型=02H


2


wTotalLength


2


数字


此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述符)


4


bNumInterfaces


1


数字


此配置所支持的接口个数


5


bCongfigurationValue


1


数字


SetConfiguration()请求中用作参数来选定此配置。


6


iConfiguration


1


索引


描述此配置的字串描述符索引


7


bmAttributes


1


位图


配置特性:

D7 保留(设为一)

D6 自给电源

D5 远程唤醒

D4..0:保留(设为一)

一个既用总线电源又有自给电源的设备会在MaxPower域指出需要从总线取的电量。并设置D6为一。运行时期的实际电源模式可由GetStatus(DEVICE) 请求得到。


8


MaxPower


1


mA


在此配置下的总线电源耗费量。以 2mA 为一个单位。




 

   3标准接口描述符   


偏移量




大小




说明


0


bLength


1


数字


描述符的大小=09H


1


bDescriptorType


1


常量


接口描述符类型=04H


2


bInterfaceNumber


1


数字


接口号,当前配置支持的接口数组索引(从零开始)


3


bAlternateSetting


1


数字


可选设置的索引值。


4


bNumEndpoints


1


数字


此接口用的端点数量,如果是零则说明此接口只用缺省控制管道。


5


bInterfaceClass


1




类值

  零值为将来的标准保留。

  如果此域的值设为FFH,则此接口类由厂商说明。

  所有其它的值由USB 说明保留。


6


bInterfaceSubClass


1


子类


子类码

   这些值的定义视bInterfaceClass域而定。

如果bInterfaceClass域的值为零则此域的值必须为零。

bInterfaceClass域不为FFH则所有值由USB 所保留。


7


bInterfaceProtocol


1


协议


协议码:bInterfaceClass bInterfaceSubClass 域的值而定.如果一个接口支持设备类相关的请求此域的值指出了设备类说明中所定义的协议.


 


8


iInterface


1


索引


描述此接口的字串描述符的索引值。




 

   4标准端点描述符   


偏移量




大小




说明


0


bLength


1


数字


描述符的大小=07H


1


bDescriptorType


1


常量


端点描述符类型=05H


2


bEndpointAddress


1


端点


此描述符所描述的端点的地址。此地址的编码如下:

 Bit 3..0 : 端点号.

 Bit 6..4 : 保留,为零

 Bit 7:    方向,如果控制端点则略。

      0:出端点

      1:入端点


3


bmAttributes


1


位图


此域的值描述的是在bConfigurationValue域所指的配置下端点的特性。

   Bit 1..0 :传送类型

     00=控制传送

     01=同步传送

     10=批传送

     11=中断传送

所有其它的位都保留。


4


wMaxPacketSize


2


数字


当前配置下此端点能够接收或发送的最大数据包的大小。

  对与同步传送此值用于为每幀的数据净负荷预留时间。而通道可能在实际运行时不需要预留的带宽。实际带宽可由设备通过一种非USB定义的机制汇报给主机.

  对于中断传送,批传送,控制传送.端点可能发送较小的数据包。并且在结束传送后既有可能间隙时间来重启,也有可能不需要这段时间。具体请参照第五章。  


6


bInterval


1


数字


轮寻数据传送端点的时间间隙。

   此域的值对于批传送的端点及控制传送的端点忽略。对于同步传送的端点此域必需为1。对于中断传送的端点此域值的范围为1255




 

   5、语言描述符   


偏移量




大小




描述


0


bLength


1


N+2


描述符的大小


1


bDescriptorType


1


常量


字串描述符类型=03H


2


wLANGID[0]


2


数字


语言标识(LANGID)码0












N


wLANGID[x]


2


数字


语言标识(LANGID)码X




 

   6UNICODE字串描述符   


偏移量




大小




     描述


0


bLength


1


数字


描述符的大小


1


bDescriptorType


1


常量


字串描述符类型=03H


2


bString


N


数字


UNICODE 编码的字串



二、图解枚举过程中的描述符

   1、枚举成功后主机得到的第一个描述符(设备描述符),见图1

1

 (图1)(本数据由HD-USB12 USB协议分析仪采集)


 

a、 Index[38 - 44]:设备发送到主机的描述,详见图2

b、2为设备描述符,其各字段含义参考上面标准设备描述符。

2
(图2)(本数据由HD-USB12 USB协议分析仪采集)


 

   2、枚举成功后主机得到的第二个描述符(配置描述符),见图3

3
(图3)(本数据由HD-USB12 USB协议分析仪采集)


 

      aIndex[54 - 56]:设备发送到主机的描述,详见图4

      b、图4为配置描述符,其各字段含义参考上面标准配置描述符。


4
(图4)(本数据由HD-USB12 USB协议分析仪采集)


 

   3、随后为配置描述符、接口描述符及端点描述符见图5

5
(图5)(本数据由HD-USB12 USB协议分析仪采集)


 


 

      aIndex[67 - 78]:设备发送到主机的描述,详见图6、图7、图8及图9

      b、图6为配置描述符,其各字段含义参考上面标准配置描述符。

6
(图6)(本数据由HD-USB12 USB协议分析仪采集)


 

      c、图7为接口描述符,其各字段含义参考上面标准接口描述符。


7
(图7)(本数据由HD-USB12 USB协议分析仪采集)


 

      d、图8及图9为端点描述符,其各字段含义参考上面标准端点描述符。

8
(图8)(本数据由HD-USB12 USB协议分析仪采集)


9
(图9)(本数据由HD-USB12 USB协议分析仪采集)


 

     以上描述符不包括高速USB的描述符,如速度配置描述符等,详细请参考USB标准。

文章评论1条评论)

登录后参与讨论

用户237467 2010-3-2 14:53

相关推荐阅读
用户1136818 2010-08-20 12:12
图解高速USB握手过程
我们知道,USB全速外设(FS)和低速外设(LS)是通过在D+或D-数据线上上拉1.5K的电阻予以区别,D+上拉为全速外设,D-上拉为低速外设。高速外设的识别则比较复杂,需要通过主机与高速外设握手才能...
用户1136818 2010-03-18 11:31
图解USB协议之四 USB枚举失败常见原因分析
    本篇基于固件代码的开发及移植过程中可能引起的USB枚举失败的原因进行分析。 数据采集设备:“HD-USB12”全速/低速USB2.0协议分析仪 一、如图1所示的USB枚举失败   1)Inde...
用户1136818 2010-03-01 15:30
图解USB协议之四 USB枚举失败常见原因分析
    本篇基于固件代码的开发及移植过程中可能引起的USB枚举失败的原因进行分析。数据采集设备:“HD-USB12”全速/低速USB2.0协议分析仪一、如图1所示的USB枚举失败  1)Index[6...
用户1136818 2010-01-18 22:10
锂电池充电管理及BQ24070的应用
本人这段时间做一个手持机的项目,要用到单节锂电池供电。以前没有接触过锂电池充电管理方面的技术,花了几天时间研究了一番,现在汇报一下研究成果。由于第一次做这样的项目,也许存在错误,欢迎朋友们拍砖。   ...
用户1136818 2010-01-18 11:51
图解USB协议之二 数据包分析
       感谢朋友们对我发的上一个帖子《图解USB协议之一 枚举过程》的支持,虽然手头的项目比较忙,周末还是抽时间写了这个专题的第二篇,不能让大家失望啊,哈!    本篇分析数据包,仍然使用“HD...
我要评论
1
11
关闭 站长推荐上一条 /2 下一条