USB2.0学习1--基本概念
USB全称是 Universal Serial Bus,即通用串行总线,是一种计算机与外围设备进行数据交互的串行通信标准。USB协议是在1994年底由英特尔、IBM、Microsoft等公司联合提出的,现由USB协会(USB-IF)管理。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-线分别对应的电平信号范围。
更多推荐
所有评论(0)