您的位置:首页 > 其它

龙芯软件开发(34)- USB协议深入分析 设备描述符配置包

2007-04-10 13:45 435 查看
设备描述符配置包
在USB通讯里,从主控器发出来的第一个配置包就是设备描述符配置包,目的只有一个,就是获取插入的USB属性,以便加载合适的驱动程序。现在就来详细地分析一下设备描述符包的定义。
在USB2.0的协议里找到9.3 USB Device Requests里就找到这个结构的定义,这里我使用C的定义结构如下:
[align=left]typedef struct _USB_SETUP_PACKET [/align]
[align=left]{[/align]
[align=left] REQUEST_TYPE bmRequestType;[/align]
[align=left] BYTE bRequest;[/align]
[align=left] WORD_BYTE wValue;[/align]
[align=left] WORD_BYTE wIndex;[/align]
[align=left] WORD wLength;[/align]
} USB_SETUP_PACKET;

bmRequestType是包含有下面几方面的内容:
D7 D6 D5 D4 D3 D2 D1 D0
在这一个字节里,又按位分为:
D7位是表示后面传送数据的方向位。
当D7等于0时,表示后面的数据是从主控器发送到USB设备。在PC里,就是从PC机发送到USB的设备。
当D7等于1时,表示后面的数据是从USB设备发送到主控器。在PC里,就是从USB设备发送到USB设备。在上次里,我收到并显示出来的数据是80,就表示从USB设备里发送数据给PC。在这里再次给出上一次的包数据:
80 06 00 01 00 00 40 00
这里的80,就是D7位为1。

D6-D5位是请求主分类型
0 是表示标准的请求。
1 是表示类别的请求。
2 是表示厂商的请求。
3 是保留。

D4-D0位是表求接收这个包的接口。
0 是表示USB设备接收。
1 是表示接口接收。
2 是表示端点接收。
3 是表示其它接收,不知道的。
4-31是保留。

bRequest是本描述符的请求类型,也就是后面发送的数据是什么样的东西。由于USB里有很多配置信息,比如获取设备描述符,又有设置USB地址等等,就是通过这个字节来区分的。
从USB协议里查找表9-4,就可看到如下的编码:
[align=left]GET_STATUS 0[/align]
[align=left]CLEAR_FEATURE 1[/align]
[align=left]Reserved for future use 2[/align]
[align=left]SET_FEATURE 3[/align]
[align=left]Reserved for future use 4[/align]
[align=left]SET_ADDRESS 5[/align]
[align=left]GET_DESCRIPTOR 6[/align]
[align=left]SET_DESCRIPTOR 7[/align]
[align=left]GET_CONFIGURATION 8[/align]
[align=left]SET_CONFIGURATION 9[/align]
[align=left]GET_INTERFACE 10[/align]
[align=left]SET_INTERFACE 11[/align]
[align=left]SYNCH_FRAME 12[/align]
在上面的数据包里,看到它的内容是06,那么它就是GET_DESCRIPTOR类型。也就是主控器想读取USB设备的描述符,到这里就已经分析出来的意思,就是主控器想读取USB描述符,但还不知道是什么描述符的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: