USB通信基础了解
- 1. USB总线简介
- 2. USB电气特性
- 3. USB Protocol Layer
- USB有四种数据传输模式(Transfer),分别为控制(Control)传输、中断(Interrupt)传输、批量(Bulk)传输、同步(Isochronous)传输
- Transaction分为:Setup transaction、In transaction、Out transaction
- Packet分为: Token packet、Data packet、Handshake packet、Special packet,packet 以包标识字段PID来区分
- Setup Packet、Data Packet、Handshake Packet、SOF Packet
- Control Transfer(Get Descriptor)实例
- Interrupt Transfer(In Transaction)实例
1. USB总线简介
USB总线协议是以Intel等公司共同制定的串行接口标准,USB与I2C、SPI、UART类似,都是一种传输数据的协议规范,但USB主要设计是用于计算机与外接设备的数据交互和文件传输,USB协议版本从最开始的1.0、1.1、2.0、3.0、3.1、3.2等到现在最新的4.0版本,通信速率越来越高,设计也变得更复杂。USB 2.0 可能是目前最经典的接口,480Mbps的速度已经可以满足一般人的日常文件传输需求。USB版本是可以向下兼容的,使得即使更新换代,但还是非常好用的通信接口。
USB属于一种轮询式总线,主机控制端口初始化所有的数据传输,所有数据通信都是由主机发起的。
2. USB电气特性
USB2.0接口一般是4或5线,VBUS、D-、D+、GND、Shield。
USB2.0 VBUS上电压为5V,可提供的最大电流为500mA。
D- D+为差分数据线,可减少一定干扰,最高电压为3.3V左右。
下图为USB低速/全速信号电平规格定义
1)首先需了解differential 1/0的定义。
- differential “1”: (D+) - (D-) > 200mV & D+ > VIH(min),正常即 D+ 3.3V(high)& D- 0V(low)
- differential “0”: (D-) - (D+) > 200mV & D- > VIH(min),正常即 D- 3.3V(high) & D+ 0V(low)
2)两种全高或全低的情况
- SE0: D+ & D- < VIL(max),全低的情况,USB主机端口未连接时的电平状态
- SE1: D+ & D- > VIL(max),全高的情况,通常不用
3)J state 和 K state
- J state: 对于全速设备即为 Differential “1”,低速设备相反
- K state: 对于全速设备即为 Differential “0”
4)Idle、Resume、Suspend、Reset
- Idle state: 对于全速设备即为J state
- Resume state: K state
- Suspend: J state keep 3ms
- Reset: SE0 keep 2.5us or 10ms
5)SOP、EOP
- SOP: Idle state to K state
- EOP: 2bit time SE0 + 1 bit time J state
6)Connect、Disconnect
- Connect : Idle state > 2ms
- Disconnect: SE0 > 2.5us
USB通信为NRZI编码,NRZI编码方式非常的简单,即信号电平翻转表示0,信号电平不变表示1,例如传输每个packet最前面的sync域00000001(B),Idle state为J state时,实际传输为KJKJKJKK。特俗情况为当连续传输1时,D- D+电平会一直不变,从机就无法同步时钟信号,解决方式就是在每连续6的 ‘1’ 之后强行插入一个0电平,接收端忽略掉这个0电平即可。
3. USB Protocol Layer
USB协议层次从大到小为:Transfer、Transaction、Packet。Packet是基本的传输单元,一个Transaction包含数个Packet,一个Transfer又包含数个Transaction。
USB有四种数据传输模式(Transfer),分别为控制(Control)传输、中断(Interrupt)传输、批量(Bulk)传输、同步(Isochronous)传输
- 控制传输:功能是通过控制管道向USB设置控制信息。控制管道是USB设备中必须拥有的部分。控制管道分为令牌阶段、数据传送阶段、握手阶段三个部分。
- 中断传输:传输数据流量很小,主要是用来通知Host事件的发生,如USB键盘按键按下释放等操作,可通过中断通道传送到Host。中断事务也分为令牌阶段、数据传输阶段、握手阶段三部分。
- 批量传输:用于传输大流量数据,如U盘等大容量存储器,也有令牌阶段、数据传输阶段、握手阶段三部分。
- 同步传输:为了保证传输信息的同步性,通常在USB摄像头传输视频数据时会采用。同步事务能够保证每秒中的固定传输量,能够允许细微的误码存在,保持实时性。由于对数据正确性的要求较低,同步传输事务仅有令牌阶段、数据阶段两个部分。
Transaction分为:Setup transaction、In transaction、Out transaction
- Setup transaction: setup packet(H->D)、data packet(H->D)、handshake packet(D->H)
- In transaction: in packet(H->D)、data packet(D->H)、handshake packet(H->D)
- Out transaction: out packet(H->D)、data packet(H->D)、handshake packet(D->H)
Packet分为: Token packet、Data packet、Handshake packet、Special packet,packet 以包标识字段PID来区分
- Token packet: SETUP packet、OUT packet、IN packet、SOF packet
- Data packet: DATA0 packet、DATA1 packet、DATA2 packet、MDATA packet
- Handshake packet: ACK packet、NAK packet、STALL packet、NYET packet
- Special: PRE packet、ERR packet、SPLIT packet、PING packet
Setup Packet、Data Packet、Handshake Packet、SOF Packet
包标识字段(PID)长度为8bit,由低4bit的类型字段和高4bit的校验字段组成。校验字段是类型字段的反码。
-
Setup packet:
-
Data packet
-
Handshake packet
-
SOF packet