1、什么是USB
USB是Universal Serial Bus的缩写,翻译为中文就是通用串行总线。在USB出现之前,计算机领域已经存在很多的接口,这些接口互相都有自己的应用领域,并且之间互不兼容,用户为了使用不同的应用,需要配置不同的硬件接口。USB的出现就是为了解决这些问题,通过单个的USB接口,同时支持不同的应用,方便不同设备的互联。说白了,USB就相当于在众多接口之上,设计出一个万能的USB接口,以后各种外设都可以使用这种接口。
2、USB相关的硬件
2.1 USB主机控制器
USB设备,从物理上的结构来看,包含了主机Host端和设备Device端。其中,主机端有对应的USB的主机控制器Host Controller,而设备端,对应的是USB设备。例如,我们日常使用的台式电脑的机箱上的USB接口就属于主机控制器一种,用以存储资料的U盘属于USB设备一种。
由于历史原因,USB的主机控制器有多种不同的类型,分为OHCI和UHCI、EHCI和XHCI。尽管不同的USB主控类型有着不同的特点,但他们都符合对应的USB规范,都实现了USB规范中所规定的USB主控所要实现的内容。不同类型USB控制器之间简要概括可以如下表所示:
USB主机控制器类型 | 共同点 | 区别 | |||
---|---|---|---|---|---|
对应的USB的协议和支持的速率 | 创立者 | 功能划分 | 常用于 | ||
OHCI | 都实现了对应的USB的规范中所要求的功能 | USB 1.1=Low Speed和Full Speed | Compaq,Microsoft和National Semiconductor | 硬件功能 > 软件功能⇒硬件做的事情更多,所以实现对应的软件驱动的任务,就相对较简单 | 扩展卡,嵌入式开发板的USB主控 |
UHCI | Intel | 软件功能 > 硬件功能⇒软件的任务重,可以使用较便宜的硬件的USB控制器 | PC端的主板上的USB主控 | ||
EHCI | USB 2.0=High Speed | Intel | 定义了USB 2.0主控中所要实现何种功能,以及如何实现 | 各种USB 2.0主控 | |
xHCI | USB 3.0=Super Speed | Intel | 定义了USB 3.0主控中所要实现何种功能,以及如何实现 | 各种USB 3.0主控 |
2.2 USB接口的引脚定义
USB 1.x/2.x共有4个引脚,分别为VBUS、D-、D+、GND
- VBUS:+5V电源引脚
- D-:data-,数据线,与D+构成差分信号
- D+:data+,数据线,与D-构成差分信号
- GND:Ground,地线
在USB主机端的每个端口的D+和D-上,分别接了一个15K欧姆的下拉电阻到地。这样,在USB主机端的端口悬空时,就被这两个下拉电阻拉到了低电平。而在USB设备端,在D+或者D-上接了1.5K欧姆上拉电阻。对于全速和高速设备,上拉电阻是接在D+上,而低速设备则是上拉电阻接在D-上,连接方式如下图所示:
这样,当设备插入到主机端的端口上时,由1.5K的上拉电阻和15K的下拉电阻分压,结果就将差分数据线中的一条拉高了。主机控制器检测到这个状态后,它就报告给USB主控制器,这样就检测到设备的插入了。USB高速设备先是被识别为全速设备,然后通过HOST和DEVICE两者之间的确认,再切换到高速模式的。在高速模式下,是电流传输模式,这时将D+上的上拉电阻断开。
2.3 USB的连接端口类型
USB的连接端口类型,即指各种不同的插头插座。插座被称为母头,也就是主机端的用于等待设备连接的端口;插头即公头,设备用于连接主机端的接口。
由于USB的产生就是为了支持众多种应用的,而由于各种应用中,对于硬件接口的大小也有一些限制,比如有些小型设备或者移动式设备中,接口不能太大等,所以而设计出多种类型的接口,用于不同的应用。
USB的接口类型,根据接口形状不同,主要可以分为三大类:
- 普通的硬件直接叫做Type
- 然后有小型版本的叫Mini迷你的
- 和更加小的,叫做Micro微小的
3、USB的传输方式
USB共有4大传输方式,分别为控制传输、中断传输、批量传输、实时传输。
控制传输(control)
每一个USB设备必须支持的,通常用来获取设备描述符、设置设备的状态等。一个USB设备从插入到最后的拔出这个过程一定会产生控制传输,即便这个USB设备不能被这个系统支持。
中断传输(interrupt)
支持中断传输的典型设备有USB鼠标、 USB键盘等。中断传输并不是我的设备真正触发主机进入中断,然后主机会来读取数据,它其实是一种轮询的方式来完成数据的通信。USB设备会在设备驱动程序中设置一个参数叫做interval,它是endpoint的一个成员。 interval是间隔时间的意思,表示我这个设备希望主机多长时间来轮询自己,只要这个值确定了之后,我主机就会周期性的来查看有没有数据需要处理。
批量传输(bulk)
支持批量传输最典型的设备就是U盘,它进行大数量的数据传输,能够保证数据的准确性,但是时间不是固定的。
实时传输(isochronous)
USB摄像头就是实时传输设备的典型代表,它同样进行大数量的数据传输,数据的准确性无法保证,但是对传输延迟非常敏感,也就是说对实时性要求比较高 。
4、USB相关术语
4.1 Class
前面讲过,USB被设计的目的之一是为了实现用单一的USB接口取代之前种类繁多的各种其他接口。为了能取代之前的接口,意味着USB可以实现或支持之前的各种接口的各种功能,协议中对这些功能进行相关的定义。因此,就出现了各种USB Class,协议中定义的class如下表所示:
Base Class | Descriptor Usage | Description |
---|---|---|
00h | Device | Use class information in the Interface Descriptors |
01h | Interface | Audio |
02h | Both | Communications and CDC Control |
03h | Interface | HID (Human Interface Device) |
05h | Interface | Physical |
06h | Interface | Image |
07h | Interface | Printer |
08h | Interface | Mass Storage |
09h | Device | Hub |
0Ah | Interface | CDC-Data |
0Bh | Interface | Smart Card |
0Dh | Interface | Content Security |
0Eh | Interface | Video |
0Fh | Interface | Personal Healthcare |
DCh | Both | Diagnostic Device |
E0h | Interface | Wireless Controller |
EFh | Both | Miscellaneous |
FEh | Interface | Application Specific |
FFh | Both | Vendor Specific |
USB class是根据功能进行划分的,不同的class实现不同的功能,适用于相应的设备。如HID(Human Interface Device),人体学输入设备,包含我们经常使用的鼠标和键盘;Mass Storage,包含我们日常使用的U盘等存储介质
4.2 枚举(Enumerate)
USB枚举,USB Emulation,从字面意思看,就是去列举USB,而列举是什么意思呢?其实就是USB的初始化
简单来说,USB的枚举,对应的就是USB的Host和Device之间的对话,即Host根据Device所报告上来的参数,得知USB的device是什么类型的,具有什么功能,然后初始化相关参数
接下来,就USB Device就可以正常工作了
所以,可以简单的理解为,USB枚举,就是USB设备的初始化(init)
4.3 端点(Endpoint)
端点是USB的传输对象,是USB设备通信的基本单位,所有通信几乎都是从端点发起的
比如我们说"读U盘"、"写U盘",可以细化为:把数据写到U盘的端点1,从U盘的端点2里读出数据。
除了端点0外,每一个端点只支持一个方向的数据传输,端点0用于控制传输,既能输出也能输入
设备中端点的编号是任意的。枚举期间外设向主机报告其端点号和特征
4.4 接口(Interface)
接口由多个端点组成,代表一个基本的功能,是USB设备驱动程序控制的对象,一个功能复杂的USB设备可以具有多个接口。
每个Interface模拟一个设备功能,比如集成了键盘和鼠标的USB设备,里面就是两个interface,一个是键盘,另一个是鼠标。Interface之间通常是隔离的,互相不干扰。
4.5 集线器(Hub)
集线器扩展了USB主机所能连接设备的数量。主机控制器内置一个集线器,负责完成一些底层USB功能,如检测设备的插入或拔出。
集线器以全速或高速连接到上行端口(到PC),以低速、全速或高速连接到下行端口(到外设)。PC的根集线器可为每个A型连接器提供5V、500mA。一个总线供电的外部集线器可为每端口提供100mA电流。由于USB为外部集线器电路分配100mA电流,因此,一个总线供电的集线器可以有四个下行端口。如果集线器有自己的电源(自供电),每个下行端口可提供高达500mA电流。