USB2.0协议简介(有实测波形解析) |
您所在的位置:网站首页 › usb接口工作过程 › USB2.0协议简介(有实测波形解析) |
作者: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的章节划分以及主要内容如下: 《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速率
由于历史原因,导致USB的主机控制器,出现了多种不同的类型,即OHCI和UHCI,EHCI,和xHCI。不论是那种USB主机控制器,简称主控,都是符合对应的USB的规范的,都是实现了对应的USB规范中所规定的USB主控所要的那些事情的。只不过是不同的USB主控的类型,有着不同的特点。下面对这些不同类型的USB主控制器,进行简要的解释。 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 EHCIEHCI,Enhanced Host Controller Interface。简单说就是,EHCI定义了USB 2.0的主机控制器的规范,定义了USB 2.0的主控,需要包括哪些硬件实现,需要实现哪些功能,其也对应着对应的系统软件,所面对的是哪些接口。 EHCI对USB主控的定义,详细到了寄存器的级别了,即定义了你USB主控,都要实现哪些对应的功能和对应的寄存器有哪些,分别是何种功能等。然后对应的软件驱动人员,去写USB主控的驱动的时候,也就清楚有哪些可以利用的系统资源,如何去使用这些资源,读取,设置对应的寄存器,实现对应的功能了。对应的EHCI规范,可以去Intel的官网找到 3.3.3 xHCIxHCI,Extensible Host Controller Interface同EHCI是针对USB 2.0类似,xHCI是针对的USB 3.0规范。也是定义了USB 3.0主控需要如何实现,需要包含哪些功能,也是提供了寄存器级别的定义。对应的xHCI规范,可以去Intel的官网找到。 4 USB2.0引脚定义
我们常用的是Type A的大头,Micro B的小头。 进行通信前,Host需要了解设备,并为其分配相应的驱动。枚举就是互相了解的过程,这个过程包括,确定设备速率,给设备分配地址,从设备读取描术字,分配并加载驱动程序以及选择规定了设备功耗要求和接口的配置信息。枚举过程如下: 设备插入主机,此时设备可以从主机获得100mA电流主机集线器开始检测设备。集线器在D+和D-上有一个15K的下拉电阻,集线器会监测D+和D-线上的电压。低速设备在D-上有一个1.5K上拉(到3.3V)电阻,而全速和高速设备的上拉电阻在D+上。集线器监测到任何一根线上的电压,就认为设备已连接到主机。主机获悉新设备。主机的集线器得知设备已经插入,向主机上报事件。主机得知事件,给集线器一个Get Port Status请求,以了解更多信息。集线器监测设备是LS还是FS。如何区分,请看下面章节。之后集线器发送给你主机信息,然后相应下一个Get Port Status请求。集线器复位新设备。主机得知有新设备后,立即发送Get Port Status请求,要求集线器复位端口设备。这是D+和D-都拉低至少10ms。主机了解全速设备是否支持高速状态。检测设备是否支持高速状态使用两个特殊信号状态。Chirp J状态只有D+线被驱动,Chirp K状态只有D-线被驱动。 复位期间,高速设备会发送Chirp K信号。高速集线器检测到该Chirp K信号后,会立即响应一串KJKJKJ….。当设备检测到连续6个KJKJKJ的样式时,设备移除它的上拉电阻,然后以高速状态执行接下来的通信。如果集线器在收到K信号后,没有响应KJKJKJ,设备得知它连接到了一个全速设备,那就以全速模式通信。集线器在设备和总线建建立一条信号路径。主机发送Get Port Status请求证明设备已经摆脱了复位状态。返回数据中的一个数据位将用于标明设备是否处于复位状态。若有必要,主机还会重复此请求直到设备离开复位状态。 当集线器的复位信号被移除,设备处于缺省状态(Default state)。设备的USB寄存器都处于复位状态。且设备已经准备好响应断电0处的控制传输。设备会使用缺省地址00h来与主机通信。主机发送Get Port Status请求以了解缺省管道的最大信息尺寸。主机指定新的地址。主机通过新地址了继续解设备能力。类似第8步,但比第8步了解的内容更多。主机制定并加载设备驱动程序。加载INF文件。主机的设备驱动程序会选择配置。主机从设备描数字那里了解完设备信息后,发送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枚举和通信过程。 上行upstream、下行downstream、主机HOST、设备Device的形象图: |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |