USB全称为Universal Serial Bus,翻译过来就是通用串行总线。由英特尔与众多电脑公司提出来,用于规范电脑与外部设备的连接与通讯。目前USB接口已经得到了大范围的应用,已经是电脑、手机等终端设备的必配接口,甚至取代了大量的其他接口。比如最新的智能手机均采用USB Typec取到了传统的3.5mm 耳机接口,苹果最新的MacBook只有USB Typec接口,至于其他的HDMI、网口等均可以通过USB Typec扩展坞来扩展。
按照大版本划分,USB目前可以划分为USB1.0、USB2.0、USB3.0以及正在即将到来的USB4.0。
如果按照接口类型划分的话USB就要分为很多种了,最常见的就是USB A插头和插座,如图所示:
此处我们就以Mini USB为例讲解一下USB的基本电气属性。Mini USB线一般都是一头为USB A插头,一头为Mini USB插头。一共有四个触点,也就是4根线,这四根线的顺序如图所示:
大家再观察一下Mini USB插头,会发现Mini USB插头有5个触点,也就是5根线,线序从左往右依次是1~5。第1根线为VCC(5V),第2根线为D-,第3根线为D+,第 4根线为ID,第5根线为GND。可以看出Mini USB插头相比USB A插头多了一个ID线,这个ID线用于实现OTG功能,通过ID线来判断当前连接的是主设备(HOST)还是从设备(SLAVE)。
USB是一种支持热插拔的总线接口,使用差分线(D-和D+)来传输数据,USB支持两种供电模式:总线供电和自供电,总线供电就是由USB接口为外部设备供电,在USB2.0下,总线供电最大可以提供500mA的电流。
USB是主从结构的,也就是分为主机和从机两部分,一般主机叫做 Host,从机叫做Device。主机就是提供USB A插座来连接外部的设备,比如电脑作为主机,对外提供 USB A插座,我们可以通过USB线来连接一些USB设备,比如声卡、手机等。因此电脑带的USB A插座数量就决定了你能外接多少个USB设备,如果不够用的话我们可以购买USB集线器来扩展电脑的USB插口,USB集线器也叫做USB HUB,USB HUB如图所示:
虽然我们可以对原生的USB口数量进行扩展,但是我们不能对原生USB口的带宽进行扩展,譬如ZYNQ的两个原生USB口都是USB2.0 的,带宽最大为480Mbps,因此接到下面的所有USB设备总带宽最大为480Mbps。
USB只能主机与设备之间进行数据通信,USB 主机与主机、设备与设备之间是不能通信的。因此两个正常通信的USB接口之间必定有一个主机,一个设备。为此使用了不同的插头和插座来区分主机与设备,比如主机提供USB A插座,从机提供Mini USB、Micro USB等插座。在一个USB系统中,仅有一个USB主机,但是可以有多个USB设备,包括USB功能设备和USB HUB,最多支持127个设备。一个USB 主控制器支持128个地址,地址 0是默认地址,只有在设备枚举的时候才会使用,地址0 不会分配给任何一个设备。所以一个USB主控制器最多可以分配127个地址。整个USB的拓扑结构就是一个分层的金字塔形,如图所示:
USB主机和从机之间的通信通过管道(Pipe)来完成,管道是一个逻辑概念,任何一个USB设备一旦上电就会存在一个管道,也就是默认管道,USB主机通过管道来获取从机的描述符、配置等信息。在主机端管道其实就是一组缓冲区,用来存放主机数据,在设备端管道对应一个特定的端点。
前面我们讲了,USB分为HOST(主机)和从机(或DEVICE),有些设备可能有时候需要做HOST,有时候又需要做DEVICE,配两个USB口当然可以实现,但是太浪费资源了。如果一个USB接口既可以做HOST又可以做DEVICE那就太好了,使用起来就方便很多。为此,USB OTG应运而生,OTG是On-The-Go的缩写,支持USB OTG功能的USB接口既可以做HOST,也可以做DEVICE。那么问题来了,一个USB接口如何知道应该工作在HOST还是DEVICE呢?这里就引入了ID线这个概念,前面讲解USB电气属性的时候已经说过了,Mini USB插头有5根线,其中一条就是ID线。ID线的高低电平表示USB口工作在HOST还是DEVICE模式:
支持OTG模式的USB接口一般都是Mini USB 或Micro USB等这些带有ID线的接口。如果只有一个Mini USB或者Micro USB接口的话如果要使用OTG的主机模式,那么就需要一根OTG线,Mini USB 的OTG线如图所示: