USB 协议及通讯过程
来源:互联网 发布:vmware linux上网设置 编辑:程序博客网 时间:2024/05/16 12:39
1. 查看[知识点]中的枚举过程.
2. 传输过程
USB中存在4种传输,分别是:
控制传输:主要用于在设备连接时对设备进行枚举以及其他因设备而已的特定操作。
中断传输:用于对延迟要求严格、小量数据的可靠传输,如键盘、游戏手柄等。
批量传输:用于对延迟要求宽松,大量数据的可靠传输,如U 盘等。
同步传输:用于对可靠性要求不高的实时数据传输,如摄像头、USB 音响等。
l 设备连接后发生控制传输, 由HOST 向USB设备通过地址0发出
SETUP包共8个字节,它的格式见USB 2.0规范(英文版).pdf的P248.
SETUP包的重点在bRequest字段,见英文版的P250. bRequest包括11种请示,这11种请示如下表
编号
请求
值
说明
1
CLEAR_FEATURE
1
2
GET_CONFIGURATION
8
获取配置描述符
3
GET_DESCRIPTOR
6
获取设备描述符
4
GET_INTERFACE
10
5
GET_STATUS
0
6
SET_ADDRESS
5
7
SET_CONFIGURATION
9
8
SET_DESCRIPTOR
7
9
SET_FEATURE
3
10
SET_INTERFACE
11
11
SYNCH_FRAME
12
l 发送时,LSB在前.比方说一个setup包
80 06 00 02 00 00 20 00
它的格式对应于Table 9-2. Format of Setup Data
offset
value
field
0
bmRequestType
0x80
1
bRequest
0x06
GET_DESCRIPTOR
2
wValue
0x0200(00 02 -> 00: LSB 02: MSB)
02: CONFIGURATION
00: descriptor index 为0
4
wIndex
0x0000
Language ID=0
6
wLength
0x0020(20 00 -> 20: LSB 00: MSB)
要返回0x20B
l HOST请求什么DEVICE就响应什么. 请求通过8Byte的setup包发送.共11个请求.
n 请求和响应的对应关系
这里要特别注意的是获取配置描述符请求的响应.它的结构体是这样安排的:
参考 英文版P254
struct configuration_response /* 配置描述符的响应*/
{
struct configuration_descriptor configuration_descriptor;
struct interface_descriptor interface_descritor;
struct endpoint_descriptor endpoint_descriptor[ENDPOINT_NUMBER];
};
也就是这样的格式:
struct configuration_response /* 配置描述符的响应*/
{
配置描述符
第一个接口描述符
第一个接口描述符的所有的端点描述符
第二个接口描述符
第二个接口描述符的所有的端点描述符
....
第n个接口描述符
第n个接口描述符的所有的端点描述符
};
如上 setup 包请求获取configuration descriptor.这时DEVICE的响应是:
09 02 20 00 01 01 00 80 32 09 04 00 00 02 08 06 50 00 07 05 81 02 00 02 ff 07 05 02 20 00 02 ff
09 02 20 00 01 01 00 80 32
09 04 00 00 02 08 06 50 00 07 05 81 02 00 02 ff 07 05 02 20 00 02 ff
配置
描述符
Table 9-10
英文版
P265
offset
field
value
0
bLength
0x09
1
bDescriptorType
0x02
CONFIGURATION
2
wTotalLength
0x0002
(20 00 -> 20: LSB 00: MSB)
4
bNumInterfaces
0x01
Language ID=0
5
bConfigurationValue
0x01
要返回0x20B
6
iConfiguration
0x00
7
bmAttributes
0x80
8
bMaxPower
0x32
2mA*0x32=100mA
接口
描述符
Table 9-12. Standard Interface Descriptor
P267
9
bLength
0x09
10
bDescriptorType
0x04
INTERFACE
11
bInterfaceNumber
0x00
12
bAlternateSetting
0x00
13
bNumEndpoints
0x02
14
bInterfaceClass
0x08
Mass Storage
15
bInterfaceSubClass
0x06
SCSI transparent command set
16
bInterfaceProtocol
0x50
USB Mass Storage Class Bulk-Only Transport
17
iInterface
0x00
第一个
端点
描述符
18
bLength
0x07
19
bDescriptorType
0x05
ENDPOINT
20
bEndpointAddress
0x81
////
21
bmAttributes
0x02
Bulk
22,23
wMaxPacketSize
0x0200(00, 02)
512B
24
bInterval
0xff
////
第二个
端点
描述符
25
bLength
0x07
26
bDescriptorType
0x05
ENDPOINT
27
bEndpointAddress
0x02
////
28
bmAttributes
0x02
Bulk
29,30
wMaxPacketSize
0x0200(00, 02)
512B
31
bInterval
0xff
描述符(Descriptor)
说到描述符,不得不提到setup包中的请求字段.请求共有11种,其中一种是GET_DESCRIPTOR.
描述符的类型(Descriptor Type)共有8种,如下表:
见英文版P251
每一种对应于一个结构体,分别在9.6.1到9.6.7中有详细定义.这里要揭示的是它们之间的关系.
如下图所示,设备描述符Device里面包含配置描述符Configuration,它里面又包含接口描述符Interface,最后是端点描述符EndPoint.这是一个树状结构.
为什么有这个结论呢,它们的结构体暗示了这种层次关系.
- USB 协议及通讯过程
- USB 通讯协议
- USB 通讯协议
- USB通讯协议
- windows 系统识别usb设备过程及usb协议简介
- USB的通讯协议(通俗易懂)
- http通讯协议过程
- 了解USB的通讯过程
- USB协议及认知
- 第2节 USB的通讯协议
- USB之(二)通讯协议
- SSL 协议通讯建立过程
- STM32F103系列USB的学习过程及使用心得(二)(USB HID协议篇)
- 嵌入式系统的通讯协议:I2C通讯、SPI通讯、USB通讯、SDIO 通讯、I2S通讯、PCI通讯简介
- USB的通讯的建立过程
- USB协议之一 枚举过程
- USB协议-设备识别过程
- MODBUS通讯协议及编程
- 去掉字符串中重复的字符
- [音乐]初音ミク タイムマシン「初音未来 时光机」
- linux 电源管理驱动编写
- gcc 编译问题
- 工业电导率仪
- USB 协议及通讯过程
- MySQL-Front
- linux 网络设置
- SAMBUS 共享
- ifcfg-eth0 配置
- 布隆过滤器(Bloom Filter)
- 读书时间 2011/11/20
- UC故事2011/11/20 - 1
- PHP自定义函数不能用外部变量