Universal Serial Bus(通用串行总线),是一种快速、灵活的总线接口。它是为了解决日益增加的PC外设与有限的主板插槽和端口之间的矛盾而制定的一种串行通信标准。本节作为将作为一个常识性的梳理和总结,期待能够更加全面的了解USB。
1.USB的优点优点:
适用于多种外设,使它不需要为不同的外设准备不同的接口和协议;
Windows能自动检测到USB设备的热插拔,并自动配置;
PC机上的接口线非常紧缺,而USB设备并不需要用户设置端口故无论从用户使用方便性,或从对资源的占用方面看,USB都很优秀;
当接入一个USB设备时,全速USB接口可达12Mbit/s。考虑到状态、控制和出错信息,最大理论速度仍可达到9.6Mbit/s,这是其他串行接口协议所不能比拟的,且USB也支持1.5Mbit/s的低速传输。现如今USB3.2已达20Gbps,USB4达40Gbps。
USB接口芯片价格低廉,这也大大促进USB设备的开发与应用。
整个的USB的系统只有一个端口和一个中断节省了系统资源。
USB的物理拓扑指的是USB总线的实际物理设备连接关系。主机端提供USB根集线器,USB根集线器可外接USB外设,也可以外接USB的集线器HUB,用于拓展USB端点接口,拓展的USB集线器上的端口也可以外接USB设备。使用这种方式可实现USB设备的层层拓扑连接。不过这种拓扑关系最大的深度为7。每条usb总线上最多可以接127个设备。
一个USB集线器(HUB)的物理构如下,可以看到,一个USB集线器是将一个USB连接端点拓展成多个USB端点的设备。
USB的逻辑拓扑结构是站在USB主机的角度来讲,所以的连接到该USB总线上的USB设备具有同等的地位关系。主机对外接的USB设备的寻址访问使用相同的方式,只是有的设备需要USB集线器中继访问,有些USB设备是直接访问。
在介绍插头和插座之前,先多解释一下,基本的叫法。插头,plug,对应的也叫公口,即插别人的;插座,receptacle,对应也叫做母口,即被插的。USB的接口类型,根据接口形状不同,主要可以分为三大类:
TYPE类型:普通的硬件直接叫做Type
Mini类型:小型版本的叫Mini迷你的
Micro类型:更加小的,叫做Micro微小的
TYPE类型常见于PC机,按其接口形状的不同又分为三大类。分别为Type A,Type B,Type C三种类型,其中TypeC现在是主流,未来一定是一枝独秀,因为从USB3.2开始,包括雷电3都已经只支持TypeC,其他的接口类型遭到淘汰。USB-IF在2019年9月3日发布的USB4标准更是宣布,将只支持Type-C接口。生活中的USB设备种类很多,随处可见各种USB接口类型。USB接口类型朝着小型化,高速化的方向发展。Mini型的接口已不多见,而TpyeA之所以被淘汰的原因的是不支持盲插,永远插不对,未来Type-C将一统天下。
USB1.x/2.0接口的引脚定义及颜色,四根引脚
USB3.0接口标准,九根引脚
除了USB接口外,目前已存在的接口,例如spi,uart,i2c,rs485等,还是很多的,而且各种接口实际上从硬件上也是形状各异,互相也都有自己的应用领域,而且无法兼容。在USB出现之前,各种接口太多,而且都不太容易使用,互相之间的兼容性也较差,因此,USB的出现是必然。
USB协议设计的目的,就是上一段所提到的,用单一的USB接口,取代之前种类繁多的各种其他接口。而为了取代其他各种接口,那意味着就要实现,或者是支持,之前别的接口,所对应的各种功能。因此,USB协议设计的时候,就是要把鼠标,键盘,大容量存储,图像等,这些之前是通过其他接口所实现的,各种的功能,都囊括进来。并且在协议中有对应的规范定义,支持这些功能。因此,才有了如此多的各种USB的Class,即分类,根据功能而分出的各种类别。不同的Class分类,用于实现对应的功能,适用于相应的设备。所谓适用,指的是主机根据不同的设备匹配不同的驱动程序。
下表为USB的分类,具体是由设备描述符表征的,在描述符部分细说,此处作为了解。
所谓生态,就是调研了一下市场,汇总了支持开发USB3.0的芯片(仅3.0)。首先介绍一下芯片具体完成哪些工作以及我利用FPGA能实现哪些工作才能实现USB通信。要实现USB通信大致需要两部分:Controller和PHY两部分,Controller大多为数字逻辑实现,逻辑控制主要分为:MAC、CSR以及FIFO。MAC部分主要按照USB协议进行数据的打包和分解,并按照PIPE(USB3.0)或者UTMI(2.0)的总线的数据格式发送给PHY(2.0或者3.0);CSR部分主要进行寄存器的控制,软件对寄存器进行操作主要是操作CSR寄存器;FIFO部分主要是实现高速和低俗转换。PHY通常为模拟逻辑实现,实现并转串的功能,把UTMI或者PIPE口的并行数据转换成串行数据,再通过差分数据线输出到芯片外部。大致的通信方式如下图所示:
PHY部分负责最底层的信号转换,作用类似于网口的PHYController部分主要实现USB的协议和控制。也是目前普通FPGA可以实现的,整个作用类似网络中的MAC层。
美国德州仪器TI的芯片TUSB1310A,属于上图中的第二种,纯PHY,做底层信号的数据转换,不带CPU核。英商飞特迪亚提供的芯片FT600/FT601内部没有CPU核,但是他属于第一种,带controller,与之类似的还有南京沁恒的CH569,以及赛普拉斯的CYUSB3014。米联客提供了基于FT601的FPGA开发板,特权同学提供了基于Cyusb3014的FPGA开发板,小梅哥也有基于Cyusb3014的FPGA开发板。解决方案最完善的,市场支持力度最大的还是Cyusb3014,这也是我们这个系列的主角,终于登上了荧幕。
还有另外一种芯片用来做TypeC的接口,这类芯片就比较多了,ST意法半导体的STUSB系列,NXP恩智浦的PTN5110,它可以支持各种Type-C用途:灌电流、拉电流、带配件支持或DRP的灌电流。这类芯片没有具体研究,大概是TypeC线缆上需要一颗电平或者信号的转换芯片。
USB OTG
USB设备从物理上的逻辑结构说,包含了主机host端和设备device端。USB是Host端控制整个的总线数据传输的。单个USB总线上,只能有一个Host。对于USB设备端来说,内部是需要有对应的设备端的驱动,常常称其为固件Firmware,其实现了对应的设备端的USB所要做的事情,主要是相应一些标准的请求,完成对应的数据读取和写入等。对应的,主机Host端,通常是运行Linux或者windows的电脑,同样也需要对应的驱动,此部分驱动,不论是Linux下,还是Windows下,都已经实现了常见的驱动了,所以一般来说,很少需要驱动开发者再去写相关的驱动。这带来了一个问题。
USB技术的发展,使得PC和周边设备能够通过简单方式、适度的制造成本将各种设备连接在一起,如数码相机、打印机,都可以通过USB总线,作为PC的周边,在PC的控制下进行数据交换。但这种方便的交换方式,一旦离开了PC,各设备间无法利用USB口进行操作,因为没有一个设备能够充当PC一样的Host。
USB OTG是USB On-The-Go的缩写,是近年发展起来的技术,主要应用于各种不同的设备或移动设备间的联接,进行数据交换,特别是PAD、移动电话、消费类设备。On-The-Go,即OTG技术就是实现在没有Host的情况下,实现设备间的数据传送。例如数码相机直接连接到打印机上,通过OTG技术,连接两台设备间的USB口,将拍出的相片立即打印出来。
USB PD
USB PD(USB Power Delivery,功率传输协议),是基于USB3.2 Gen2后提出的功率传输概念,可以将充电能力扩大为10倍:最高可达100瓦。是一种快速充电的协议。如今各大厂商推出了自己的快充技术,但是相互之间并不互通,不能相互支持,它的出现就是想打造一种通用的快速充电方案。
UVC
UVC全称为USB Video Class,即:USB视频类,是一种为USB视频捕获设备定义的协议标准。是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,已成为USB org标准之一。专门定义这样的协议,有很多好处,例如现在的高版本的windows和linux均已支持UVC设备,无需驱动设备即可获得支持。另外,USB 在 Video这块也成为一项标准了之后,硬件在各个程序之间彼此运行会更加顺利。



