USB入门

来源:互联网 发布:知乎童谣事件 编辑:程序博客网 时间:2024/05/16 15:09

USB入门系列之一 —— USB概述

 

 

USB是什么呢?一说USB是You SB的意思,即“你傻B”的意思。另一种说法是USB其实是美国的弟弟,因为美国叫USA,USB当然是他的弟弟了。

    那么USB到底是什么呢?其实USB是通用串行总线(Universal Serial Bus)的简写,它已经有了10多年的历史了。USB协议出现过的版本有USB1.0,USB1.1,USB2.0。由于USB是主从模式,设备与设备之间、主机与主机之间不能互连,为了解决这个问题,扩大USB的使用范围,就出现了USB OTG(On The Go)。USB OTG的做法是,同一个设备,在不同的场合下可以在主机或从机之间切换。在USB1.0和USB1.1版本中,只支持1.5Mbps的低速(Low Speed)模式和12Mbps的全速(Full Speed)模式。在USB2.0中,又加入了480Mbps的高速(High Speed)模式。值得注意的是,USB2.0并不是高速设备的代名词,详述请看《误区:关于USB2.0和USB高速传输模式》一文。

    USB具有很多优点,例如即插即用,容易使用,方便携带,传输速度快,可扩展性强,标准统一,价格便宜等等。目前流行的USB设备有移动硬盘,数码相机,MP3,U盘,USB鼠标、键盘、游戏杆,USB MIDI键盘,USB摄相头,USB打印机,USB扫描仪,USB声卡,USB话筒,USB网卡,USB显示器,USB电话,具有USB口的各种仪表仪器等等,只要是能跟电脑打交道的,就基本上可以通过USB来实现,足见USB功能的强大。

    然而USB也有一些缺点,例如传输距离短,开发、调试较困难等等。当然,它还有一个更大的缺点,那就是你发现要找出它的缺点很件很令人头疼的事情。

USB入门系列之二 —— USB的连接模型

USB是一种主从结构。主机叫做Host,从机叫做Device(也叫做设备),集线器也被当作一种特殊的设备处理。USB的数据交换只能发生在主机和设备之间,主机和主机,设备和设备之间不能互连。为了在物理上区分主机和设备,使用了不同的插头和插座,这个在USB的连接器一节中会讲到。所有的数据传输都由主机主动发起,而设备只是被动的负责应答。例如,在读数据时,USB先发出读命令,设备收到该命令后,才返回数据。在USB OTG中,一个设备可以在从机和主机之间切换,这样就可以实现设备与设备之间的连接,大大增加了USB的使用范围。但这时依然没有脱离这种主从关系,两个设备之间必然有一个作为主机,另一个作为从机。USB OTG增加了一种MINI USB接头,比普通的4线USB多了一个ID表识线,用来表明它是主机还是设备,这个以后会讲到。
    USB的拓扑结构为金字塔型。由一个USB主控制器出发,下面接USB集线器,USB集线器将一个USB口扩展为多个USB口,多个USB口又可以通过集线器为更多个接口。但USB协议中对集线器的层数是有限制的,USB1.1规定最多为4层,USB2.0规定最多为6层。理论上,一个USB主控制器最多可接127个设备,这是由数据包中的7位地址位决定的,但是实际上不会接这么多的设备。我们所说的一个USB主控制器可以连接多个USB设备,并不是直接简单的将多个设备并联或者串联,而是要由集线器负责端口扩展,才能连接更多的设备。在我们的电脑上,也有一个(或者多个,视USB主控制器的个数而定)集线器,它叫做根集线器,直接连在USB主控制器上。在设备管理器中,我们可以看到USB主控制器和根集线器。如下图所示。USB数据传输路径如下:USB主控制器发出数据包,通过根集线器,再通过下面的集线器(如果有的话),再发给USB设备;设备返回数据,交给它上层的集线器,上层的集线器再交给更上层的集线器,直到USB主控制器为止。而USB主控制器就可以跟CPU打交道了。在标准的PC机上,USB主控制器是挂在PCI总线上的。在Windows中,USB由各种驱动程序负责管理,最后由驱动程序产生功能设备(FDO),这就是我们所看到的实际设备了。我们的应用程序就可以通过Windows提供的各种API进行访问USB设备了,例如CreateFile,ReadFile,DeviceIOControl等等。

 

USB入门系列之三 —— USB的电气特性

标准的USB使用4根线:5V电源线(Vbus),差分数据线负(D-),差分数据线正(D+),地(Gnd)。在USB OTG中,又增加了一种mini接口,使用的是5根线,比标准的USB多了一根身份识别(ID)线。USB使用的是差分传输模式,有两根数据线,分别是D+和D-。在USB的低速和全速模式中,采用的是电压传输模式。而在高速模式下,则是电流传输模式。关于具体的高低电平门限值,请参看USB协议。为了防止出现长时间的0或者1(这样不利于时钟信号的提取),在发送数据前要经过位填充处理。然后再将数据串行化,发送到数据线上,由两根数据线的差分值来表示0或者1。而在接收端,则刚好是相反的过程。接收端采样数据线,将数据并行化,并同时去掉未填充,然后解析数据。通常,我们使用现成的USB芯片,像位填充,串行化这些芯片内部的硬件已经帮我们做好了,因此通常我们并不用关心这些细节。在设备接收数据时,芯片的串行接口引擎(SIE)会接收属于自己地址的数据,并根据相应的端口号,放到相应的缓冲区内,并返回ACK给主机进行确认,然后产生中断请求,通知我们的程序,已经收到数据包了。在我们还未处理完缓冲区的数据之前,如果再收到对该端点的输出请求,USB芯片将会使用NAK返回,告诉主机端点现在忙,主机检测到NAK后,过段时间会重试输出数据,直到超时为止;发送数据时,用户将数据写入USB芯片的缓冲区,并通知USB芯片缓冲区内数据可用,然后USB芯片检测到主机请求对应的端点输入时,它就会将数据返回,数据发送完毕并收到主机的ACK确认之后,产生中断请求通知应用程序数据已经发送完毕。如果USB芯片已经收到了输入请求,但是用户程序还未填充好缓冲区,它也会用NAK返回,告诉主机数据还未准备好。主机收到NAK后,过段时间会重试,直到超时为止。
         在USB协议中规定,设备在未配置之前,可以从Vbus上最多获取100mA的电流;在配置之后,最多可从Vbus上获取500mA的电流。Vbus是5V的电压,具体的参数请参看USB协议。

USB入门系列之四 —— USB的线缆以及插头、插座

USB是一个标准的协议,因此对线缆、插头、插座等有严格的规范要求。
    在最初的标准里,USB接头有4条线:电源,D-,D+,地线。我们暂且把这样的
叫做标准的USB接头吧。后来OTG出现了,又增加了miniUSB接头。而miniUSB接头
则有5条线,多了一条ID线,用来标识身份用的。标准USB口只有A型和B型。其中每
一型又分为插头和插座,例如A型插头,A型插座等。我们平常电脑上用的那种插
座叫做A型USB插座,而相应的插头,叫做A型插头,例如U盘上那种。而像打印机
上面那个插座,则是B型插座(比较四方的,没电脑上面那种扁),相应的插头,就
是B型插头。也许你见过一头方一头扁的USB延长线,没错了,扁的那头就叫做A型
插头,而方的那头,就叫做B型插头,而相应的被插的那两个插座,就分别是A型
插座和B型插座了。A型插头是插不进B型插座的,反之亦然。


    miniUSB也分为A型,B型,但增加了一个AB型(不是血型呀,别搞错了,没有
O型^_^)。既然它叫做miniUSB,那么当然它就是很小的了,主要是给便携式设备
用的,例如MP3、手机、数码相机等。USB是一主多从结构,即一个时刻只能有一
台主机。像PC机就是一个主机,其它的只能是设备,因而两个设备之间是无法直
接进行通信的。而USB OTG(on the go)的出现,则解决了这个矛盾:一个设备可
以在某种场合下,改变身份,以主机的形式出现。因而就出现了AB型的miniUSB插
座,不管是A型miniUSB插头,还是B型miniUSB插头,都可以插进去,而靠里面多
出的那条ID线来识别它的身份:是主机还是从机。这样两个USB设备就可以直接连
接起来,进行数据传送了。 像我们MP3上用的那中miniUSB插座,就是B型的
miniUSB插座(注意,有一类miniUSB插座,似乎不是USB规范里面的,因为miniUSB
接头应该有5条线,而这种插座只有4条线)。

    由于USB是支持热插拔的,因此它在接头的设计上也有相应的措施。USB插头的地引脚
和电源引脚比较长,而两个数据引脚则比较短,这样在插入到插座中时,首先接通电源
和地,然后再接通两个数据线。这样就可以保证电源在数据线之前接通,防止闩锁发生。

    至于USB电缆,通常我们不怎么关心,买现成的就行了,除非你是生产USB线
缆的。在全速模式下需要使用带屏蔽的双绞电缆线,而低速模式模式则可以不使
用屏蔽和双绞。此外,USB协议规定,USB低速电缆长度不得超过3米,而全速电缆
长度不得超过5米。这是因为线缆传输有延迟,要保证能够正确响应,就不能延迟
太多。USB标准规定了里面信号线的颜色,其中Vbus为红色,D-为白色,D+为绿色
,GND为黑色。然而,我见过很多USB线缆并没有遵循标准,所以大家在使用时要
小心,用表测量一下比较可靠。

    更详细的数据,例如封装尺寸等,请参看USB协议。

    附图:各种USB插头和插座,来自USB协议。

 

 

原创粉丝点击