从程序的角度理解USB模型

  USB的英文全称为:Universal Serial Bus,翻译过来的意思就是:通用串行总线。

  所以,USB是一个总线标准,它已经发展了很多年,标准的版本也慢慢发展从1.0、2.0、3.0到最新的3.1,我们这里着重讲的就是USB2.0的版本。

  USB的主要作用就是为人们提供了一种新型的总线接口,使得人们可以非常方便快捷的插入到系统中新的设备,并且让系统和这个外部设备进行通讯(交换数据),和PCI总线一对比就不难看出USB对总线家族的补充作用,PCI总线内置在PC机内部,如果你要插入一块新的设备就需要先把计算机关闭掉,然后把新设备插入到PCI插槽中,然后再重新给计算机上电,操作系统启动之后,再安装驱动等等之类。这就是USB总线被人们发明出来最大的需要。 

  既然是总线,那么就有一系列所有总线都要制定的标准问题,1、设备是如何和你连接上的?连接上的设备之间的网络结构是什么?2、如何发现连接在你上面的设备呢?3、主机和设备之间是如何交流的?这三个问题就是USB协议所要回答的最终要的三个问题,下面我们一个一个来解答。 

  

  一、设备是如何连接到USB总线上的,连接之后的USB设备形成的网络是怎样的?

  如何连接到USB上的?插入进去的,这个过程我估计各位同学几乎每天都要做一遍,USB的协议详细规定了USB接口的物理电器标准,比如,有几根线,每个线的电压,电流等等等,这不是本文的重点,那么这些连接上USB总线上的设备形成了什么样的物理网络结构呢?

看下图:

 

 

简单来说:USB模型分为主机、集线器、设备,三大主体,主机上默认长了一个ROOT HUB(根集线器),然后在这个根集线器上既可以插入USB设备,也可以再插入另外一个集线器,这样的话,就行成了一个树行结构,每个根节点都是一个HUB。

USB协议规定了一下,HUB上再连HUB的最高层级不能超过7级,所有的USB设备总和不超过127个,如上图所示。

这就是USB的总线拓扑模型,其实很简单,对吧。

  

  二、如何发现连接在你上面的设备呢?

  发现一个设备首先的问题就是它在哪里,我们总要对设备的地址有一个规定吧,不然何谈发现呢?USB对设备地址的规定也非常非常的简单:0~126,因为总共不超过127个设备嘛,所以干脆就用编号一个一个来了,接下来的问题就是,这些设备是如何分配这些地址的呢?而且USB总线的一个重要特点就是即插即用,在系统不停机断电的情况下,如果插入一个新的设备,我该如何分配呢?

   USB是这样做的,首先保留了0号地址,这个特殊的地址是不分配给任何设备的,它是主机用来和未分配地址的设备进行协商的一个通道,主机通过0号地址可以得知未分配设备的信息:厂商、设备类型、设备特性等等,主机也通过0号地址给未分配地址的设备分配一个地址。这样主机就可以正式通过分配之后的地址和该设备进行交谈了,这个交谈用什么语言呢?那就是接下来的通讯协议的事情了。

  三、主机和设备之间是如何交流的?

  最著名的通讯协议就是TCP/IP协议,USB的通讯协议比TCP/IP协议简单的多,但是它也有包的概念,它的包分为:令牌包、数据包、握手包。令牌包中指定了数据包的地址和流向,数据包是USB传输的最小单位,握手包表示传输的成功与否。USB的通讯协议中还有一条非常重要的规定,就是任何通讯就只能由主机发起,主机发的令牌包中重要的一项就是指定这次通讯的数据流向是从主机流向设备还是从设备流向主机。

  这就是最简单的USB通讯协议模型,为了支持不同用用途的设备,USB的通讯模型还更进一步的细化了通讯协议,比如,控制传输、中断传输、批量传输、同步传输,这些有各自不同的特点为了满足不同的设备需求,但它们本质上都是不同的软件实现而已,底层来讲它们都是一个个USB数据包组成的。

    

posted @ 2013-12-18 16:33  图样,图森破  阅读(406)  评论(0)    收藏  举报