USB协议基础篇
这里写目录标题
一,从最常见的名词说起
1.1 USB协议版本
USB 1.0/1.1(low/full speed),传输速率最大为12Mbps
USB 2.0(high speed),传输速率最大480Mbps
USB 3.0(super speed),传输速率最大5Gbps
协议版本向下兼容
1.2 USB接口分类
Type A,即使我们电脑上的那种接口。
Type B,不太常见,比较方正的T型接口,有的嵌入式开发板会用。
Type C,现在开始流行起来了,最大的好处就是可以盲插,而不用区分正反。
Micro/mini,手机上比较常见。
不管哪种接口,用的线都是4根,只是形状不同而已。
1.4 PIPE
usb通信的最基本形式是通过USB设备里的endpoint,而主机和endpoit之间的数据传输就是通过pipe
1.5 endpoint
端点是有方向的,主机到从机成为out端点,从机到主机成为in端点。从这个说明看出端点是单方向的。(除了0端点)
1.6 管道通信方式
pipe中的数据通信方式有两种,一种是stream一种是message。message要求进出进出方向必须要求同一个管道,默认就使用ep0作为message管道
1.7 传输方式
USB endpiont有四种类型,分别对应了不同的数据传输方式,分别为control transfers控制传输、interrupt transfers中断传输、Bluk Data transfers批量传输、Isochronous Data Tranfers等时传输
控制传输通常用于配置设备,获取设备信息,发送命令到设备
1.7 逻辑设备
逻辑设备就是一系列端点的组合,逻辑设备与主机之间的通信发生在一个主机的缓冲区和设备的一个端点之间。
1.8 interface
一个逻辑设备可能包含若干个接口,每个接口包含1个或多个端点。每个接口表示一种功能。一个接口对应一个驱动程序。例如usb扬声器就包含一个键盘接口和一个音频流接口
1.9 class协议
USB协议中除了定义一些通用软硬件电气特性,还包含各种各样的class协议,用来为不同的功能定义各自的标准接口和具体总线上的数据交互内容和格式。例如u盘的Mass storage class、通用数据交换CDC class
1.10 host/device
二,USB框架/拓扑结构
USB架构中, hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告。在系统启动时,主机轮询它的根hub(Root Hub)的状态看是否有设备(包括子hub和子hub上的设备)连接。
三. 重要概念
3.1 描述符(description)
谈到USB描述符,不得不说USB最强悍的地方就在这里。一个口可以插很多的设备,可以插U盘、上网卡、音频设备、还有的是复合设备,一个设备插上后可以虚拟出多个设备出来
主设备之所以能区分不同的从设备,靠的就是描述符。 于是USB协议里就规定了各种不同的USB描述符。让我们先看一下USB协议里四大描述符之间的关系
+------设备描述符
+----------配置描述符1
+----------接口描述符1
+----------端点描述符1
+----------端点描述符2
+....
+----------接口描述符2
+----------端点描述符1
+....
+....
+----------配置描述符2
+----------接口描述符1
+----------端点描述符1
+----------端点描述符2
+....
+....
+....
3.1.1 设备描述(device description)
故名思意用来描述USB设备的,一个设备只有一个设备描述符,包含了设备类型、设备遵循的协议、厂商ID、产品id、序列号等,一个完整的设备描述符如下:
DEVICE DESCRIPTOR
bLength: 18
bDescriptorType: 0x01 (DEVICE)
bcdUSB: 0x0200
bDeviceClass: Vendor Specific (0xff)
bDeviceSubClass: 255
bDeviceProtocol: 255
bMaxPacketSize0: 64
idVendor: Marvell Semiconductor, Inc. (0x1286)
idProduct: Unknown (0x812a)
bcdDevice: 0x0000
iManufacturer: 3
iProduct: 2
iSerialNumber: 0
bNumConfigurations: 1
3.1.2 配置描述符(configrue description)
配置描述就是用来配置设备的,没错,就是这么简单。但是要记住一点:一个设备同一时刻只能有一种配置生效,而且要区分配置和设置的区别。还是来看一下配置描述符的内容
CONFIGURATION DESCRIPTOR
bLength: 9
bDescriptorType: 0x02 (CONFIGURATION)
wTotalLength: 121
bNumInterfaces: 4
bConfigurationValue: 1
iConfiguration: 0
Configuration bmAttributes: 0xc0 SELF-POWERED NO REMOTE-WAKEUP
1... .... = Must be 1: Must be 1 for USB 1.1 and higher
.1.. .... = Self-Powered: This device is SELF-POWERED
..0. .... = Remote Wakeup: This device does NOT support remote wakeup
bMaxPower: 250 (500mA)
3.1.3 接口描述符(interface description)
一个interface就代表一个设备。USB interface用来处理一类 USB 逻辑连接, 例如一个鼠标, 一个键盘, 或者一个音频流. 一些 USB 设备有多个接口。也就是复合设备,例如一个 USB 扬声器可能有 2 个接口: 一个 USB 键盘给按钮和一个 USB 音频流。
INTERFACE DESCRIPTOR (2.0): class Vendor Specific
bLength: 9
bDescriptorType: 0x04 (INTERFACE)
bInterfaceNumber: 2
bAlternateSetting: 0
bNumEndpoints: 2
bInterfaceClass: Vendor Specific (0xff)
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 8
一个interface包含多个endpoint