原创 USB协议深入分析_配置(转载)

2009-5-15 16:56 2593 0 分类: MCU/ 嵌入式

原载于:http://blog.csdn.net/caimouse/archive/2007/04/23/1575676.aspx


前面已经介绍设置USB的设备地址,接着下来是做什么呢?其实有了设备地址后,主控器还会再次发送获取上面已经读取的设备描述符下来,如下:

80 06 00 01 00 00 12 00

然后USB设备也再次回应它,但这次发送的长度是0x0012了,不再是第一次64个字节长度了。

接着USB设备就返回下面的描述符给主控器,也就是第一次已经发送的设备描述符,如下:

12 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01

 

这样分配地址之后,再次获取设备描述符成功了,接着下来就是主控器获取配置描述符。下面就是收到的配置描述符数据:

80 06 00 02 00 00 09 00

分析上面的数据如下:

bmRequestType是80,表示方向USB设备发送给主控器,接收设备是USB设备。

bRequest是06,表示这是获取描述符。GET_DESCRIPTOR         6

wValue是00 02。低字节表示偏移地址00,高字节表示描述符的类型。如下:

CONFIGURATION          2

所以这里的返回的设备描述符是配置描述符。

wIndex是00 00。

wLength是09 00。它表示返回描述符的长度。这里是9个字节。

接着下来,就是设备返回配置描述符给主控器,发送的数据如下:

09 02 22 00 01 01 00 01 32

发送的数据是按下面的结构来定义,这也是在USB协议里定义的格式。如下:

typedef struct _USB_CONFIGURATION_DESCRIPTOR {

 BYTE bLength;

 BYTE bDescriptorType;

 WORD wTotalLength;

 BYTE bNumInterfaces;

 BYTE bConfigurationValue;

 BYTE iConfiguration;

 BYTE bmAttributes;

 BYTE MaxPower;

} USB_CONFIGURATION_DESCRIPTOR;

 

bLength是配置的长度,也就是配置结构的整个长度。在这里9个字节。

bDescriptorType是描述符的类型,这里配置描述符,所以设置为02。

wTotalLength是所有配置设置的结构长度。包括配置描述符、接口描述符、HID或者其它描述符和端点描述符的长度。这里是22 00,也就是0x0022个字节。

bNumInterfaces是接口个数,这里一个。

bConfigurationValue是配置的个数,当设置配置时发送的值。这时设置为1个配置。

iConfiguration是说明配置的字符的偏移值。这里是0。

bmAttributes是配置特性,D7位保留。D6位是说明是否自供电。D5位是否支持远程唤醒。D4—D0是保留,设置为0。

MaxPower是使用的功率,它采用电流来表示。每2mA为单位,比如它的值是50时就表示是100mA的电流消耗。

通过这样说明,主控器就知道这个设备是什么样的设备,有多少功能。

文章评论0条评论)

登录后参与讨论
相关推荐阅读
haoran_flying 2009-05-20 20:45
Mega16+CH375硬件测试程序
前几天在做usbd12调试时不小心把12V电压接到5V上去了,烧了几个片子,D12也挂了,由天手头上没有D12了,再说手工焊接也挺麻烦的,上次买D12时顺便带了CH375。因为这一直都是用的AVR的片...
haoran_flying 2009-05-16 20:59
我做的OO的usb鼠标
  五一放假在家没事,逛到了END圈圈的USB专区,小组公告的那段话很实在。原来做的项目都是通过串口通讯,看来有时间还是要学习一下USB。  这段时间看了一下协议和其他的一些资料,还只是一个模糊的认识...
haoran_flying 2009-05-15 16:58
USB协议深入分析_字符串描述符(转载)
原载于:http://blog.csdn.net/caimouse/archive/2007/04/25/1584778.aspx上一次说到把配置描述符返回给主控器那里了,现在接着下来,就会收到主控器...
haoran_flying 2009-05-15 16:55
USB协议深入分析_设置USB地址(转载)
原载于:http://blog.csdn.net/caimouse/archive/2007/04/18/1568991.aspx前面已经解释主控器怎么样发送设备描述符下来,然后设备返回相应的设备描述...
haoran_flying 2009-05-15 16:53
USB协议深入分析_返回设备描述符(转载)
原载于:http://blog.csdn.net/caimouse/archive/2007/04/12/1561959.aspx 回应设备描述符上一次已经介绍怎么样收到主控器的获取设备描述符的数据,...
我要评论
0
0
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条