目录
1.USB概念
2.USB协议发展
3.USB接口类型
3.1 TYPE类型
3.2 Mini类型
3.3 Micro类型
4. USB体系结构和关键概念
4.1 USB工作原理
4.2 USB物理拓扑结构
4.3 USB逻辑拓扑结构
4.4 USB软件架构
4.5 USB数据流模型
4.5.1 USB设备端点
4.5.2 USB管道
4.6 USB即插即用功能
4.6.1 热插拔
4.6.2 枚举
4.7 USB供电方式
4.8 USB数据编解码和位填充
4.9 USB通信方向
4.10 USB设备分类
4.11 USB电平标准和总线状态
1.USB概念
USB全称是 Universal Serial Bus,即通用串行总线,是一种计算机与外围设备进行数据交互的串行通信标准。
USB协议是在1994年底由英特尔、IBM、Microsoft等公司联合提出的,现由USB协会(USB-IF)管理。
USB使用差分信号来传输数据,具有传输速度快、支持热插拔、连接灵活、独立供电、协议向下兼容等优点,目前应用十分广泛。
2.USB协议发展
USB接口自1994年推出以来,经过30年的发展,从USB1.0发展到了现在的USB4.0,传输速率也从最开始的1.5Mbps,大幅提高到了最新的40Gbps。
USB协议按照速度等级和连接方式分可分为7个版本,但是从USB3.0开始,USB-IF对之前的接口标准重命名了,导致协议名称混乱,市场中的习惯叫法和官方命名不一样,现在USB-IF正式的主版本号只有USB 2.0、USB 3.2和USB4这3个。
原名 | 提出时间 | 传输速率 | 官方主版本号 | 官方子版本号 |
USB1.0 | 1996 | 1.5Mbps | USB2.0 | USB2.0 Low Speed |
USB1.1 | 1998 | 12Mbps | USB2.0 Full Speed | |
USB2.0 | 2000 | 480Mbps | USB2.0 High Speed | |
USB3.0 | 2008 | 5Gbps | USB3.2 | USB3.2 Gen1(SuperSpeed USB) |
USB3.1 | 2013 | 10Gbps | USB3.2 Gen2x1(SuperSpeed USB 10Gbps) | |
USB3.2 | 2017 | 20Gbps | USB3.2 Gen2x2(SuperSpeed USB 20Gbps) | |
USB4.0 | 2019 | 20Gbps | USB4.0 | USB4.0 Gen2x2 |
40Gbps | USB4.0 Gen3x2 |
从上表可知,USB2.0根据速度分类,可分为低速(Low Speed)、全速(Full Speed)和高速(High Speed)3个版本。
3.USB接口类型
USB接口分为插头和插座:
- 插头,对应的也叫公口,主要是各种外围设备上;
- 插座,对应也叫做母口,一般在PC主机箱上。
USB的接口类型,根据接口形状不同,主要可以分为三大类:
- TYPE类型:有TYPE-A、TYPE-B、TYPE-C共3种类型;
- Mini类型:有Min A、Min B共2种类型;
- Micro类型:有Micro A、Micro B、Micro B superSpeed 共3种类型。
3.1 TYPE类型
3.2 Mini类型
3.3 Micro类型
4. USB体系结构和关键概念
4.1 USB工作原理
整个USB总线系统由三个元素组成:
- 主机(Host)
- 集线器(Hub)
- 设备(Func)
主机(Host)是一个提供 USB接口及接口管理能力的硬件、软件及固件的复合体,常见的如PC。从功能角度来看,主机(Host)其实由Host Controller和Root Hub两部分组成,Host Controller主要负责数据处理,Root Hub则负责向上下游提供接口。一个USB系统中仅有一个USB主机。
集线器(Hub)用于连接设备和主机,用户可以将设备或附加的Hub与之相连,这些附加的Hub可以连接其他的设备以及下层 Hub。每个Hub也需要占用地址。
根集线器(Root Hub)是一个特殊的Hub,它Host Controller集成在一起,不占用地址。
下图是我们PC端常见的USB系统:
USB是主从模式的总线,每次通信都是由主机发起,设备不能主动发起通信,只能被动的应答主机的请求。
USB总线采用轮询机制,主机会对集线器进行轮询以获取其状况,从而知道系统中的设备是连接还是断开的,是否准备好传输数据。每当新的设备连接到集线器时,主机会自动分配一个地址给新设备,该地址写入设备的寄存器中,主机通过该地址读取设备的描述符来了解设备的属性,对设备进行管理和通信。
4.2 USB物理拓扑结构
USB的物理拓扑结构是一个分层的星形拓扑结构,Hub是每个星形拓扑结构的中心,如下图所示。
USB2.0协议中,以 Host-Root Hub为起点,最多支持7层(Tier),也就是说一个USB 系统中最多可以允许 5个Hub 级联。
每个初始化成功的USB设备(USB设备和USB集线器)都有一个唯一的7位二进制地址,也就是说一个主机最多可以同时支持 128 个地址,由于地址 0 作为默认地址,只在设备枚举期间临时使用,不能被分配给任何一个设备,因此理论上一个USB HOST最多可以同时支持127设备。
低层的集线器或设备进行数据传输时,都是共享的上一层集线器的带宽,过多的集线器串联会导致每个设备分配到的带宽变小,同时过多的集线器串联可能会导致每个从机的供电量变小,不正常运行,而 Usb Hub 也是需要占用地址的,所以实际可支持的USB设备的数量将小于 127。
4.3 USB逻辑拓扑结构
逻辑拓扑结构是站在USB HOST的角度来讲的,对USB HOST而言,所有连接到该USB总线上的设备具有同等的地位关系,HOST对这些设备采用相同的方式寻址访问。尽管物理连接上,有的设备需要USB Hub中继访问,有些USB设备是直接访问,但在逻辑上HUB是透明的,所以USB设备和HOST是直接连接的关系。
4.4 USB软件架构
USB软件系统将USB 设备、主机划分为不同的层次和模块,可以分为功能层、设备层和总线接口层3个层次,如下图所示。图中的黑箭头表示实际的数据流,灰箭头表示逻辑上的数据流。
每层的功能描述如下:
- 功能层完成功能级的描述、定义和行为;
- 设备层则完成从功能层到总线接口层的数据转换,把一次功能层的行为转换为一次一次的基本传输;
- USB 总线接口层则处理编码后Bit 流,完成数据传输的物理层实现和总线管理。
这些复杂的层次和模块划分主要有两个好处:
- 一是可以规范设备和主机的行为,消除不同硬件厂商的区别,减少兼容性的问题;
- 二是可以将 USB 软件开发的工作量细化,硬件工程师可以集中精力设计设备的总线接口层,而软件工程师可以只需要考虑优化用户界面。
4.5 USB数据流模型
下图是一个完整的USB数据传输过程。图中的黑箭头表示实际的数据流,灰箭头表示USB的数据传输机制。
从逻辑上讲 USB数据的传输是通过管道进行的,USB系统软件通过默认控制管(与端点0相对应的管道)管理设备,设备驱动程序通过其它的管道来管理设备的功能接口,实现数据交互。下图是一个简化的USB通信框图,体现了USB通信系统中数据流、端点、主机内存缓冲区和管道之间的关系。
4.5.1 USB设备端点
端点是USB设备端的概念。端点是设备内部的数据传输终点,实际上就是一个数据缓冲区(Buffer),是真实的物理单元。这些端点在设备出厂时就已定义好的,每一个端点都有唯一的地址和属性。
在USB主机看来,每个USB设备就是端点的集合,主机只能通过端点与设备进行通讯。设备支持端点的数量是有限的,除默认端点外(端点0),低速设备最多支持 2 组端点(2 个输入(IN),2 个输出(OUT)), 高速和全速设备最多支持 15 组端点。
USB端点按功能可分为控制端点和数据端点。
- 控制端点在USB设备端就是0地址端点。每个USB设备都必须包括一个USB控制端点,并且这个端点是双向的,其主要功能是主机实现对设备的配置。
- 数据端点用于数据的传输,一个 USB 设备可以包括若干个数据端点,不同的端点以端点编号和方向区分,不同的端点有不同的特性,可以支持不同的传输类型、访问间隔以及最大数据包大小等。数据端点只支持一个方向的数据传输。
端点的上述特性通过端点描述符来体现。
4.5.2 USB管道
USB数据的传输,宏观的看来是在主机和设备之间进行;微观的看是在主机软件Buffer和设备端点之间进行,可以认为USB 通讯就是主机软件Buffer和设备端点之间的数据交换,交换的通道即称为管道。
管道是USB在软件层面上的一个抽象概念。管道代表主机软件buffer和设备端点之间移动数据的能力,是对USB设备端点的软件抽象,它包括USB设备端点的所有信息,比如带宽使用、传输类型、传输方向和最大有效数据长度等。
USB管道有两种类型:
- 流管道(Stream Pipe):通过管道传输的数据没有USB定义的结构,只支持单向传输,即IN或OUT。流管道支持中断传输、同步传输和批量传输。
- 信息管道(Message Pipe):通过管道移动的数据具有一些USB定义的结构。允许数据双向流动并且仅支持控制传输。
管道随着主机和设备的连接的建立而建立,当移除设备时,管道也跟着被移除。任何USB设备一旦上电就存在一个信息管道,即默认控制管道(Default Control Pipe),此管道使用端点0,USB 主机通过该管道来获取设备的描述、配置、状态,并对设备进行配置,USB 设备的即插即用特性即依赖于此。
总结起来,USB端点是物理层面上设备实际执行数据收发工作的硬件实体,而USB管道则是软件层面上抽象出的一种逻辑结构,它封装了与某个特定端点交互的所有细节,使得主机操作系统能够高效地管理和控制与USB设备的数据通信。
4.6 USB即插即用功能
所谓即插即用(Plug & Play)主要包含两个方面的内容:一是热插拔,一是枚举。热插拔由物理层实现,而枚举则主要依靠软件协议实现。
4.6.1 热插拔
热插拔即带电拔插 ,是指设备能够带电接入或者移出正在工作的系统 ,而不影响系统工作的技术。
USB采用四线电缆来传输信号,如上图所示,其中D+ 和 D- 是一对差分信号线,使用3.3V 的电平,VBus 是5V的电源。
如图2.4所示,主机的D+与D-都用15K电阻接地,使得在没有设备插入的时候D+与D-上的电平始终为低。全速设备的D+通过1.5K电阻上拉到3.3V,而低速设备的D-通过1.5K电阻上拉到3.3V,这使得在设备插入主机的时候,D+或D-上会产生一个上升沿,如上图2.5所示,主机就是依靠这个上升沿判断出设备的插入和插入设备的类型(全速设备还是低速设备)。
同样的,如上图所示,在设备拔出的过程中主机也会检测到D+或D-上电平的变化(由高到低)然后识别到设备断开。这就是热插拔的原理。
高速设备初始是以一个全速设备的身份出现的,即和全速设备一样,D+线上有一个1.5k的上拉电阻。然后主机和设备通过一系列握手信号确认双方的身份,这里对速度的检测是双向的,只有两者都支持高速模式,后续的通信才会切换到高速模式。
4.6.2 枚举
USB设备枚举一般会经过插入、供电、初始化、分配地址,配置,获取设备描述符、获取配置描述符、获取字符串描述符和配置设备这么几个过程。各过程设备的状态梳理如下表:
总线枚举依靠软件协议实现,主机端在枚举过程中会为设备安装相应的驱动程序,枚举完毕后主机就能与设备进行通讯了。 下图是主机端在枚举过程中,设备状态详细的跳转流程图。
4.7 USB供电方式
USB 支持“总线供电”和“自供电”两种供电模式。
自供电就是由设备自己提供电源,设备不需要从VBus上取得电流,这类设备的功率不受USB 协议的限制。
总线供电模式,设备完全从VBus上取得电流,它们的功率受USB协议的限制,一般不能超过500mA。总线供电时,设备有两种工作状态:一是正常工作(Normal)状态,一是挂起(Suspend)状态。USB 协议规定,如果总线供电时设备在3ms内没有进行总线操作,即总线处于空闲态,设备需要自动进入挂起状态,而挂起的设备从总线上吸收的电流必须小于 500uA。总线供电设备在进入挂起状态以后,可以通过唤醒(Resume) 操作恢复到正常工作状态。
4.8 USB数据编解码和位填充
USB2.0采用NRZI(Non-Return-to-Zero Inverted Code,反向不归零编码)对发送的数据包进行编码:
- 输入数据0, 编码成“电平翻转”
- 输入数据1, 编码成“电平不变”
USB2.0协议规定,主机在NRZI编码前会对原始数据流进行位填充:数据中每连续六个1后插入一个0,这给USB设备接收器逻辑每七位时间至少一次数据转换。
NZRI编码的每次翻转(每个逻辑0)都是一次同步的过程,接收方通过同步域(SYNC)来计算发送方的频率,以便用这个频率来继续采样,以保证数据和时钟锁定。
4.9 USB通信方向
USB2.0规范中,USB的数据传输仅支持半双工,因为仅有一对差分信号线,数据方向只能是主机->从机或从机->主机。USB是一条轮询总线,在USB体系中,每次传输都是由USB Host发起,数据的传输方向也是以USB Host为参考对象来评定的,主机接收(读取)数据叫做IN(IN事务),主机发出(写)数据叫OUT(OUT事务)。
USB2.0的规范中,使用的是小端模式,即低字节在先,高字节在后。
4.10 USB设备分类
为了解决不同厂商的同类设备的兼容性问题 ,USB协议规定了很多标准类 ,同类的设备所有厂商必须按相同的格式传输数据,否则需单独指明驱动程序。下表是常见的USB类,USB类需要在设备描述符中指明。
4.11 USB电平标准和总线状态
下表是USB2.0低速、全速和高速模式下的电平标准。
根据功能和电平状态,USB2.0定义了多种总线状体。
下表7-2显示了USB2.0低速和全速总线信号1、信号0、SE0状态、SE1状态、J状态、K状态、空闲IDLE状态下D+、D-线分别对应的电平信号范围。
下表7-3显示了USB2.0高速总线信号1、信号0、J状态、K状态、Chirp J状态、Chirp K状态、空闲IDLE状态下D+、D-线分别对应的电平信号范围。