USB 出自豪门,一问世便有 IBM,Microsoft,compaq 等前呼后拥,不红实在是没有道理,以致于连三岁小毛孩都知道买游戏手柄要买 USB 的。
USB 名气这么大,但 USB 是什么呢?要是想找份写驱动的活谋生,常会被问到这样的要求: “ 给我讲讲 USB 。 ”
无论你是谁,遇到这样的问题一定要扭头就跑,不然一定被雷死。
USB 使用方便,硬件设计也简单,但开发人员还是谈 USB 色变。为什么呢,因为 USB 简单方便的外表下面是一个十分复杂的 USB 系统。简单方便和成本低廉的代价就是逻辑上的复杂,这里的逻辑指的就是 USB 协议。 USB 的协议之多之杂在 IT 界内绝对是史无前例的,数据传输的协议,控制协议,主控制器协议,设备相关的协议,硬件接口的协议,这些都要和 USB 扯上关系,都称自己是 USB 协议,以至于有很多人雄心勃勃的研读了几年的 USB 协议才发现所研读的内容和自己要想了解的东西扯不上关系。
在我看来, USB 的成功主得益于两点 :
首先是集成电路技术的发展,使得控制器能集成更复杂的逻辑( USB 协议),同时价格还能降下来。一个产品要想推广开,首先是要足够便宜,要让大众能买得起用得起,其次是功能强大,集成电路技术的发展给了 usb 这两个条件。
但集成电路的发展带来的好处也被 USB 同时代的其它接口标准(如 1394 )所共享, USB 绝对并成本最低,性格比最高,协议设计的最完美的接口,但 USB 为什么能独霸天下呢?是中国人的都知道,爹妈很重要。这就是 USB 之所以能成名的第二点,出生好。
有了 Intel,IBM,Microsoft,compaq 这群好爹妈的支持,就算是阿斗也能坐上皇位,向况 USB 不是阿斗。这群好爹妈运用自己强大的影响力,给 USB 制定了一系列的标准,要想跟他们混就得尊守这个标准,其它团体也是敢怒不敢言,屁踮屁踮的就奔着 USB 去了。
USB 系统概述
首先,我们来回答一下面试官的问题, USB 是什么, usb 就是 Universal Serial Bus (通用串行总线)。什么是 Universal Serial Bus 呢。这个用语言就难以表达了,请看下面两张图:
少 许的艺术细胞加上平时的使用经验就能理解第一张图的含义,一个 USB 主机可以通过 hub 可以连接许多的从设备,组成像树一样的结构。
关键是第二张图,详细的描述的 linux USB 系统的几大板块,这种结构基本上适用所有操作系统的 USB 架构。
可能是 USB 这三个字母看起来比较酷,稍和 USB 沾边的开发人员都会吹自己做过 USB 开发,特别是那些介绍 USB 的垃圾书,从头到尾扯了一通他也没有告诉读者他讲的是 USB 技术的那一部份,在 USB 的整个架构中的作用。
首先 ,USB 分为主从两大体系,一般而言, PC 中的 USB 系统就是作主,而一般的 USB 鼠标, U 盘则是典型的 USB 从系统。即使是一个 USB 鼠标,也不要小看它,它其中也有很精深的 USB 技术。作为 USB 鼠标的第一大生产国,我们实在没有什么好骄傲的,如果从零开始,花个十年八年我们国家也不一定能研发出一个像样的 USB 鼠标。
先说控制器这一块,我们至少要开发出 USB 的主控制器与从控制器,鼠标是低速设备,所需的是最简单的一类从控制器。主控制器则复杂得多,因为太过于复杂了,所以就形成了一些标准。在一个复杂的系统中,标准的好处就是可以让开发者把精力集中在自己负责的一块中来,只需要向外界提供最标准的接口,而免于陷于技术的汪洋大海中。
USB 主控制器主要有 1.1 时代的 OHCI 和 UHCI , 2.0 时代的 EHCI ,这些标准规定了主控制器的功能和接口(寄存器的序列及功能),对我们驱动工程师而言,这样的好处就是只要你的驱动符合标某一标准,你就能轻而易举的驱动所有这个标准的主控制器。要想把主控制器驱动起来,本来是一件很难的事情,估计全球的 IT 工程师没几个能有这样的水平,但有了标准,我们就可以轻松的占有这几个高水平的 IT 工程师的劳动成果。
主控制器和驱动有了,我们还需要 USB 协议栈,这就是整个 USB 系统的软件部分的核心(有的资料中直接把其称为 USB 核心), USB 协议栈一方面向使用 USB 总线的设备驱动提供操作 USB 总线的 API ,另一方面则管理上层驱动传下来的的数据流,按 USB主控制器的要求放在控制器驱动规定的位置, USB 主控制器会调度这些数据。
我们这里用到了调度这个词, USB 主控制器的调度其实和火车的调度 CPU 的调度有相似之处,物理上的通路只有一条,但 USB 中规定的逻辑上的通路却有许多条,有时一个设备就会占用几条逻辑通道,而 USB 系统中又会有多个设备同时运行。这就好像是只有一条铁路线,但来来往往的火车却有许多, USB 主控制器的作用就是调度这些火车,而 USB 协议栈的作用则向上层的 USB 设备驱动提供不同的车次。
有了以上的这些模块,才能为 USB 鼠标设计驱动,这一点上 ps/2 鼠标的驱动和 USB 鼠标的驱动结构基本一样,只不过我们的数据通路是 USB 总线。
USB 系统甚至把设备驱动都给标准化了,只要是支持 USB 的主机,就可以支持任何一个厂商的 USB 鼠标,任何一个厂商的 U 盘,只要是被 USB 系统包函的设备,只要这些设备支持相应的标准,就无需重新设计驱动而直接使用。
下是简单的列出了 USB 设备类型,理想的情况 USB 系统要对这些设备作完整的支持,设备也必须符合 USB 规范中的要求。
1 - audio :表示一个音频设 备。 |
|
2 - communication device :通讯设备,如电话, moden 等等。 |
|
3 - HID :人机交互设备,如键盘,鼠标等。 |
|
6 - image 图象设备,如扫描仪,摄像头等,有时数码相 机也可归到这一类。 |
|
7 -打印机类。如单向,双向打印机等。 |
|
8 - mass storage 海量存储类。所有带有一定存储功能的都可以归到这一类。如数码相机大多数都归这一类。 |
|
9 - hub 类。 |
|
11 - chip card/smart card 。 |
|
13 -- Content Security |
|
14 -- Video ( Interface ) |
|
15 -- Personal Healthcare |
|
220 -- Diagnostic Device |
|
224 -- Wireless Controller ( Interface ) |
|
239 -- Miscellaneous |
|
254 -- Application Specific ( Interface ) |
|
255 - vendor specific. 厂家的自定义类,主要用于一些特殊的设备。如接口转接卡等。
|
理解了这两张图,基本能应付一下面试官了,但我建议还是随身带着这两张张图,因为 USB 系统确实太复杂,言语难以表达,很可能他说的 USB 和你讲的 USB 压根就不是一个东西,只是都和 USB 相关。
但这两张图也不能回答所有的问题,随着 USB 技术的发展, USB 系统中的一些不足也逐渐被承认, OTG 就是这种情况下的主要产物。
现在市面上有些设备(比如一些 MP4 )即能插上电脑当 U 盘使,也能被 U 盘插上读取 U 盘。这样的设备在 USB 系统中是作主还是作从呢?
这就是 OTG(On-The-Go), 即可以作主也可以作从,传说中的雌雄同体。这主要是为嵌入式设备准备的,因为 USB 是一种主从系统,不能支持点对点平等的传输数据, OTG 正是在这种需求下产生的, OTG 不仅支持控制器的主从切换,在一定层度上,也支持相同设备之间的数据交换。
本文转载自http://blog.csdn.net/datangsoc/archive/2010/08/24/5835635.aspx,从事Linux驱动研发一段时间了,对USB系统一知半解,今天决心重新认识一下USB,正好看到了CSDN网友的这篇博客,描述的非常的好,在这里转载,推荐给大家。