第一篇 USB基础知识

一、 基础知识

1. USB

USB:Universal Serial Bus,中文译为“通用串行总线”,USB设备最显著的优点是具有热插拔功能、传输速率快。USB是主从结构的系统,具有主机和设备这两个角色,即Host和Device。此外,还有两类特殊的USB设备,分别是USB集线器设备(USB Hub)和USB OTG设备。

USB目前的协议版本有:USB1.0、USB1.1、USB2.0、USB3.0。USB1.0和USB1.1只有低速模式(Low-Speed Mode)和全速模式(Full-Speed Mode),理论上最大传输速率分别为1.5Mbps和12Mbps。USB2.0引入了传输速度更快的高速模式(High-Speed Mode),理论上最大传输速率为480Mbps。而USB3.0在速度的提升上,实现了重大飞跃,最大传输速率理论值高达5Gbps。需要注意的是,这些都是理论值,实际开发过程中,很难达到这些理论值(需要自己去做性能上的优化)。

在实际开发过程中,不同的传输类型有不同的传输速率,每一次的数据交互,都是一个相当复杂的过程,有令牌包的解析、数据包的传输、握手包的回应等等,这些都是额外的消耗,因此,传输速度是不可能达到理论值。USB有四种传输类型,分别是控制传输、中断传输、块传输、等时传输。

先从Device开发开始,再逐步深入,研究Host的实现。

 

2. USB的电气特性

USB使用差分传输模式,有两条数据线,分别是:

1)USB数据正信号线,USB Data Positive,即USB-DP线,简写为D+

2)USB数据负信号线,USB Data Minus,   即USB-DM线,简写为D-

剩下的就是电源线(5V-Vbus)和地线(GND)。对于USB OTG设备,会多出一根ID线。

 

3. USB主机端硬件控制器类型

分别是:OHCI  UHCI  EHCI  XHCI。

与协议规定标准接口的对应: OHCI、UHCI都是USB1.1的接口标准;而EHCI是对应USB2.0的接口标准;最新的xHCI是USB3.0的接口标准。

 

3.1 OHCI

OHCI:Open Host Controller Interface,是USB1.1的标准,不仅仅是针对USB,还支持其他的接口,比如支持Apple的火线(Firewire,IEEE 1394)接口。与UHCI相比,OHCI的硬件复杂,很多事情都交给硬件来做,所以实现对应的软件驱动的任务,就相对较简单。主要用于非x86的USB,如扩展卡、嵌入式开发板的USB主控

 

3.2 UHCI

UHCI:Universal Host Controller Interface,是Intel主导的对USB1.0、1.1的接口标准,与OHCI不兼容。UHCI在软件驱动层面就需要做的比较多,需要做得比较复杂。

 

3.3 EHCI

EHCI:Enhanced Host Controller Interface,是Intel主导的USB2.0的接口标准。EHCI仅提供USB2.0的高速功能,而依靠UHCI或OHCI来提供对全速(full-speed)或低速(low-speed)设备的支持。

 

3.4 xHCI

xHCI:eXtensible Host Controller Interface,是最新USB3.0的接口标准,它在速度、节能、虚拟化等方面都比前面3中有了较大的提高。xHCI支持所有种类速度的USB设备(USB 3.0的 SuperSpeed; USB 2.0 Low-、Full-、and High-speed; USB 1.1 Low- and Full-speed)。xHCI的目的是为了替换前面3种类型(UHCI/OHCI/EHCI)。

 

4. 识别设备的速度模式

对于设备(Device)而言,按照速度来划分,工作在低速模式下的设备称之为低速设备;工作在全速模式下的设备称之为全速设备;同理,工作在高速模式下的设备称之为高速设备;对于主机(Host)而言,只有全速主机和高速主机两种。

 

4.1 识别低速和全速设备

主机的D+和D-都接有15K下拉电阻;全速USB设备的数据线D+接有1.5K的上拉电阻,一旦接入主机,主机的D+被拉高;低速USB设备的数据线D-接有1.5K的上拉电阻,一旦接入主机,主机的D-会被拉高。因此,主机就可以根据检测到自己的D+为高还是D-为高,从而判断接入的设备是一个全速还是低速设备。硬件结构图如下:

                                                                                                        图:有USB低速设备接入

 

 

 

                                                                                                        图:有USB全速设备接入

 

4.2 识别高速设备

刚开始时,高速设备以全速模式连接到主机,D+有上拉电阻。主机检测到全速设备连接上之后,对设备进行复位,USB设备收到复位信号,主动发起高速模式的握手协议进行速度识别。接下来,就取决于主机端了,如果主机的USB控制器支持高速模式传输,则主机会与该高速设备交互完成高速模式握手协议,之后,两者都工作在高速模式下;如果主机不支持高速模式传输(如果主机上没有EHCI类型的控制器,像比较老旧的电脑,并且是XP系统的),那么握手协议就会失败,设备端也不会切换到高速模式,之后两者都工作在全速模式下。

如果是一个全速设备接到高速主机,设备端没法发起高速握手协议,所以,最终设备和主机都会工作在全速模式下;主机具有多种控制器类型,能工作在全速/高速模式下。

全速和高速控制器,都是DP上拉,低速才是DM上拉(配置寄存器的时候,需要注意的地方)。

 

5. USB设备的分类

这是从USB协议描述符文档中摘取出来的一张 USB device Class表。

 

注:

(1) 在小型的嵌入式系统(UC-OS、Free-TROS等)中开发USB,常用的有HID、UAC、MSC,即鼠标键盘、多媒体键值、USB声卡/麦克风、U盘。而且,对于小型的嵌入式操作系统,大都是开发Device,当然也可以开发Host(对MCU的片内资源就要求比较高)。如果是针对嵌入式Linux系统,那么能做的东西就很多了,视频、网卡等。

(2) 不同的类有不同的用途,不同的应用场合,对应不同的产品形态。有自己特殊的描述符,比如对于HID类,有报告描述符。有自己特殊的类请求,比如UAC的设置音量请求。

 

6. USB的数据传输方式

USB总线是串行总线(跟串口一样),数据是一位一位地在数据线上进行传输的。LSB在前,最低位先发出,接下来是次低位,最后才是最高位(MSB)。

 

7. 常见术语

(1)Host等同于主机、Device等同于设备。

(2)注意一些中英文单词的对应,比如:

HIDHuman Interface Deviece

UACUsb Audio Class

MSCMass Storage Class

设备:Device        设备描述符:Device Descriptor 

配置:Configuration  配置描述符:Configuration Descriptor 

字符串:String      字符串描述符:String Descriptor 

接口:Interface      接口描述符:Interface Descriptor 

端点:Endpoint      端点描述符:Endpoint Descriptor 

报告:Report        报告描述符:Report Descriptor

…………………………………………………………………………………………………..