USB描述符

来源:互联网 发布:mvp 网络请求 编辑:程序博客网 时间:2024/05/16 16:08

http://blog.csdn.net/kingbeful/article/details/638612

标识域

数据包类型

标识域名称

标识符值PID[3:0]

标识域意义

令牌包

输出(OUT

0001

启动一个方向为主机到设备的数据传输,并且包含了设备地址和端点信号

输入(IN

1001

启动一个方向为设备到主机的数据传输,并且包含了设备地址和端点信号

帧起始(SOF

0101

表示一个帧的开始,并且包含了相应的帧号

设置(SETUP

1101

启动一个方向为通过控制传输管道进行的数据传输,并且包含了设备地址和端点信号

数据包

数据0DATA0

0011

偶数据包

数据1DATA1

1011

奇数据包

握手包

确认(ACK

0010

接收到没有错误的数据包

无效(NAK

1010

接收端无法接收或发送端无法发送数据

错误(STALL

1110

端点被禁止或不支持控制管道请求

特殊包

前导(PRE

1100

用于启动下行端口的低速设备的数据传输

 

完整的PID

标识域名称

标识符值(二进制)

标识符值(十六进制)

OUT

1000 0111

0x87

IN

1001 0110

0x96

SOF

1010 0101

0xa5

SETUP

1011 0100

0xb4

DATA0

1101 0010

0xc3

DATA1

1101 0010

0xd2

ACK

0100 1011

0x4b

NAK

0101 1010

0x5a

STALL

0111 1000

0x78

PRE

0011 1100

0x3c

 

令牌包

8bit

8bit

7bit

4bit

5bit

SYNC

PID

ADDR

ENDP

CRC5

 

INOUTSETUP包的数据格式

 

数据包

8bit

8bit

0~1023Byte

5bit

SYNC

PID

DATA

CRC5

 

数据包DATA0DATA1的数据格式

 

握手包

8bit

8bit

SYNC

PID

 

确认包ACK:用于表示数据包被成功接收,具体说

l         标识域PID被正确接收

l         并没有发生数据位错误

l         没有发生数据域的CRC校验错误

 

无效包NAK:属于暂态,设备结束“忙”后,就会处于空闲,主要应用于2种场合

l         接到主机发送的OUT命令后,设备无法接收数据

l         接到主机发送的IN命令后,设备没有数据发送给主机

 

错误包STALL:主要应用于3种场合

l         设备无法发送数据

l         设备无法接收数据

l         不支持某一种控制管道的命令

 数据传输类型 

数据传输类型

支持设备类型

包含的基本事务

低速

全速

高速

IN

OUT

SETUP

中断传输

×

批量传输

×

×

同步传输

×

×

控制传输

 写不动了,明天再补吧

//-------------------------------------------------//

//-------------以下为3月26日补充-------------//

标准USB描述符

l         设备描述符(Device Descriptor

l         配制描述符(Configuration Descriptor

l         接口描述符(Interface Descriptor

l         端点描述符(Endpoint Descriptor

l         字符描述符(String Descriptor,可选)

 

USB描述符编号

编号

描述符类型

1

设备描述符

2

配置描述符

3

接口描述符

4

端点描述符

5

字符描述符

 

 

设备描述符的字段组成

偏移量

字段名称

长度(字节)

字段值

意义

0

bLength

1

数字

设备描述符的字节数大小

1

bDescriptorType

1

常数

设备描述符类型编号

2

bcdUSB

2

BCD

USB版本号

4

bDeviceClass

1

USB分配的设备类代码

5

bDeviceSubClass

1

子类

USB分配的子类代码

6

bDeviceProtocol

1

协议

USB分配的设备协议代码

7

bMaxPacketSize0

1

数字

端点0的最大包的大小

8

idVendor

2

ID编号

厂商编号

10

idProduct

2

ID编号

产品编号

12

bcdDevice

2

BCD

设备出厂编号

14

iManufacturer

1

索引

描述厂商字符串的索引

15

iProduct

1

索引

描述产品字符串的索引

16

iSerialNumber

1

索引

描述设备序列号字符串的索引

17

bNumConfigurations

1

索引

可能的配制数量

 

字段名称

说明

bLength

0x12

bDescriptorType

0x01

bcdUSB

USB1.1->0x0110

USB2.0->0x0200

bDeviceClass

USB标准设备类:0x00~0xfe

厂商定义设备类:0xff

bDeviceSubClass

USB标准设备子类:0x00~0xfe

厂商定义设备子类:0xff

bDeviceProtocol

USB标准设备协议:0x00~0xfe

厂商定义设备协议:0xff

bMaxPacketSize0

低速:0x08

全速:0x080x100x200x40

高速:0x40

idVendor

厂商从USB IF获得的ID

idProduct

厂商定义的产品ID

bcdDevice

厂商定义设备出厂编号(版本号)

iManufacturer

0表示没有使用该字段

iProduct

0表示没有使用该字段

iSerialNumber

每个设备都有一个特定的序列号,供主机识别不同的设备

bNumConfigurations

该设备总共支持的配置描述符的数量

 

配置描述符的字段组成

 

偏移量

字段名称

长度(字节)

字段值

意义

0

bLength

1

数字

配置描述符的字节数大小

1

bDescriptorType

1

常数

配置描述符类型编号

2

wTotalLength

2

数字

此配置所返回的所有数据大小

4

bNumInterfaces

1

数字

此配置所支持的接口数量

5

bConfigurationValue

1

数字

Set_Configuration命令需要的参数值

6

iConfiguration

1

索引

描述该配制的字符串的索引值

7

bmAttributes

1

位图

供电模式的选择

8

MaxPower

1

mA

设备从总线提取的最大电流

 

字段名称

说明

bLength

0x09

bDescriptorType

0x02

wTotalLength

返回的所有描述符(配置、接口和端点)的数据大小总和

bNumInterfaces

 

bConfigurationValue

可被Get_ConfigurationSet_Configuration命令调用

iConfiguration

0表示没有使用字符串描述该配置

bmAttributes

D7=1,固定(保留);

D6=1自供电,D6=0总线供电;

D5=1支持远程唤醒,D5=0不支持;

D4D3D2D1D0 =00000,固定

MaxPower

最大电流=2* MaxPower(mA),且必须<500mA(总线供电最大值),否则此配置会被主机禁止

 

接口描述符的字段组成

 

偏移量

字段名称

长度(字节)

字段值

意义

0

bLength

1

数字

接口描述符的字节数大小

1

bDescriptorType

1

常数

接口描述符类型编号

2

bInterfaceNumber

1

数字

该接口的编号

3

bAlternateSetting

1

数字

备用的接口描述符编号

4

bNumEndpoints

1

数字

接口使用的端点数,不含端点0

5

bInterfaceClass

1

接口类型

6

bInterfaceSubClass

1

子类

接口子类型

7

bInterfaceProtocol

1

协议

接口遵循的协议

8

iInterface

1

索引

描述该接口的字符串的索引值

 

字段名称

说明

bLength

0x09

bDescriptorType

0x04

bInterfaceNumber

默认值:0

bAlternateSetting

一个接口可以有多个接口描述符

bNumEndpoints

若为0 表示该接口只使用了端点0

bInterfaceClass

USB接口类:0x01~0xfe,0x00保留

厂商定义接口类:0xff

bInterfaceSubClass

USB接口子类:0x01~0xfe,0x00保留

厂商定义接口子类:0xff

bInterfaceProtocol

与bInterfaceClass和bInterfaceSubClass相关

0x00:接口不遵循任何类协议

0x01~0xfe:USB不同标准设备类的协议

0xff:接口应用了厂商定义的类协议

iInterface

0表示没有使用字符串描述

端点描述符的字段组成

 

偏移量

字段名称

 度(字节)

字段值

意义

0

bLength

1

数字

端点描述符的字节数大小

1

bDescriptorType

1

常数

端点描述符类型编号

2

bEndpointAddress

1

端点

端点地址及输入输出属性

3

bmAttributes

1

位图

端点的传输类型属性

4

wMaxPacketSize

2

数字

端点收发的最大包的大小

6

bInterval

1

数字

主机查询端点的时间间隔

 

字段名称

说明

bLength

0x07

bDescriptorType

0x05

bEndpointAddress

D7=1输出OUT端点,D7=0输入IN端点;

D6D5D4=000,固定(保留);

D3D2D1D0:表示该端点端点号

bmAttributes

D1D0=00控制传输,

D1D0=01同步传输,

D1D0=10批量传输,

D1D0=11中断传输,

D7D6D5D4D3D2USB1.1中保留,USB2.0有新含意

wMaxPacketSize

D10~D0为有效内容,且范围是0~1023

D 15~D11 USB1.1中保留,值为0

bInterval

中断端点:1~255,时间单位m S

同步端点:1

批量端点和控制端点:忽略

 

字符串描述符的字段组成

 

偏移量

字段名称

 度(字节)

字段值

意义

0

bLength

1

数字

字符串描述符的字节数大小

1

bDescriptorType

1

常数

字符串描述符类型编号

2

bEndpointAddress

N

数字

Unicode编码的字符串

 

字段名称

说明

bLength

2+N

bDescriptorType

0x03

bEndpointAddress

 

标准USB请求命令的格式

偏移量

0

1

2

4

6

请求

bmRequestType

bRequest

wValue

wIndex

wLength

大小

1字节

1字节

2字节

2字节

2字节

 

bmRequestType

 

描述

说明

D7

选择数据传输方向

D7=0,主机->从机;D7=1,从机->主机,

D6

命令类型

D6 D5=00,标准请求命令;D6D5=01,类请求命令;

D6 D5=10,用户定义请求命令;D6D5=11,保留;

D5

D4

命令接收者的类型

D4D3D2D1D0=00000,接收者为设备

D4D3D2D1D0=00001,接收者为接口

D4D3D2D1D0=00010,接收者为端点

D4D3D2D1D0=00011,其他接收者

D4D3D2D1D0=其他,保留

D3

D2

D1

D0

 

bRequest

标准请求命令的编号

请求命令名称

编号(bRequest字段的值)

GET_STATUS

0x00

CLEAR_FEATURE

0x01

SET_FEATURE

0x03

SET_ADDRESS

0x05

GET_DESCRIPTOR

0x06

SET_DESCRIPTOR

0x07

GET_CONFIGURATION

0x08

SET_CONFIGURATION

0x09

GET_INTERFACE

0x0A

SET_INTERFACE

0x0B

SYNC_FRAME

0x0C

 

GET_STATUS

字段

bmRequestType

bRequest

wValue

wIndex

wLength

Data

内容

0x80

0x81

0x82

0x00

0

0

bInterfaceNumber

bEndpointAddress

2

设备、接口或端口的状态

 

CLEAR_FEATURE

字段

bmRequestType

bRequest

wValue

wIndex

wLength

Data

内容

0x00

0x01

0x02

0x01

特性选择器

0

bInterfaceNumber

bEndpointAddress

0

 

特性选择器

选择器特性

接收者

wValue的值

说明

DEVICE_REMOTE_WAKEUP

设备

1

禁用

ENDPOINT_HALT

端点

0

解禁

注:由于接收者不同,此字段的值要与bmRequestType字段的值匹配

 

SET_FEATURE

字段

bmRequestType

bRequest

wValue

wIndex

wLength

Data

内容

0x00

0x01

0x02

0x03

特性选择器

0

bInterfaceNumber

bEndpointAddress

0

注:特性选择器用法与CLEAR_FEATURE相同,只是在禁用和解禁方面是相反的

 

SET_ADDRESS

字段

bmRequestType

bRequest

wValue

wIndex

wLength

Data

内容

0x00

0x05

主机分配的设备地址

0

0

 

GET_DESCRIPTOR

字段

bmRequestType

bRequest

wValue

wIndex

wLength

Data

内容

0x80

0x06

High byte: bDescriptorType

Low byte: iDescriptor

0(设备、配置)或语言ID(字符串)

描述符长度

描述符

 

SET_DESCRIPTOR

字段

bmRequestType

bRequest

wValue

wIndex

wLength

Data

内容

0x00

0x07

High byte: bDescriptorType

Low byte: iDescriptor

0(设备、配置)或语言ID(字符串)

描述符长度

描述符

 

GET_CONFIGURATION

字段

bmRequestType

bRequest

wValue

wIndex

wLength

Data

内容

0x80

0x08

0

0

1

bConfigurationValue

 

SET_CONFIGURATION

字段

bmRequestType

bRequest

wValue

wIndex

wLength

Data

内容

0x00

0x09

bConfigurationValue

0

0

 

GET_INTERFACE

字段

bmRequestType

bRequest

wValue

wIndex

wLength

Data

内容

0x81

0x0A

0

bInterfaceNumber

1

bAlternateSetting

 

 SET_INTERFACE

字段

bmRequestType

bRequest

wValue

wIndex

wLength

Data

内容

0x01

0x0B

bAlternateSetting

bInterfaceNumber

0

 

SYNC_FRAME

字段

bmRequestType

bRequest

wValue

wIndex

wLength

Data

内容

0x82

0x0C

0

bEndpointAddress

2

帧号