USB总线-USB协议简介(一)
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) | ---- | 40Gbps | 100瓦 | single-lane或dual-lane,兼容Thunderbolt3 | 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)广播到每一个设备
参考资料
- Universal Serial Bus Specification Revision 2.0
- Universal Serial Bus 3.2 Specification
- USB开发大全 第四版
- 圈圈教你玩USB
- Linux那些事之我是USB
- https://blog.csdn.net/raynorxyx/article/details/82980066
- https://pc.poppur.com/peijian/8820.html
USB总线-USB协议简介(一)相关推荐
- 第9课【USB协议】USB总线 接口 端点 管道 数据包 枚举 STM32_USB-FS-Device_Lib V4.1.0
目录 简介 背景 特点 版本 数据流模型 总线拓扑结构 主/从设备通信流 端点 管道 物理层 接口类型 USB Type-A USB Type-B USB Type-C 引脚定义 4PIN 9PIN ...
- USB总线简介(一)
USB(universal serial Bus)是一种"通用串行外部总线".首先,USB是一种"总线",它与计算机内部的总线(如PCI总线)不同,CPU不能通 ...
- USB 概述及协议基础
1.1 USB是什么 1. USB是什么: USB是通用串行总线(Universan Serial Bus)的缩写. 2. USB出现的原因: 1)支持热插拔,并且即插即用(PnP:Plug and ...
- Linux下的USB总线驱动 mouse
Linux下的USB总线驱动(03)--USB鼠标驱动 usbmouse.c USB鼠标驱动 usbmouse.c 原文链接:http://www.linuxidc.com/Linux/2012-12 ...
- Linux下的USB总线驱动 1
版权所有,转载请说明转自 http://my.csdn.NET/weiqing1981127 一.USB理论 1. USB概念概述 USB1.0版本速度1.5Mbps(低速USB) USB1 ...
- Linux USB 驱动开发实例 (三)—— 基于USB总线的无线网卡浅析
回顾一下USB的相关知识 USB(Universal Serial Bus)总线又叫通用串行外部总线,它是20世纪90年代发展起来的.USB接口现在得到了广泛的应用和普及,现在的PC机中都带有大量 ...
- ZYNQ学习之路9.USB总线学习(二)
Linux中USB驱动程序依然遵循标准的设备驱动模型--总线.设备.驱动.和I2C总线设备驱动一样,所有的USB驱动程序都必须创建的主要结构体是struct usb_driver,它们向USB核心代码 ...
- *Linux下的USB总线驱动 u盘驱动分析*
Linux下的USB总线驱动(三) u盘驱动分析 版权所有,转载请说明转自 http://my.csdn.net/weiqing1981127 https://www.xuebuyuan.com/13 ...
- USB虚拟总线驱动开发扩展之(利用虚拟USB总线驱动实现U盘模拟)
by fanxiushu 2020-03-25 转载或引用请注明原始作者. USB虚拟总线驱动的使用范围是非常广泛的,可以使用它来模拟各种通用的USB设备. 以前的文章阐述过基于windows平台和基 ...
- USB总线驱动及鼠标驱动实例
转自:https://blog.csdn.net/liangzc1124/article/details/119333357.https://www.cnblogs.com/lifexy/p/7631 ...
最新文章
- Zabbix-3.0.3实现微信(WeChat)告警
- 关于计算机应用技术的周记,计算机应用技术专业实习周记范文
- 常见的安全应用识别技术有哪些?
- Linux中添加pycharm源,linux下python+pycharm安装
- [html] IE6文字溢出BUG(别名:多出来的猪、谍影重重)怎么解决呢?
- struts2:JSON在struts中的应用(JSP页面中将对象转换为JSON字符串提交、JSP页面中获取后台Response返回的JSON对象)...
- 利用Linq对集合元素合并、去重复处理
- php 用户之间通信,PHP,javascript,ajax-2位用户之间的通信
- VUE 批量导出、导入Excel
- 2021年中国及各省市结婚登记人数、离婚登记人数、结婚率、离婚率、婚姻的正负面效应及政策建议分析[图]
- 微信小程序 开发运营接入指南 设计规则
- 阿里云数据库怎么使用
- PRISM 下载安装
- Python编程练习:斐波那契数列
- 重大危险源可视化GIS管理系统
- wifi热点共享android上网 网关 静态ip,公共WIFI热点无线上网 - 几种Wifi无线网络上网方式及其组建方法...
- 公交充值之——北京一卡通过期延期操作
- 算法概念【PPT整理】
- Selenium2Library库中没有系统关键字select window by handle咋办?
- 北大青鸟课程与思科等其它IT培训课程的区别
热门文章
- 电子密码锁设计(附源码和原理图)
- 大一计算机论文_大学计算机论文
- [源码和报告分享]基于Java的局域网聊天工具
- 触摸屏查询软件1.8.4下载
- 80x86汇编小站站长简单介绍-2014年08月23日
- Mac book Pro BootCamp驱动下载地址
- FireMonkey TListView的用法二:ItemAppearance为客制化外观Custom
- 职业培训学校计算机培训计划,职业技能学校关于计算机应用一级MS-Office培训开班计划.doc...
- php留言板回复功能,php简单的留言板与回复功能具体实现_PHP教程
- 手把手教你如何进行内网渗透