usb学习笔记5

USB协议中7中常用的请求。

(1)如何设置usb设备的地址。设置usb设备地址的简略图如下:使用SET_ADDRESS命令:


(2)设置usb的配置与上图类似,只不过区别在于wValue的值为配置的值,bRequest的值为SET_CONFIGURATION。其余与上图一样。

(3)请求usb的设备描述符:


最后获得设备描述符成功。配置描述符的介绍:(以下表格转载自http://usb.baiheee.com/usb_article/usb_spec/usb_cmd_desc.html点击打开链接,并加入自己的理解。)

偏移量

大小

描述

0

bLength

1

数字

此描述表的字节数(这是固定的)

1

bDecriptorType

1

常量

描述符的类型(此处应为0x01,即设备描述符)(固定的)

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-IF组织赋值)

10

idProduct

2

ID

产品标志(由厂商赋值)

12

bcdDevice

2

BCD 码

设备发行号(BCD 码)

14

iManufacturer

1

索引

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

15

iProduct

1

索引

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

16

iSerialNumber

1

索引

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

17

bNumConfigurations

1

数字

可能的配置描述符数目(这个是比较重要的,hosT会根据这个来请求设备描述符)


设备的类别(bDeviceClass)
值(十进制)
值(十六进制)
说明
0
0x00
接口描述符中提供类的值
2
0x02
通信类
9
0x09
集线器类
220
0xDC
用于诊断用途的设备类
224
0xE0
无线通信设备类
255
0xFF
厂商定义的设备类


(4):请求配置描述符。

在获得了这个usb设备一共有多少个usb配置后,host开始请求usb的配置描述符。

USB配置描述符的结构

   偏移量

     域

 大小

   值

   描述

      0

bLength

1

   数字

此描述表的字节数长度。(固定的)

      1

bDescriptorType

1

   常量

配置描述表类型(此处为0x02)(固定的)

      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 为一个单位。


(5)字符串描述符。这是一种格式最简单的描述符,自然也最没有什么用的描述符。

格式如下:

USB字符串描述符(响应主机请求时返回的表示语言ID的字符串描述符)

偏移量

大小

     描述

0

bLength

1

N+2

此描述表的字节数(这个长度就不固定了。)

1

bDescriptorType

1

常量

字串描述表类型(此处应为0x03)(固定的)

2

wLANGID[0]

2

数字

语言标识(LANGID)
码0(在中国应该是固定的,中国的编码是:0x0804)

      

N

wLANGID[x]

2

数字

语言标识(LANGID)
码X



(6)接口描述符。

USB接口描述符的结构

偏移量

大小

说明

       0

bLength

1

数字

此表的字节数

       1

bDescriptorType

1

常量

接口描述表类(此处应为0x04)

       2

bInterfaceNumber

1

数字

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

       3

bAlternateSetting

1

数字

可选设置的索引值。

       4

bNumEndpoints

1

数字

此接口用的端点数量,如果是零则说明此接口只用缺省控制管道。(依据这个,然后host来读取端点配置)

       5

bInterfaceClass

        1

接口所属的类值: 
零值为将来的标准保留。 
如果此域的值设为FFH,则此接口类由厂商说明。 
所有其它的值由USB 说明保留。(类型的说明见下表)

       6

bInterfaceSubClass

        1

子类

子类码 
这些值的定义视bInterfaceClass域而定。
如果bInterfaceClass域的值为零则此域的值必须为零。 
bInterfaceClass域不为FFH则所有值由USB 所保留。

       7

bInterfaceProtocol

        1

协议

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

       8

iInterface

        1

索引

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



表11、USB协议定义的接口类别(bInterfaceClass)
值(十六进制)类别
0x01音频类
0x02CDC控制类
0x03人机接口类(HID)(鼠标键盘属于这一类)
0x05物理类
0x06图像类
0x07打印机类
0x08大数据存储类
0x09集线器类
0x0ACDC数据类
0x0B智能卡类
0x0D安全类
0xDC诊断设备类
0xE0无线控制器类
0xFE特定应用类(包括红外的桥接器等)
0xFF厂商定义的设备


(7)端点描述符。

端点是设备与主机之间进行数据传输的逻辑接口,除配置使用的端点0(控制端点,一般一个设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了数据的传输类型、传输方向、数据包大小和端点号(也可称为端点地址)等。

除了描述符中描述的端点外,每个设备必须要有一个默认的控制型端点,地址为0,它的数据传输为双向,而且没有专门的描述符,只是在设备描述符中定义了它的最大包长度。主机通过此端点向设备发送命令,获得设备的各种描述符的信息,并通过它来配置设备。

USB端点描述符的结构

偏移量

大小

说明

0

bLength

1

数字

此描述表的字节数长度(固定大小)

1

bDescriptorType

1

常量

端点描述表类(此处应为0x05)

2

bEndpointAddress

1

端点

此描述表所描述的端点的地址、方向: 
Bit 3..0 : 端点号.(可以看出最多有16个)
Bit 6..4 : 保留,为零 
Bit 7:    方向,如果控制端点则略。 
0:输出端点(主机到设备)(out) 
1:输入端点(设备到主机)(in)

3

bmAttributes

1

位图

此域的值描述的是在bConfigurationValue域所指的配置下端点的特性。
Bit 1..0 :传送类型 
00=控制传送 
01=同步传送 
10=批传送 
11=中断传送 
所有其它的位都保留。

4

wMaxPacketSize

2

数字

大小单位为字节,这个域规定这个端点可以接受的最大的包的长度。D0-D10指出最大的包长。D11-D12为每帧传输的次数(我还没有理解这是什么意思)。
 

6

bInterval

1

数字

周期数据传输端点的时间间隙。 
此域的值对于批传送的端点及控制传送的端点无意义。对于同步传送的端点此域必需为1,表示周期为1ms。对于中断传送的端点此域值的范围为1ms到255ms。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值