USB基础知识概论

来源:互联网 发布:小米mix2淘宝优惠卷 编辑:程序博客网 时间:2024/05/29 08:12

USB基础知识概论

版本:v0.9.2

Crifan Li

摘要

本文主要介绍了USB协议的基础知识,包括USB协议的来龙去脉,OHCI/UHCI/EHCI/xHCI之间的区别和联系,USB的firmware,以及USB 2.0协议的概览,USB的枚举的详细过程,OHCI的一些特点

[提示]本文提供多种格式供:
在线阅读HTMLHTMLsPDFCHMTXTRTFWEBHELP下载(7zip压缩包)HTMLHTMLsPDFCHMTXTRTFWEBHELP

HTML版本的在线地址为:

http://www.crifan.com/files/doc/docbook/usb_basic/release/html/usb_basic.html

有任何意见,建议,提交bug等,都欢迎去讨论组发帖讨论:

http://www.crifan.com/bbs/categories/usb_basic/

2015-05-26

修订历史修订 0.52011-10-06crl
  1. USB基础知识概论
修订 0.9.22015-05-26crl
  1. 通过Docbook发布
  2. 添加了USB协议细节部分的内容
  3. 添加了USB OHCI学习笔记
  4. 更新了所有的xml:id

本文章遵从:署名-非商业性使用 2.5 中国大陆(CC BY-NC 2.5)


目录

缩略词
正文之前
1. 此文目的
2. 关于一些USB方面的文档
2.1. 大而全的USB英文资料
2.2. 简明扼要的USB英文资料
2.3. 全系列的介绍Linux下的USB中文资料
3. 声明
1. USB的来龙去脉
1.1. USB是什么
1.2. 为何要有USB
2. USB相关的基础知识
2.1. USB相关的硬件
2.1.1. USB控制器类型:OHCI,UHCI,EHCI,xHCI
2.1.1.1. OHCI和UHCI
2.1.1.1.1. 为何Intel设计的UHCI把更多的任务都留给软件实现?
2.1.1.1.2. 为何嵌入式系统中的USB主控多用OHCI,而非UHCI?
2.1.1.1.3. OHCI和UHCI技术细节上的区别
2.1.1.2. EHCI
2.1.1.3. xHCI
2.1.1.4. OHCI,UHCI,EHCI,xHCI的区别和联系
2.1.2. USB接口的引脚定义
2.1.3. USB的接口(connector)类型
2.2. USB相关的软件
2.2.1. USB设备端的固件(Firmware)
2.2.2. USB主机(Host)端的USB驱动和软件
2.2.3. 其他一些USB测试和协议分析等软件
3. USB协议概览
3.1. USB 2.0协议内容概览
3.2. USB协议的版本和支持的速度
3.2.1. 为何USB的速度,最开始没有设计的更快些?
3.3. USB系统的核心是Host
3.4. USB中用NRZI来编码数据
3.4.1. USB中用Bit-Stuffing来同步时钟信号
4. USB协议细节
4.1. USB Class
4.1.1. 为何要搞这么多USB的Class
4.2. USB的框架
4.3. USB Transfer and Transaction
4.4. USB枚举(Emulation)
4.4.1. 什么是USB枚举
4.4.2. USB枚举的过程
4.4.3. 举例详解USB的枚举过程
4.4.3.1. USB枚举示例数据
4.4.3.2. 详细分析USB枚举数据的每个字段的具体含义
4.5. USB OHCI学习笔记
参考书目

插图清单

1.1. USB与其他总线的异同
1.2. PC机箱后面的众多接口
1.3. 有了USB接口之后的PC机箱背后的接口
2.1. USB协议分析工具:Ellisys的USB Explorer 260
3.1. I2C数据编码格式
3.2. 归零编码
3.3. 非归零编码
3.4. NRZ和NRZI
4.1. USB Implementation Areas
4.2. USB Physical Bus Topology
4.3. USB Logical Bus Topology
4.4. USB Communication Flow
4.5. USB Layers in Linux
4.6. USB Transfer and Transaction
4.7. Configuration Descriptor: 0902420002010480E1
4.8. Interface Descriptor: 0904000002FF000000
4.9. Endpoint (Interrupt Out) Descriptor: 07050103400001
4.10. Endpoint (Interrupt In) Descriptor: 07058103400001
4.11. Interface Descriptor: 090401000103000000
4.12. Endpoint (Interrupt In 2) Descriptor: 0705820340000A
4.13. USB主机中软件和硬件之间的关系
4.14. USB Communication Channel
4.15. USB Typical List Structure

表格清单

2.1. 不同USB控制器类型OHCI,UHCI,EHCI,xHCI的区别和联系
2.2. USB 1.x/2.0的引脚定义
2.3. USB 3.0的引脚定义
2.4. USB接口分类
3.1. USB 2.0协议的内容组成
3.2. USB协议的版本的演化
4.1. USB Class表
4.2. USB Descriptor Type
4.3. USB Configuration Descriptors
4.4. USB Interface Descriptors
4.5. USB Endpoint Descriptors
4.6. USB HID Descriptors
4.7. USB HID Descriptor: 090401000103000000

缩略词

EHCI (EHCI)

Enhanced Host Controller Interface

NRZ (NRZ)

Non-Return-to-Zero

NRZI (NRZI)

Non-Return-to-Zero Inverted

OHCI (OHCI)

Open Host Controller Interface

RZ (RZ)

Return-to-Zero

SYNC (SYNC)

Synchronize

UHCI (UHCI)

Universal Host Controller Interface

USB (USB)

Universal Serial Bus

通用串行总线

xHCI (xHCI)

eXtensible Host Controller Interface

正文之前

目录

1. 此文目的
2. 关于一些USB方面的文档
2.1. 大而全的USB英文资料
2.2. 简明扼要的USB英文资料
2.3. 全系列的介绍Linux下的USB中文资料
3. 声明

1. 此文目的

由于USB所涉及的知识太多,如果想要在一篇文章里,把USB的方方面面的内容,都解释的很清楚,那几乎是不可能的。

因此,此文目的,不是为了把USB的所有的事情都写出来,而是让对USB不懂的人,通过此文档,能对USB有个基本的认识,并且搞懂USB世界中的基本的术语的含义。

即,此文目的,是为了给不熟悉USB的人,一个总体的概述,以及解释一些必要的USB方面的基本知识。

这样,如果想要更细节的去了解USB的知识,也知道从哪里入手,以及如何去找相关资料区学习了。

2. 关于一些USB方面的文档

USB很复杂,所以,如果能把复杂的东西解释的清楚的,不是很容易。

而且由于USB涉及知识面也很广,所以也很难简短地描述清楚。

2.1. 大而全的USB英文资料

对于众多的现存的USB的文章或书籍,我所见过的,能把USB讲的透彻的,算是

英文资料:《USB Complete》,中文翻译为《USB大全》,目前最新版本是第四版。

其主页是:

http://www.lvr.com/usbc.htm

网上也可以找到盗版的电子版的,第三版的有中文翻译,第四版的只有英文原版。

2.2. 简明扼要的USB英文资料

另外,简明扼要地,把USB讲解的很清楚的,我觉得算是《USB in a Nutshell》了,网上随便都可以搜到此文的pdf版本,比如:

USB in a Nutshell - Making sense of the USB standard

而此文,也是主要根据此贴而来,基本可以算是《USB in a Nutshell》的中文版吧,然后另外又添加了一些必要的知识,以求把USB讲解的更加清楚。

2.3. 全系列的介绍Linux下的USB中文资料

另外,关于中文方面的资料,觉得写的比较全,解释的比较清楚的,算是fudan_abc写的《Linux那些事儿系列》,是一个系列的,好多个文档的。详细资料,已整理放到这里了:

【很好的学习Linux驱动的教材】Linux那些事儿系列[全][pdf]

3. 声明

由于本人知识水平有限,错误在所难免,欢迎指正。

此文欢迎拷贝传播,但是所有权本人独有,未经许可,严谨用于其他商业等用途。

更多建议,意见,吐槽,都可以联系偶:admin (at) crifan.com

第 1 章 USB的来龙去脉

目录

1.1. USB是什么
1.2. 为何要有USB

摘要

1.1. USB是什么

USB是Universal Serial Bus的缩写,中文译为通用串行总线。

所以,从字面意思上,善于思考的人,就问有疑问:

那么与此USB相比,其他还有哪些非串行的总线,以及和此通用的串行总线来说,其他还有哪些相对“不通用”的串行总线呢?

对此,借用《USB Complete》里面所总结的,关于USB和其他接口的区别,来解释一下:

图 1.1. USB与其他总线的异同

USB与其他总线的异同

从上述表格中,表面上看,好像也没看出USB相对其他接口,有多么特别明显的优点,而只是看到在某些参数上,比其他某些接口参数更高,而在别的某些参数上,比其他接口低。

关于细节的区别,不是此讨论的重点,此处,我们至少可以看出,除了USB接口外,目前已存在的接口,还是很多的,而且各种接口实际上从硬件上也是形状各异,互相也都有自己的应用领域,而且无法兼容。基于此背景,才有下面的解释,以说明,为何会出现这么个USB接口。

此处,简单的说,USB就是一种接口,一种总线。

1.2. 为何要有USB

上面已经提到了,在USB出现之前,其实计算机领域中,已经存在众多的接口,而且不同的应用领域,已有一些相对来说是广泛使用的各种接口了。

但是,对于计算机等使用的普通用户来说,由于接口太多,而容易被搞得晕头转向。再加上各个接口从硬件形状和软件配置也都不一样,导致不兼容,为了不同的应用,而要配置多种不同的硬件接口,设置对于有些硬件接口来说,还需要手动去配置一些更细节的参数。

关于USB出现之前,计算机领域中的接口太多太繁杂,可以用下面这张,关于PC机箱背后的接口的图片来说明:

图 1.2. PC机箱后面的众多接口

PC机箱后面的众多接口

所以,总的来说,在USB出现之前,各种接口太多,而且都不太容易使用,互相之间的兼容性也较差,因此,才出现了USB。

而万能的USB接口出现的话,整个PC机箱背后的接口,就不那么繁杂,显得清静多了:

图 1.3. 有了USB接口之后的PC机箱背后的接口

有了USB接口之后的PC机箱背后的接口

USB出现的最初的目的,根据USB规范中的解释,是为了:

  1. 将PC和电话能连起来

    由于大家都认识到,下一代的应用,肯定是实现计算机设备和通讯设备的完美融合。而且,为了实现移动领域内的人机数据的交互,也需要方便且不贵的连接方案。

    但是,计算机领域和通讯领域却是各自为政的发展,没有考虑互联性。由此,USB的出现,就是为了解决这一类互联问题的

  2. 方便用户使用

    以前的一些设备,多数不支持即插即用,而且很多设备还需要懂行的用户去手动配置,然后才可以正常工作

    而USB的出现,使得用户不用关心设备的细节,不需要去另外再配置什么参数,直接插上就可以用了,而且还支持即插即用,很是方便

  3. 接口扩展性要好

    之前的众多接口,导致不同的应用,需要使用不同的接口,很是繁琐。

    USB的出现,支持众多的应用,都使用统一的USB的接口,方便了用户,不需要再搞懂各种接口的用途和差异。

总的来说,USB的出现,是希望通过此单个的USB接口,同时支持多种不同的应用,而且用户用起来也很方便,直接插上就能用了,也方便不同的设备的之间的互联。

说白了,就相当于在之前众多的接口之上,设计出一个USB这么个万能的接口,以后各种外设,都可以用这一种接口即可。

这估计也是USB的名称中的Universal通用的这一个词的来历吧。

第 2 章 USB相关的基础知识

目录

2.1. USB相关的硬件
2.1.1. USB控制器类型:OHCI,UHCI,EHCI,xHCI
2.1.1.1. OHCI和UHCI
2.1.1.1.1. 为何Intel设计的UHCI把更多的任务都留给软件实现?
2.1.1.1.2. 为何嵌入式系统中的USB主控多用OHCI,而非UHCI?
2.1.1.1.3. OHCI和UHCI技术细节上的区别
2.1.1.2. EHCI
2.1.1.3. xHCI
2.1.1.4. OHCI,UHCI,EHCI,xHCI的区别和联系
2.1.2. USB接口的引脚定义
2.1.3. USB的接口(connector)类型
2.2. USB相关的软件
2.2.1. USB设备端的固件(Firmware)
2.2.2. USB主机(Host)端的USB驱动和软件
2.2.3. 其他一些USB测试和协议分析等软件

摘要

在介绍USB协议的细节知识之前,有很多相关的软硬件的基础知识,需要了解一下。

TODO:

http://www.silabs.com/Support%20Documents/Software/USB_Overview.pdf去学习USB的基础知识后整理过来。

2.1. USB相关的硬件

USB设备,从物理上的逻辑结构来说,包含了主机Host端和设备Device端。

其中,主机Host端,有对应的硬件的USB的主机控制器Host Controller,而设备端,连接的是对应的USB设备。

2.1.1. USB控制器类型:OHCI,UHCI,EHCI,xHCI

由于历史原因,导致USB的主机控制器,出现了多种不同的类型,即OHCI和UHCI,EHCI,和xHCI。

不论是那种USB主机控制器,简称主控,都是符合对应的USB的规范的,都是实现了对应的USB规范中所规定的USB主控所要的那些事情的。只不过是不同的USB主控的类型,有着不同的特点。

下面对这些不同类型的USB主控制器,进行简要的解释。

2.1.1.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控制器。

2.1.1.1.1. 为何Intel设计的UHCI把更多的任务都留给软件实现?

对于两者的区别和实际的应用,自己分析,不难发现,其是有着内在的逻辑关系的。

因此,作为UHCI的创立者Intel,创立了UHCI,把更多的USB需要做的事情,留给了软件,这样就可以实现出相对教便宜的USB的主控制器了,可以用于PC端的CPU所对应的主板上,便宜的USB主控,当然相对市场来说,更容易多卖出去一点,有利于市场推广。

PC主板卖出的多了, 自然对应的Intel的CPU,也会多卖点,Intel自然可以赚更多的钱了。

2.1.1.1.2. 为何嵌入式系统中的USB主控多用OHCI,而非UHCI?

而对应的Compaq,Microsoft和National Semiconductor所创立的OHCI,由于把更多的USB要做的事情,都用硬件实现了,这样对应的软件驱动所要做的事情,就少了,这样就有利于实现对应的OHCI的USB主控的驱动了,这点对于嵌入式系统来说,尤其重要,因为本身嵌入式系统就是资源有限,所以要尽量少的利用其他资源,比如CPU资源,去实现特点的功能,所以,倾向于采用对软件资源要求少的OHCI,而不是UHCI,否则用了UHCI的USB主控的话,需要实现对应的驱动,软件要做的事情太多,不利于在嵌入式系统这有限的资源环境下实现。

2.1.1.1.3. OHCI和UHCI技术细节上的区别

关于OHCI和UCHI在技术细节方面,更加详细的区别主要有这些:

  1. 单帧内的stage的个数

    对于控制传输来说:

    • OHCI:在单个帧内,可以调度多个stage;
    • UHCI:在单个帧内,只调度一个stage。
  2. 单帧内的transaction的个数

    对于最大数据包大小小于64字节的Bulk端点来说:

    • OHCI:单个帧内,可能会有多个transaction。
    • UHCI:单个帧内,不超过一个transaction;
  3. 轮询的频率
    • OHCI:,即使端点描述符中,已经指定了最大延迟是255ms,但是OHCI主控还是会,至少每32ms就去轮询一次中断端点
    • UHCI:UHCI主控可以支持,但是不是必须要支持,更低频率地轮询

2.1.1.2. EHCI

EHCI,Enhanced Host Controller Interface。

简单说就是,EHCI定义了USB 2.0的主机控制器的规范,定义了USB 2.0的主控,需要包括哪些硬件实现,需要实现哪些功能,其也对应着对应的系统软件,所面对的是哪些接口。

EHCI对USB主控的定义,详细到了寄存器的级别了,即定义了你USB主控,都要实现哪些对应的功能和对应的寄存器有哪些,分别是何种功能等。然后对应的软件驱动人员,去写USB主控的驱动的时候,也就清楚有哪些可以利用的系统资源,如何去使用这些资源,读取,设置对应的寄存器,实现对应的功能了。

对应的EHCI规范,可以去Intel的官网找到:

EHCI Specification

2.1.1.3. xHCI

xHCI,Extensible Host Controller Interface

同EHCI是针对USB 2.0类似,xHCI是针对的USB 3.0规范。也是定义了USB 3.0主控需要如何实现,需要包含哪些功能,也是提供了寄存器级别的定义。

对应的xHCI规范,可以去Intel的官网找到:

Extensible Host Controller Interface (xHCI) Specification for USB 3.0

2.1.1.4. OHCI,UHCI,EHCI,xHCI的区别和联系

针对上述的解释,对USB的不同类型的主机控制器,简要概括如下:

表 2.1. 不同USB控制器类型OHCI,UHCI,EHCI,xHCI的区别和联系

USB主机控制器类型共同点区别对应的USB的协议和支持的速率创立者功能划分常用于OHCI都实现了对应的USB的规范中所要求的功能USB 1.1=Low Speed和Full SpeedCompaq,Microsoft和National Semiconductor硬件功能 > 软件功能⇒硬件做的事情更多,所以实现对应的软件驱动的任务,就相对较简单扩展卡,嵌入式开发板的USB主控UHCIIntel软件功能 > 硬件功能⇒软件的任务重,可以使用较便宜的硬件的USB控制器PC端的主板上的USB主控EHCIUSB 2.0=High SpeedIntel定义了USB 2.0主控中所要实现何种功能,以及如何实现各种USB 2.0主控xHCIUSB 3.0=Super SpeedIntel定义了USB 3.0主控中所要实现何种功能,以及如何实现各种USB 3.0主控

2.1.2. USB接口的引脚定义

USB接口的物理上的对应的引脚和对应含义等,可用下表概括:

表 2.2. USB 1.x/2.0的引脚定义

引脚名称电缆颜色描述1VBUSRed+5 V,电源2D−WhiteData −,数据线3D+GreenData +,数据线4GNDBlackGround,接地

表 2.3. USB 3.0的引脚定义

PinColorSignal name('A' connector)Signal name('B' connector)1RedVBUS2WhiteD−3GreenD+4BlackGND5BlueStdA_SSRX−StdA_SSTX−6YellowStdA_SSRX+StdA_SSTX+7ShieldGND_DRAIN8PurpleStdA_SSTX−StdA_SSRX−9OrangeStdA_SSTX+StdA_SSRX+ShellShellShield

2.1.3. USB的接口(connector)类型

由于USB的产生就是为了支持众多种应用的,而由于各种应用中,对于硬件接口的大小也有一些限制,比如有些小型设备或者移动式设备中,接口不能太大等,所以而设计出多种类型的接口,用于不同的应用。

在介绍插头和插座之前,先多解释一下,基本的叫法。

插头,plug,对应的也叫公口,即插别人的;

插座,receptacle,对应也叫做母口,即被插的;

对上述解释,想多了的,面壁去;没想多的,继续看技术介绍。

下面就来简单的介绍一下不同的USB接口类型,即各种不同的插头插座:

USB的接口类型,根据接口形状不同,主要可以分为三大类:

  1. 普通的硬件直接叫做Type
  2. 然后有小型版本的叫Mini迷你的
  3. 和更加小的,叫做Micro微小的

其中每一种大类中,又都可以分为两类

  1. A类(Type A)
  2. B类(Type B)

下面就用表格的形式,详细对比USB的各种接口,包括对应的插头和插座:

表 2.4. USB接口分类

USB接口(插头)概览大的分类细分特点插头图片示例对应的插座常见用途
TypeType A长方形
普通PC端Type B内部正方近乎形,外部是梯形
USB设备的接口MiniMini A小型版的梯形
数码相机,移动硬盘等移动设备Mini B小型版的长方形
MicroMicro A比Mini更扁
手机等移动设备Micro B

[提示]提示

目前多数手机厂商已宣布统一使用Micro USB接口作为手机充电器标准接口。

2.2. USB相关的软件

如果某个USB设备正常工作,除了对应的硬件之外,还需要对应的软件支持。

2.2.1. USB设备端的固件(Firmware)

而对于USB设备端来说,内部是需要有对应的设备端的驱动,常常称其为固件Firmware,其实现了对应的设备端的USB所要做的事情,主要是相应一些标准的请求,完成对应的数据读取和写入等。

2.2.2. USB主机(Host)端的USB驱动和软件

对应的,主机Host端,也需要对应的驱动,此部分驱动,不论是Linux下,还是Windows下,都已经实现了常见的驱动了,所以一般来说,很少需要驱动开发者再去写相关的驱动。

2.2.3. 其他一些USB测试和协议分析等软件

在设备驱动开发阶段或者USB出现问题,需要调试的时候,往往就需要一些调试工具了。

一般来说,都包含了对应的USB硬件测试工具,加上对应的软件工具,去捕获对应USB总线上的数据,即所谓的USB抓包,然后再去分析抓取出来的数据,是否是期望的,是否符合USB协议的规范定义。

我所见过的一些USB抓包工具有:

  1. USB Explorer 260 + Ellisys USB Analysis Software

    Ellisys的USB Explorer 260硬件,加上对应的USB软件Ellisys USB Analysis Software,实现USB数据抓包和分析

    Ellisys USB Explorer 260的外观是这样的:

    图 2.1. USB协议分析工具:Ellisys的USB Explorer 260

    USB协议分析工具:Ellisys的USB Explorer 260

    TODO:

    Ellisys USB Explorer 260的对应功能特点,可以参考:

    http://www.ellisys.com/products/usbex260/features.php#usbex260g

    从:

    http://www.ellisys.com/support/download.php

    可以看到截图:

    ->

    http://www.ellisys.com/products/usbex260/download.php

    可以看到各种下载。

  2. Catalyst Enterprises公司的硬件,加上对应的软件SBAE USB,实现USB数据捕获和分析

另外,当然也有一些USB开发相关的工具,比如:

  1. usbview

    用于查看USB设备的详细信息

  2. USB20CV

    用来做USB兼容性测试的工具,具体工具下载和详细解释可以去USB官网找到。

  3. bus hound

    好像是个纯软件的USB抓包工具,据说不支持USB枚举过程的抓包。具体没用过,只是听说过

第 3 章 USB协议概览

目录

3.1. USB 2.0协议内容概览
3.2. USB协议的版本和支持的速度
3.2.1. 为何USB的速度,最开始没有设计的更快些?
3.3. USB系统的核心是Host
3.4. USB中用NRZI来编码数据
3.4.1. USB中用Bit-Stuffing来同步时钟信号

摘要

3.1. USB 2.0协议内容概览

USB协议,由于涉及内容太多,所以在此一个文档中解释清楚,是不现实的。

此处能做的和要做的,就是对于USB协议简明地介绍一下关于USB本身协议部分的内容。

当前最新的USB协议,已经发展到USB 3.0了。但是主流的USB设备和技术,还是以USB 2.0居多。所以此文,主要是以USB 2.0为基础来解释USB协议的基础知识,当然,会在相关内容涉及到USB 3.0的时候,也把USB 3.0的相关内容添加进来。

关于USB 2.0和USB 3.0等USB的协议规范,可以去官网下载:

http://www.usb.org/developers/docs/

其实,说实话,不论是谁,如果开始看USB协议的时候,发现单独对于USB 2.0规范本身这一个文档来说,竟然都有650页,而如果再加上,新的USB 3.0规范的482页,和其他一些辅助的USB相关的规范定义等文档,即使你是英语为母语的人,如果要看完这么多页的协议规范,估计也会吐的,更别说我们中国人了。

所以,此处,就来简单以USB 2.0规范为例,分析一下,具体其都主要包含哪些内容,然后你会发现,其实和USB协议本身相关的内容,相对则不会那么多,大概只有97页左右的内容,是我们所要关心的。

下面就来分析看看,USB 2.0的规范中,具体都包含了哪些内容:

表 3.1. USB 2.0协议的内容组成

章节名称内容描述页数1介绍介绍了为何要有USB以及USB协议内容的涵盖范围。此章节最重要的信息就是,引用了USB Device Class规范。不需要看。22术语和缩写名词解释,一般的协议都会有这一章节的。无需看。83背景说明了USB的来由,以及目的是为了是USB的用户,注意不是为了是USB的开发者,更加容易使用。介绍了Low,Full,High Speed三种不同的速度以及对应的应用领域。所以也不需要看。44系统架构综述可以从这章开始看。此章介绍了USB系统的基本架构,包括拓扑关系,数据速度,数据流类型,基本的电气规范。105USB数据流模型此章开始介绍USB中数据是如何流向的。其先介绍了端点和管道,然后对控制,中断,等时,批量四种传输类型进行了详细阐述。其中,重要的一点是,要搞懂每种传输类型,当然,这对于初学者来说可能会有那么一点难。606机械的此章详细介绍了USB的两种标准的连接头,即接口的类型,其中需要了解的一点是,A类接口旨在用于数据向下流的(downstream),而B类接口旨在用于数据向上流的(upstream)。因此,你应该知道,不应该也不可能去将一个USB线,连到两个都是upstream的端口上。而所有的full或high speed的USB线,都是可拔插的,而低速的USB线,应该是焊死的。如果你不是USB接口的制造商,那么就没必要细看这章,而只需要大概浏览一下其中关于USB的接口类型的相关内容即可。337电子的此章详解了USB总线上的电子信号,包括线阻,上下沿的时间,驱动者和接受者的规范定义,以及比特位编码,比特位填充等。此章中需要知道的,更重要的一点是,关于使用电阻在数据线上的偏压,去实现USB设备的速度类型检测,以及设备是总线供电还是自供电。除非你是在晶元级别上设计USB数据收发模块的相关人士,否则都可以直接跳过此章节。而正常的USB设备的数据手册中,都会有相关的解释,说明关于USB总线阻抗需要匹配电阻的阻值是多少。758协议层此章,从字节的级别,解释了USB数据包的细节,包括了同步,PID,地址,端点,CRC域。多数的开发人员都还没注意到这部分的底层的协议层,因为USB的设备中的硬件IC,会帮你做这些事情的。然而,多学习和了解一些关于报告状态和握手协议方面的知识,还是有必要的。。459USB设备框架工作[1]此章,是整个USB协议中,用到的最多的一章。此章详细阐述了USB总线枚举的过程,以及一些USB Request的详细语法和含义,比如set address,get descriptor等,这些相关内容在一起,就构成了最常用的USB的协议层,也是通常USB编程人员和开发者所看到的这一层。此章节,必须详细阅读和学习。3610USB主机的硬件和软件此章介绍了和USB Host相关的知识。包括了数据帧frame和微帧microframe的产生,主机控制器的需求,软件机制和USB的驱动模型等。如果你不是去设计USB Host的话,那么就直接跳过此章即可。2311Hub规范此章定义了USB Hub相关的规范,包括了Hub的配置,分离传输,Hub类的标准描述符等。同理,如果你不是去设计USB Hub,那么也可以忽略此章。143

[提示]提示
  1. 关于第九章=chapter 9=ch9,多说明一下,由于其特殊性,特殊在于大部分和USB协议相关的内容,都在此章节内

    所以,你会在其他地方看到有关此ch9的说法。比如Linux源码中关于USB协议实现的部分的代码,会看到有对应的头文件是

    include\linux\usb\ch9.h

    此文件,就是指的是USB规范中的chapter 9,第九章。

    这也意味着,以后其他人如果谈及USB的话,说到第九章,指的就是此USB规范中的chapter 9,因为其包含了USB协议的软件实现所有关的多数的内容。

所以,由上述总结,我们可以看出:

对于只是为USB外设开发驱动的开发者的话,那么有关的章节只有:

  • 4 系统架构综述
  • 5 USB数据流模型
  • 9 USB设备框架工作
  • 10 USB主机的硬件和软件

如果是对于USB外设的电子设计研发人员,有关系的章节有:

  • 4 系统架构综述
  • 5 USB数据流模型
  • 6 机械的
  • 7 电子的

这么一来,如果是打算做USB设备驱动开发的话,其实我们要看的,只是USB 2.0规范中的一部分,大概有10+60+36+23=129页,所以,相对来说,还算能够接受,至少比要看那600页,要少了很多。

当然,这其中的内容,也还是不少。

而下面这些内容,就是将其中最基本的内容,精简出来,以方便想要快速了解USB基础知识的人,尽快地,更加清晰地,了解到USB的基础知识。

3.2. USB协议的版本和支持的速度

USB协议,也像其他协议一样,经历过很多个版本,但是正式发布出来的,主要有4个。

其中,从开始的USB 1.1,发展到后来的USB 2.0,以及最新的协议版本是USB 3.0.

不过这三个版本都是针对的是有线的(corded)设备来说的,在USB 2.0和USB 3.0之间,发布过一个是针对无线设备的USB协议,叫做USB Wireless,也被称为USB 2.5。

其中,USB 1.1中所支持的速度是低速(Low Speed)的1.5Mbits/s,全速(Full Speed)的12Mbits/s,而USB 2.0提高了速度至高速(High Speed)的480Mbits/s,而最新的USB 3.0,支持超高速(Super Speed)的5Gbits/s。

下面简要总结一下,各个USB协议版本的演化历史:

表 3.2. USB协议的版本的演化

<th col
0 0
原创粉丝点击