通讯协议之路主要分为两部分,第一部分从理论上面讲解各类协议的通讯原理以及通讯格式,第二部分从具体运用上讲解各类通讯协议的具体应用方法。
后续文章会同时发表在个人博客(jason1016.club)、CSDN;视频会发布在bilibili(UID:399951374)
1、概述
USB,Universal Serial Bus(通用串行总线),是一种计算机与外围设备进行数据交互的通信协议。
1.1 USB协议
USB2.0 或 USB3.1, 指的是传输标准; 而USB Type-C 或 USB Type-A, 指的是物理接口。
1.2 USB充电协议
1.3 USB协议
1.3.1 Type-A
(1)标准的USB2.0协议传输结构是这样子的(设备端):
(2)USB3.0
- USB协议采用的是差分传输模式
- 在低速和全速模式下,采用电压传输模式,在高速下,采用电流传输模式。
- 传输结构之所以采用两长两短的方式,是为了支持热拔插:
- 当USB设备接入主机时,VCC和GND优先被接通;拔掉设备时,D-和D+数据线优先断电。
1.3.2 Type-C
Type-C相对于其它接口的优势:
- 它无需区分正反
- 最高可以支持5A大电流,
- 在USB4标准支持下,最高可传输速率可达40Gbps。
- 正确插入后发出声音。
- 通过USB Power Delivery技术,可用于3C产品(如笔记本电脑、智能手机)的充电。
- 增进的电磁干扰(EMI) 与射频干扰(RFI mitigation)特性。
- 可选集成DisplayPort、HDMI、MHL[5][6]。
- 可选集成Thunderbolt。
- 可选集成USB4。
TYPE-C的高速应用,Type-C可用于:
- USB1.1/2.0/3.0/3.1
- HDMI
- 以太网络
- DisplayPort的
- 功率
- 音频
- 有更多的千兆位通道。
1.3.3 USB2.0/3.0/3.1/3.2速率
Gen1和Gen2指代编码方式和Lanes内的速度,Gen1绑定了8b/10b和单lane内5 Gbit/s,Gen2绑定128b/130b与单lane内10G bits/s。
1个lane即2组差分对,一组差分对负责一个方向的传输。所以表里的带宽都是同时刻双向的带宽(当然实际中达不到)。
x1和x2指代有几个lane,真正的USB3.2 x2只能通过Type C接口达成,同时线材也必须支持USB3.2内所需的4个差分对。
(1)USB2.0
(2)USB3.0 (USB3.2 Gen1)
USB3.0为了提高传输速率,在不同形状的物理接口上都增加了新的针脚。为了保证向下兼容性,也保留了USB2.0原有的针脚;由于USB3.0发表时只有常见的Type-A与Type-B构型,并没有Type-C可选.
USB3.0新增了两组差分对,分别是SSTX与SSRX。每组差分对的速度都被提升到了5Gbit/s,编码方式为8b/10b,计算纠错/控制损耗,实际效率为80%。从针脚名称中的T与R便可以知道USB3.0可以同时发送与接收数据,是全双工接口
(3)USB3.1 (USB3.2 Gen2)
USB3.1相较于USB3.0,大致做了以下改进:
- 仍然是两个差分对,全双工,但每个差分对速度被提升到10Gbps。
- 编码从8b/10b更改为128b/130b,实际可用带宽更大,损耗从USB3.0的20%降到3%。
- 引入了新的USB PD协议,供电能力大幅度提高。
下面是USB3.1的工作示意图,在Type-A与Type-B接口下,相较于USB3.0只是把差分对的速度提高了。
而在Type-C接口下,USB3.1工作示意图是这样的
(4)USB3.2 Gen1x2
(5)USB3.2 Gen2x2
1.3.4 ULPI/UTMI
ULPI协议的全称是UTMI+Low Pin Interface。从名字上就可以看出ULPI是UTMI的Low Pin版本。UTMI(USB2.0 Transceiver Macrocell Interface,USB2.0收发器宏单元接口)是一种用于USB controller和USB PHY通信的协议。相对于ULPI,UTMI有更多的控制信号,支持8bit/16bit 数据接口。前者PIN少,后者PIN多,所以如果用ULPI,PHY一般外部另接;用UTMI,PIN多,一般内置。
- UTMI 接口信号
- ULPI 接口信号
为什么要用NRZI? (1)没有归0步骤,节省了大量的数据带宽;(2)没有负电平,表示起来方便
如何自同步? NRZ编码本身并不带自同步功能,USB在协议中加入了同步头(SYNC),对于每一个USB Packet,都有一个同步域固定为0000_0001,这个域翻译成NRZI编码就是01010100,接收者通过这个同步头可以算出发送者的频率。
为什么需要Bit-Stuffing? SYNC可以解决同步的问题,但是如果发送端一直发1,那由NRZI编码后的电平会一直保持不变,从SYNC计算出来的频率只要有一点点偏差,累积后都会造成较大的误差,所以USB协议中采取了bit stuffing的机制来避免出现长时间的1。简单说,每6个连续的1之后,会强制插入一个0,使得发送信号强制出现翻转,接收方在收到翻转信号时可以调整频率,从而实现时钟同步。
参考文章:USB协议介绍_工作使我快乐的博客-CSDN博客
2、USB常见接口
USB的连接器分为A、B两种,分别用于主机和设备;其各自的小型化的连接器是Mini-A, Mini-B 和 Micro-A, Micro-B,另外还有Mini-AB(可同时支持Mini-A及Mini-B)的插口。USB 3.1版本中导入支持正反面不区分插入的C型。下图是常见的USB硬件接口。
根据不同的协议,详细分类如下表所示
其中Type-A是我们过去最常用的接口类型,Type-B常见于打印机上,而Type-C就是目前正在普及的,Micro-USB是过去安卓设备常采用的接口。
综上,可将USB的接口分为以下三类: