USB 协议及通讯过程
2011-11-20 04:48
330 查看
1. 查看[知识点]中的枚举过程.
2. 传输过程
USB中存在4种传输,分别是:
控制传输:主要用于在设备连接时对设备进行枚举以及其他因设备而已的特定操作。
中断传输:用于对延迟要求严格、小量数据的可靠传输,如键盘、游戏手柄等。
批量传输:用于对延迟要求宽松,大量数据的可靠传输,如U 盘等。
同步传输:用于对可靠性要求不高的实时数据传输,如摄像头、USB 音响等。
l 设备连接后发生控制传输, 由HOST 向USB设备通过地址0发出
SETUP包共8个字节,它的格式见USB 2.0规范(英文版).pdf的P248.
SETUP包的重点在bRequest字段,见英文版的P250. bRequest包括11种请示,这11种请示如下表
l 发送时,LSB在前.比方说一个setup包
80 06 00 02 00 00 20 00
它的格式对应于Table 9-2. Format of Setup Data
l HOST请求什么DEVICE就响应什么. 请求通过8Byte的setup包发送.共11个请求.
n 请求和响应的对应关系
这里要特别注意的是获取配置描述符请求的响应.它的结构体是这样安排的:
参考 英文版P254
如上 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
描述符(Descriptor)
说到描述符,不得不提到setup包中的请求字段.请求共有11种,其中一种是GET_DESCRIPTOR.
描述符的类型(Descriptor Type)共有8种,如下表:
见英文版P251
每一种对应于一个结构体,分别在9.6.1到9.6.7中有详细定义.这里要揭示的是它们之间的关系.
如下图所示,设备描述符Device里面包含配置描述符Configuration,它里面又包含接口描述符Interface,最后是端点描述符EndPoint.这是一个树状结构.
为什么有这个结论呢,它们的结构体暗示了这种层次关系.
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 |
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 |
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个接口描述符的所有的端点描述符 }; |
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 |
说到描述符,不得不提到setup包中的请求字段.请求共有11种,其中一种是GET_DESCRIPTOR.
描述符的类型(Descriptor Type)共有8种,如下表:
见英文版P251
每一种对应于一个结构体,分别在9.6.1到9.6.7中有详细定义.这里要揭示的是它们之间的关系.
如下图所示,设备描述符Device里面包含配置描述符Configuration,它里面又包含接口描述符Interface,最后是端点描述符EndPoint.这是一个树状结构.
为什么有这个结论呢,它们的结构体暗示了这种层次关系.
相关文章推荐
- 图解USB协议之一 枚举过程
- USB开发基础--了解USB的通讯过程
- 第2节 USB的通讯协议
- USB协议之一 枚举过程
- 录入设备——51单片机设计思路及过程(2)——串口通讯协议
- USB上电过程 协议分析 初始化
- windows 系统识别usb设备过程及usb协议简介
- 如何快速掌握plc或工控机与其他设备的modbus通讯协议?包括格式与实际过程 RT,本人从事工控行业多年,对于PLC与触摸屏也算比较熟悉,唯独对这个通讯协议比较难理解,请教高人指导,从什么地方开始下手,或者是说如何正确理解报文格式或正确写入
- usb驱动开发之USB协议枚举过程详解
- 对私有工业通讯协议的破解过程
- USB之(二)通讯协议
- USB通讯的执行过程 - STM32 USB设计
- USB的通讯的建立过程
- USB1.1协议学习经验之2---- USB设备加载过程
- 图解USB协议之一 枚举过程【转】
- USB的通讯协议(通俗易懂)
- SSL 协议通讯建立过程
- PC与单片机USB(D12)数据通讯过程描述
- USB 通讯协议
- USB的通讯协议(通俗易懂)