1.简介
USB是通用串行总线(Universal Serial Bus)的缩写。在USB总线出现之前,计算机与键盘、鼠标、扫描仪、打印机都使用专用的接口连接,不同设备的接口不能互用,扩展性很差,每次插拔设备都要关闭计算机,不支持热插拔,且通信速率很低。为了解决上述问题,USB总线诞生了。USB总线就好像一条管道,管道里流过的东西只要符合USB协议,至于具体流的是什么东西,USB总线并不关心,可以是自来水,可以是污水,可以是天然气,也可以是石油。对应具体的设备上,只要是支持USB协议的设备,都可以连接计算机,如USB键盘、USB鼠标、USB摄像头、USB音箱等。USB的出现简化了计算机与外围设备的连接,增强了扩展性,支持热插拔,且通信速度很快。
2.USB协议版本
从USB协议诞生至今,出现了多个USB协议版本,如USB1.0、USB1.1、USB2.0、USB3.0、USB3.1、USB3.2。最新的是USB4.0协议,可直连CPU的PCIe总线,最大速度可达40Gbps,使用Type-C接口,兼容DP视频协议、PD快充协议等,最高支持100W供电。
USB协议版本 | 速率称号 | 最大速率 | 电源 | 类型 | 推出时间 |
---|---|---|---|---|---|
USB1.0 | 低速(Low-Speed) | 1.5Mbps | 5V/500mA | 半双工 | 1996年1月 |
USB1.1 | 全速(Full-Speed) | 12Mbps | 5V/500mA | 半双工 | 1998年9月 |
USB2.0 | 高速(High-Speed) | 480Mbps | 5V/500mA | 半双工 | 2000年4月 |
USB3.0(USB3.2 Gen1) | 超高速(SuperSpeed USB) | 5Gbps | 5V/900mA | 全双工 | 2008年月11月 |
USB3.1(USB3.2 Gen2) | SuperSpeed USB 10Gbps | 10Gbps | 20V/5A | 全双工 | 2013年月7月 |
USB3.2(USB3.2 Gen2×2) | SuperSpeed USB 20Gps | 20Gbps | 20V/5A | dual-lane | 2017年月9月 |
USB4.0(Gen3×2) | ---- | 40Gb s | 100 | single-lane或dual-lane,兼容Thunderbolt | 2019年月8月 |
注:USB3.2推出时,USB-IF公布了新的命名规范,将USB3.0改名为USB3.2 Gen1,USB3.1改名为USB3.2 Gen2,而将能够使用两个USB Type-C Rx/Tx针脚的USB3.2改名为USB3.2 Gen2×2。
下图(未找到此图的源出处)是各个版本USB协议使用的标志及接口,USB3.2以后,只使用Type-C接口,包括图中未画出的USB4.0和Thunderbolt3。
下图是USB3.2协议使用的标志,此标志是USB-IF网站上最新的。
下图是USB4.0协议使用的标志,USB4.0使用Gen3 lane,single-lane可达到20Gps,dual-lane为40Gps。USB4™ 20Gbps使用single-lane,USB4™ 40Gbps使用dual-lane。
3.USB总线特点
3.1.主从模式
USB是主从模式的总线,主机称为Host,从机(也称为设备)称为Device。从机与从机之间、主机与主机之间(不包括USB4.0),不能互联。每次通信都是由主机发起,从机不能主动发起通信,只能被动的应答主机的请求。USB3.0及以后的USB协议,主机也可以和集线器(Hub)通信。为了增加灵活性,又出现了USB OTG(On The Go),USB OTG支持主从切换,同一个设备,在不同场合下,可以在主机和从机之间切换。USB OTG线中增加了一根USB ID线,当USB ID线上拉时,处于从机(设备)模式,当USB ID线接地时,处于主机模式。
3.2.总线结构
如下图所示,USB总线呈现出树状的拓扑结构。树的根节点是USB Host控制器,连接在USB Host控制器上的是USB根集线器(Root Hub)。USB集线器(Hub)可以将一个USB接口扩展成多个USB接口,扩展出的USB接口又可以通过USB集线器(Hub)扩展,每个USB接口都可以接USB设备。集线器只能扩展出更多的USB接口,而不能扩展出更多的带宽,所有USB设备共享USB Host控制器的带宽,当有多个USB设备需要较大带宽时,可以考虑将他们接到不同USB Host控制器上的根集线器上,以避免带宽不足。
3.3.电气特性
下图是USB3.2线缆的示意图,同时兼容USB2.0。USB使用差分信号传输数据,下图中的D+和D-是一对差分线,SSTX+和SSTX-是一对差分线,SSRX+和SSRX-是一对差分线。USB2.0只有一对差分线,即下图中的D+、D-,因此USB2.0是半双工的,不能同时收发数据。USB3.2拥有两对差分线,即SSTX+和SSTX及SSRX+和SSRX,因此USB3.2是全双工的,可同时收发数据。USB3.2和USB2.0使用不同的差分线传输数据,两者互不干扰,可同时工作。USB3.2线缆中保留了USB2.0的数据传输通道,实现了对USB2.0的兼容。USB主机可通过VBUS线向设备供电,最大可输出20V/5A。GND是地线。
下图是USB3.2线缆的横截面示意图。红色Power线是VBUS,绿色和灰色UTP是D+和D-,青色的两对差分线是SSRX+、SSRX、SSTX+、SSTX。黑色是GND。除此之外,还有一些编织层和屏蔽层。
4.USB传输基础
4.1.传输类型
控制传输(Control Transaction)
控制传输用于配置设备、获取设备信息、发送命令到设备、获取设备的状态。每个USB设备都有端点0的控制端点,当USB设备插入到USB主机拓扑网络中时,USB主机就通过端点0与USB设备通信,对USB设备进行配置,便于后续的数据传输。USB协议保证控制传输有足够的带宽。控制传输可靠,时间有保证,但传输的数据量不大。如USB设备的枚举过程就采用的是控制传输。
中断传输(Interrupt Transaction)
当USB主机请求USB设备传输数据时,中断传输以一个固定的速率传送少量的数据。中断端点的数据传输方式为中断传输,数据传输可靠,实时性高,这里的中断并不是USB设备产生中断,而是USB主机每隔一个固定的时间主动查询USB设备是否有数据要传输,以轮询的方式提高实时性。如USB鼠标采用的是中断传输。
批量传输(Bulk Transaction)
批量传输用于传输大量数据。USB协议不保证这些数据传输可以在特定的时间内完成,但保证数据的准确性。如果总线上的带宽不足以发送整个批量包,则将数据拆分为多个包传输。批量传输数据可靠,但实时性较低。如USB硬盘、打印机等设备就采用的是批量传输方式。
等时传输(Isochronous Transaction)
等时传输也可以传输大量数据,但数据的可靠性无法保证。采用等时传输的USB设备更加注重保持一个恒定的数据传输速度,对数据的可靠性要求不高。如USB摄像头就使用的是等时传输方式。
4.2.传输要素
USB2.0主机控制器通过把时间在低速、全速模式下分成1毫秒宽的帧(frame),在高速模式下分成125微妙宽的微帧(microfranme),以此来管理传输。主机控制器将每个帧或微帧的一部分分配给各个传输。每个帧(或微帧)以带有时序参考的帧(Start-of-Frame,SOF)开始。超高速总线不使用SOF,但主机控制器仍可以在125微妙的总线时间内安排超高速传输。
USB传输可以安排在1个或多个帧或微帧中,每个传输包含多个事务,每个事务又进一步含有多个信息包(packets)。信息包必须在一个帧或微帧中传输完毕,不能跨帧或微帧。信息包分为4类,令牌类信息包确认事务类型,数据类信息包携带数据和状态代码,握手类信息包携带状态代码,最后一种是特殊类信息包。
USB传输由一个或多个事务(transaction)组成,这些事务可将数据载入端点或从端点取出。USB2.0事务开始于主机在总线上发送的令牌信息包(token packet)。令牌信息包含有目标端点号和方向。IN令牌信息包表示向端点请求数据信息包。OUT令牌信息包则是主机派发数据信息包的先行信息。除了数据,每个数据包还含有错误检查位和一个带有数据顺序值的信息包ID(PID)。许多事务还拥有握手信息包(handshake packet),数据的接收端用它来报告事务成功或失败。对于超高速传输事务,信息包类型和协议有所不同,但却含有相同的地址、错误检查和与数据相配合的数据顺序值。
信息包类型 | PID名字 | 取值(二进制) | 传输类型 | 来源 | 说明 |
---|---|---|---|---|---|
令牌 | OUT | 0001 | 全部 | 主机 | IN事务中需要的设备和端点地址 |
令牌 | IN | 1001 | 全部 | 主机 | IN事务中需要的设备和端点地址 |
令牌 | SOF | 0101 | 帧开始 | 主机 | SOF标识符和帧号 |
令牌 | SETUP | 1101 | 控制 | 主机 | 用于Setup事务的设备和端点地址 |
数据 | DATA0 | 0011 | 全部 | 主机、设备 | 数据交替或数据PID序列 |
数据 | DATA1 | 1011 | 全部 | 主机、设备 | 数据交替或数据PID序列 |
数据 | DATA2 | 0111 | 等时 | 主机、设备 | 数据PID序列 |
数据 | MDATA | 1111 | 等时、分割事务 | 主机、设备 | 数据PID序列 |
握手 | ACK | 0010 | 控制、批量、中断 | 主机、设备 | 接收端接收到正确的数据信息包 |
握手 | NAK | 1010 | 控制、批量、中断 | 设备 | 接收端不能接收数据,或者发送端无法发送数据或无数据要发送 |
握手 | STALL | 1110 | 控制、批量、中断 | 设备 | 控制请求不被支持或端点被停止 |
握手 | NYET | 0110 | 控制写、批量、OUT、分割事务 | 设备 | 正确的接收了数据信息包,但还没准备好接收下一个,或集线器还没有将数据信息包分割完成 |
特殊 | PRE | 1100 | 控制、中断 | 主机 | 主机发出的先行信号 |
特殊 | ERR | 1100 | 全部 | 集线器 | 由集线器返回的错误 |
特殊 | SPLIT | 1000 | 全部 | 主机 | 分割事务 |
特殊 | PING 0100 | 控制写、批量、OUT | 主机 | PING测试 | |
特殊 | EXT | 0000 | 无 | 主机 | 扩展,未使用 |
4.2.区别
在框架上,超高速是向后兼容USB2.0的,但是二者在协议上还是有一些重大的不同,主要区别如下:
- USB2.0的信息包分为令牌、数据和握手,超高速也是这三种类型,但是用法不同;超高速令牌包集成在头包和DPH中,各种类型的握手包都是TP包形式;对于OUT事务,令牌被合并在数据包中;对于IN事务,令牌被握手包代替
- USB2.0不支持突发(bursting)传输,超高速支持持续突发传输,一个微帧内最多可以传输16个信息包
- USB2.0是半双工(half-duplex)总线,超高速是全双工(dual-simplex)总线,支持同时收发数据
- USB2.0使用轮询模式,超高速使用异步通知方式
- USB2.0不支持流能力,超高速支持批量(bulk)端点的流(Stream)方式
- USB2.0在同步传输(isochronous)间隔中没有进入低功耗状态的机制,超高速则允许同步传输服务间隔中自动进入低功耗状态(不服务的时间段进入低功耗状态);超高速主机控制器在服务间隔前发送一个PING包到设备,以使设备在传输之前转变成活动状态
- USB2.0设备无法通知主机控制器自己在进入低耗电状态前可容忍的延迟时间(设备通知主机自己进入低功耗状态的最长延迟时间),超高速设备则提供可容忍的延迟时间(Latency Tolerance)消息
- USB2.0以固定的1ms(全速)/125us(高速)间隔传输帧/微帧。超高速设备可以发送间隔调整(Interval Adjustment)消息给主机,以调整帧间隔
- USB2.0电源管理总是主机导向(主机初始化)的;超高速链路两端都支持电源管理,因此不管何时需要空闲,需要退出,需要通信,每个链路能独立的进入低功耗状态
- USB2.0的信息包是广播方式,每个连接的设备解析每个信息包的地址、端点、方向信息来决定自己是否应该响应;超高速信息包有路由信息,HUB决定信息包要送达那个设备,只有一个例外,等时时间戳包(Isochronous Timestamp Packet,ITP)广播到每一个设备