USB协议
-
USB的基本规范
-
USB1.0/1.1 Low Speed 1.5Mbit/s :键盘、鼠标等
………………Full speed 12Mbit/s: U盘、CD-ROM -
USB2.0 Highspeed 480Mbit/s:音频设备,显示器等
-
USB OTG Device to Device 传输
-
USB设备类规范
-
大容量存储设备类(Mass Storage Device) U盘、CD—ROM
-
人机交互设备类(Human Interface Device)键盘、鼠标、游戏手柄
-
语音设备类(Audio Device)麦克风、音箱等
-
通信设备类(Communication Device)电话、调制解调器等
-
打印机设备类(Printer Device) 打印机
-
监视设备类(Monitor Device)显示器,摄像头
-
USB主机控制器规范
-
UHCI (通用主机控制器规范)Intel针对USB1.1制定
-
OHCI (开放式主机控制器规范)Compaq针对USB1.1制定
-
EHCI (增强型主机控制器规范)Intel针对USB2.0制定
USB1.1协议
为了更好的理解USB协议,我们将USB逻辑上分为三层:
- 信号层
- 协议层
- 数据传输层
接口(Interface):例如一个设备有键盘的功能又有U盘的功能,就有两个接口。
端点(Endpoint):USB通信的基本单元
一、信号层
1、设备速度的检测
USB1.1规范支持两种传输速度的设备(LowSpeed、FullSpeed)
2、信号的编码
USB中的数据采用反向不归零编码方式(NRZI:None-Return to Zero Inverted),并对D+和D-线所处的不同状态定义成J和K两种状态:
数据的编码/解码:反向不归零码(NRZI)
简析:反向不归零码的意思,如上图,若刚开始数据为0时对应的为K状态,当由0到1跳变,保持K状态不变,当由1到0跳变,则K状态会跳到J状态,当0后面紧接着还是0,J与K之间的状态也会发生变化。
Bit填充:
在数据进行NRZI编码前,每6个连续的1信号之后都会插入1个0信号,以免丢失同步。
二、协议层
包是USB系统中信息传输的基本单位,所有的数据都是经过打包后在总线上传输的。包由6部分组成:
同步字段(SYNC)
包标识符(PID)
地址字段(ADDR)
数据字段(DATA,包括帧号)
检验字段(CRC)
包结束(EOP)
2、包标识符(PID)
在USB协议中,USB由很多不同的类型包,通过PID来区分,PID的格式如下:
3、地址段
**设备地址:**主要区分大的东西,比如是摄像机还是U盘;设备地址8位(理论最大支持2的7次方-1个(HOST)设备(127))
**端点地址:**比如向U盘拷贝东西,当向一个文件夹拷贝的过程中,又向另一个文件夹拷贝,针对同一个USB设备的不同文件夹进行的操作,就是通过端点地址来进行区分。端点地址4位:2的4次方(16)
低速设备:支持最多3个端点
全速和高速设备:支持最多16个IN和OUT端点
4、数据段
- 帧号
有时候很大的数据,我们是把它分成小的数据,然后一个个的打成包,这些小包后面再组成完整的数据就是通过帧号, - 11位
- 主机每发出一个帧,帧号都会自动加1
- 当帧号达到 7FFH 时,将归零重新开始计数
- 仅在每个SOP帧的帧首传输帧号
- 数据
- 根据传输类型的不同,数据域的数据长度从0到1024字节不等。
5、CRC校验段
- CRC
- Token CRC
计算 IN,OUT,和SETUP Token 地址域的CRC
计算 SOP Token 的帧号域的 CRC
G(X)= X^5 + X^2 + 1 - Data CRC
计算所有数据域数据的CRC
G(X) = X^16+ X^15 + X^2 + 1
具体CRC校验原理可以查看CRC相关算法
Packet 类型
- Packet分四大类:
- 命令(Token)Packet
- 帧首(Start of Frame)Packet
- 数据(Data)Packet
- 握手(Handshake)Packet
命令(Token)Packet
简析:八个位的同步位,PID 为八位,值位0xB4,表示是一个建立包,后面是7个位的设备地址,4个位的端点数据,5位的CRC 校验码,最后跟结束符
帧首(Start of Frame)Packet
数据包 Data Packet
确认包(握手包) Handshake Packet
三、数据传输层
为了满足多种不同类型的设备的数据通信的要求,USB协议提供4种数据传输方式。
- 控制传输(Control Transfers):突发,非周期性,由主机发起,用于命令和状态的传输。
- 同步传输(Isochronous Transfers):周期性,持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息。
- 中断传输(Interrupt Transfers):周期性,低频率,允许有限延迟的通信。
- 大容量数据传输(Bulk Transfers):非周期性,大容量突发数据的通信,数据可以占用任意带宽,并容忍延迟。
举例:控制传输