USB2.0协议简介

时间:2024-04-02 09:42:21

作者:AirCity 2019.11.17
[email protected]
本文所有权归作者Aircity所有

1 本文目的

USB接口是电子设备经常用到的接口,其接口协议已经更新到USB3.1. 但对于生活中常见的电子设备而言,USB3.0及以上的接口很少用到。本文只介绍USB1.0,USB1.1,USB2.0这几个协议,重点介绍USB2.0。
USB2.0 Specification有650页之多,想要读完,可不是一时半会儿的事儿。此外,USB家族协议还有HID(Human interface Devices),规定了USB键盘,USB MIC等设备的接口规范。USB Host设备也有自己相关的标准协议。这些都不在USB2.0 Specification中,如果都要一一详读,工作量巨大,况且没必要这么做。
不同细分领域的从业人员,需要关注的协议内容不同,USB2.0 Specification的章节划分以及主要内容如下:
USB2.0协议简介
USB2.0协议简介
USB2.0协议简介
软件开发人员需要阅读章节4,5,9,10. 硬件开发人员需要阅读章节4,5,6,7.
我是一名硬件工程师,本文也将从硬件的角度,理解USB2.0的相关内容。
如果你是软件工程师,可以看下我下一章节所提供的参考资料,有一些是中文版,可以帮助你找到想要的内容。

2 参考文档

《Universal Serial Bus Specification》 Revision 2.0 http://www.usb.org这个网站可以下载到USB标准协议的所有内容。
《USB in a Nutshell》 WWW.beyondlogic.org
《USB开发大全(第四版)》作者Jane Axelson,李鸿鹏等译
《USB基础知识概论》这是个大牛自建网站上写的文章,连接如下,搞软件的同事可以去翻翻https://www.crifan.com/files/doc/docbook/usb_basic/release/html/usb_basic.html
如果需要如上文档的电子版,可以加我微信

3 USB概述

3.1 USB演变历史

USB 1.0——1996.1发布,第一次用在计算机上是在WIN95上。
USB1.1——1998.9发布,增加了一个新的传输类型(终端 OUT)
USB2.0——2000.4发布,添加了高速模式(HS)
USB2.5——2010.9发布,增加了Wireless协议,用的人很少。
USB3.0——2008.11发布,增加了超高速模式,USB从半双工变成了全双工总线,速率高达5Gbit/s。

3.2 USB速率

USB1.1支持低速(Low Speed,LS)=1.5Mbps和全速(Full Speed, FS)=12Mbps
USB2.0支持高速(High Speed,HS)=480Mbps。
USB3.0支持超高速(Super Speed,SS)=5Gbps。
低速USB设备对于鼠标、键盘等简单设备已经足够用了,而且速率低,抗EMI能力强,硬件主板芯片设计要求低。但是随着多媒体的发展,传输数据文件的大小不断增大,就必须用USB2.0的高速设备完成数据传输。比如USB2.0的U盘,会明显比USB1.x的U盘传输速度快。
通常情况下USB2.0线缆不会超过5米,USB2.0线缆不会超过3m。
3.3 USB控制器类型
由于历史原因,导致USB的主机控制器,出现了多种不同的类型,即OHCI和UHCI,EHCI,和xHCI。不论是那种USB主机控制器,简称主控,都是符合对应的USB的规范的,都是实现了对应的USB规范中所规定的USB主控所要的那些事情的。只不过是不同的USB主控的类型,有着不同的特点。下面对这些不同类型的USB主控制器,进行简要的解释。
USB2.0协议简介

3.3.1 OHCI和UHCI

OHCI,Open Host Controller Interface,创立者是Compaq,Microsoft和National Semiconductor。
UHCI,Universal Host Controller Interface,创立者是Intel。
两者之间的相同点是:
不论是OHCI还是UHCI都是对应于USB 1.1的标准的,都是完全符合USB协议标准的。
区别在于:
只是各自的实现方式有些略微不同而已。当然对应的具体的性能,也略有差别,具体的差异,和实际的应用有关系。
但是本身OHCI和UHCI的区别在于:
虽然都是实现了USB1.1协议规范,但是在功能划分上,OHCI更多地把要做的事情,用硬件来实现,因此,实现OHCI的USB控制器的软件驱动的开发工作,相对要容易些,软件要做的事情,相对较少。
对应地,OHCI更多地应用在扩展卡,尤其是嵌入式领域中,常见的很多开发板中的USB的控制器,很多都是OHCI的。
而UHCI把更多的功能,留给了软件,相对来说,软件做的事情,即负担要重些。但是实现对应的UHCI的硬件的USB控制器,价格上,就相对便宜些。对应地,UHCI更多地应用在PC机中的主板上的USB控制器。

3.3.2 EHCI

EHCI,Enhanced Host Controller Interface。简单说就是,EHCI定义了USB 2.0的主机控制器的规范,定义了USB 2.0的主控,需要包括哪些硬件实现,需要实现哪些功能,其也对应着对应的系统软件,所面对的是哪些接口。
EHCI对USB主控的定义,详细到了寄存器的级别了,即定义了你USB主控,都要实现哪些对应的功能和对应的寄存器有哪些,分别是何种功能等。然后对应的软件驱动人员,去写USB主控的驱动的时候,也就清楚有哪些可以利用的系统资源,如何去使用这些资源,读取,设置对应的寄存器,实现对应的功能了。对应的EHCI规范,可以去Intel的官网找到

3.3.3 xHCI

xHCI,Extensible Host Controller Interface同EHCI是针对USB 2.0类似,xHCI是针对的USB 3.0规范。也是定义了USB 3.0主控需要如何实现,需要包含哪些功能,也是提供了寄存器级别的定义。对应的xHCI规范,可以去Intel的官网找到。

4 USB2.0引脚定义

USB2.0协议简介
USB2.0协议简介

5 USB接口类型

USB2.0协议简介
USB2.0协议简介USB2.0协议简介

6 USB枚举过程(速率识别及通信)

进行通信前,Host需要了解设备,并为其分配相应的驱动。枚举就是互相了解的过程,这个过程包括,确定设备速率,给设备分配地址,从设备读取描术字,分配并加载驱动程序以及选择规定了设备功耗要求和接口的配置信息。枚举过程如下:

  1. 设备插入主机,此时设备可以从主机获得100mA电流
  2. 主机集线器开始检测设备。集线器在D+和D-上有一个15K的下拉电阻,集线器会监测D+和D-线上的电压。低速设备在D-上有一个1.5K上拉(到3.3V)电阻,而全速和高速设备的上拉电阻在D+上。集线器监测到任何一根线上的电压,就认为设备已连接到主机。
  3. 主机获悉新设备。主机的集线器得知设备已经插入,向主机上报事件。主机得知事件,给集线器一个Get Port Status请求,以了解更多信息。
  4. 集线器监测设备是LS还是FS。如何区分,请看下面章节。之后集线器发送给你主机信息,然后相应下一个Get Port Status请求。
  5. 集线器复位新设备。主机得知有新设备后,立即发送Get Port Status请求,要求集线器复位端口设备。这是D+和D-都拉低至少10ms。
  6. 主机了解全速设备是否支持高速状态。检测设备是否支持高速状态使用两个特殊信号状态。Chirp J状态只有D+线被驱动,Chirp K状态只有D-线被驱动。
    复位期间,高速设备会发送Chirp K信号。高速集线器检测到该Chirp K信号后,会立即响应一串KJKJKJ….。当设备检测到连续6个KJKJKJ的样式时,设备移除它的上拉电阻,然后以高速状态执行接下来的通信。如果集线器在收到K信号后,没有响应KJKJKJ,设备得知它连接到了一个全速设备,那就以全速模式通信。
  7. 集线器在设备和总线建建立一条信号路径。主机发送Get Port Status请求证明设备已经摆脱了复位状态。返回数据中的一个数据位将用于标明设备是否处于复位状态。若有必要,主机还会重复此请求直到设备离开复位状态。
    当集线器的复位信号被移除,设备处于缺省状态(Default state)。设备的USB寄存器都处于复位状态。且设备已经准备好响应断电0处的控制传输。设备会使用缺省地址00h来与主机通信。
  8. 主机发送Get Port Status请求以了解缺省管道的最大信息尺寸。
  9. 主机指定新的地址。
  10. 主机通过新地址了继续解设备能力。类似第8步,但比第8步了解的内容更多。
  11. 主机制定并加载设备驱动程序。加载INF文件。
  12. 主机的设备驱动程序会选择配置。主机从设备描数字那里了解完设备信息后,发送Set Configuration请求某一种配置。设备接到请求,进入相应配置,设备接口就算是使能了。
    以上内容,详见《USB开发大全》,本文重点关注1)到6)这几个枚举过程,并且有实测波形来说明。硬件工程师只也需要这几个枚举过程。

7 手机插入USB的实测波形

下图是手机(USB2.0高速设备)插入电脑端口的实测波形,阶段(1)是充电器识别过程,详见文章《Battery Charging Specification(BC1.2)实测波形》和《一张图看懂Battery Charging Specification 1.2(BC1.2)USB充电协议》。阶段(2)是USB枚举和通信过程。其中阶段(2)还可以细分为几个阶段。
USB2.0协议简介
把阶段(2)放大,如下图。
USB2.0协议简介
(a) USB全速/低速设备判定阶段;这个阶段,USB高速设备也当做全速设备来判断。HOST端的D+和D-线上都有15K下拉电阻。如果插入的是USB高速或全速设备,设备的D+上有一个1.5K上拉(到3.3V)电阻,所以D+线被拉高。如果插入的是USB低速设备,D-线被拉高。由于插入的手机是高速设备,可以看到D+线被拉高。
USB2.0协议简介
(b) USB HOST立即拉低D+和D-,也就是SE0状态,持续10ms,使USB设备复位。
( c)USB设备发送Chirp K信号。USB设备内部持续向D-灌电流17.78mA。USB HOST在发送SE0的阶段,已经使能了D+和D-线上对GND的45ohm电阻。这个时候D+和D-线的阻抗结构如下:
USB2.0协议简介
所以D+线电压接近0V,D-线电压=17.78mA*45ohm=800mV,从图中也可以看到D+信号在(b)和(c)阶段都接近于0V。
(d) HOST接收到K信号后,立即回应一连串的KJKJKJ…(也是Hub交替地向D+和D-灌17.78mA电流)。
(e) 当USB设备检测到来自Hub的三对KJ后,它在500us内切换到高速模式,使能内部D+和D-对GND的45ohm电阻,断开1.5K上拉电阻。由于Hub在一直发送KJ信号,这是在D+和D-上观测到的电压都是400mV。此时的阻抗结构如下:
USB2.0协议简介
在完成数个KJ信号之后,Hub会再次发送一次SE0复位USB设备,然后开始480Mbps的通信。