以下**都为自己总结,请勿用于商业用途!
usb在江湖
什么是江湖?江湖可指社会,也可指我们生存成长的社会环境。当然也可指来回奔波的生活状态。一般多用来形容人与人之间的竞争、表述人在社会上的无奈。人类的世界有江湖之说、那么技术的世界呢?同样有江湖,江湖是一种竞争的环境。一花一世界,一叶一如来。每一个世界都会存在这种现象,人类只不过是芸芸世界中的一个卑微的群体。人类的世界中有你方唱罢我登场的局面,各种技术之间不也一样存在着竞争沉浮么?当年叱咤风云的dos不也一样落幕了么?江山代有才人出,各领风骚数百年,我们不能与自然规律抗衡。技术的江湖也是如此,那么USB是如何在技术的世界里是实现自己的价值和理想的呢,是如何一步一步地成长壮大的呢?
英雄莫问出处,他何时诞生、从何而来我们没有必要再过多的去追问,只需要知道他已在技术的江湖里有了一席之地,任何人都已不能无视他的存在。为何他能够在接口的纷争中打败并口、串口等突出重围呢?
一位朋友问我什么是政治,我不知。他说:政治,正、文、水、台也。意思是人要正直,有文化,有群众基础,良好的人际关系以及后台,就是要有人给你撑腰。精辟。
USB的成功何尝不是如此呢?
USB 协议努力的提高着自己的传输速度,通过差分信号降低信号干扰,保证数据传输的正确性,支持热插拔等;host平等的对待着每一个USB设备,无论他们通过了多少级的hub;USB标准的发起者是Intel和微软。
一 什么是USB1.1 USB is only bus认识一下它的全名:USB (Universal Serial Bus,通用串行总线)。
Bus永远是bus。出生那一刻起就注定他一生的角色就是一条数据通路。我们不能因为现在各式各样的USB设备,被其迷惑就认为USB是一种设备,他不过是寄生于某种功能设备之上的一种串行总线(并没有贬低USB的意思,只是想客观的描述USB的角色)。当做过一段时间的USB设备驱动开发后,也许你就会发现,对USB的这种理解对我们以后的设备驱动开发大有裨益。
当然bus(总线)的角色是由开发者给的,如果开发者让bus有了更重要的角色,那它就不是简单的bus,不再是简单的数据通路,linux中的bus就有了更复杂的角色,是一位总管全局的精神领袖,已经不是我们这里的bus了,这里我们更应该简单的去理解bus,它就是一条串行总线,一条数据的通路,一条高速路。这更有助于我们快速的了解USB的知识。
USB对传输的数据在内容和结构上没有任何的要求,他没有这个权力,他是一个忠实的信使。从上层应用的层面来看(设备类层),USB就是数据的透明通路(别忘了,他只是个总线---bus)。
邮局只负责把邮件送过去,他会看信里写的内容么?快递公司会偷偷的打开你的邮包看邮包里的东西么?
USB 很简单,也很单纯。各种各样的复杂设备那是上层的事情,USB只是被上层利用。所以我们平时说的USB设备似乎有些不正确,应该说USB接口的设备。当然我们称呼为USB设备并不会产生歧义,我们也就这么叫了,存在的就是合理的。
1.2 物理拓扑结构:7层 顶层是host 控制器,下面是USB设备。在这些设备中有一个特殊的角色—hub。Hub的存在使USB接备能够一层一层的级联,使得USB的物理拓扑结构能够形成如图所示的层次结构。其中roothub是一个抽象出来的虚拟hub,软件设计者也可以不用考虑roothub,因为我们一贯的思路是一个USB设备只可能插在hub上,所以不知哪位高手就抽象出了一个roothub,结束了群龙无首的局面。
物理拓扑结构就像一个大树一样。Host控制器是树根,Hub是树干、树枝。USB设备 就好比是树叶子。USB协议规定这种层次最多为7层,至于为什么?我想这应该和物理层线路的电气特性有关。Host发出了一个请求,等了好久没回响应,你是认为他超时了,还是真的路途遥远呢?
1.3 逻辑拓扑结构在USB Host控制器的眼中每个设备都是平等的,不管物理距离上是多远,我们的 心都是一样近的,每个设备都有一个独立的地址,like a child of the host。多么宽广的胸怀,天下皆为臣民。凡成大事者都要有一颗宽广的胸怀。
二 Life of USB device 有一句话叫做事必躬亲,意思是每件事情都要亲自做。我觉得他也告诉我们另外一件思路:事情只有亲自参与了才能有切身体会。我们做嵌入式开发讲究的更是这个,整天抱着书看、不做试验、没有应用场景验证我们的思路,一是不好理解,二 是即使理解了慢慢也忘了。所以我的思路是学习知识时,要创造该知识的应用场景。应用才是王道,应用的场景推动着我们对知识的理解,所以我们从最熟悉的U盘开始,来引出USB中的几个关键术语。
也许没有多少人了解USB的工作原理,但是大部分人却都使用着U盘。你知道U盘插入电脑的那一刻起一直到电脑上显示出盘符这短暂的瞬间都发生了什么?其他人可能不会去想,也没有必要想,但是你既然看到了这里,你就应该想一想。这是进入USB的开始。
电脑对他做了什么?怎么知道他是U盘的?还知道他是那个厂家的?并且在插了2个或更多个U盘时,依然能够正确的向里边拷贝数据,怎么区分他们的?带着疑问,我们能走得更快。
当U盘插入hub后,供电的瞬间就是设备life开始的时刻!佛祖曾经说过:万物皆有生命。
2.1枚举
USB设备(U盘)的一生有这么几个阶段:
Attach态,Power态,default状态,寻址态,配置态、挂起态。
首先将设备连接到Hub的端口上,这时就处于Attach态;端口然后给设备提供电源,这时处于Power态,这样才有了能量,总得吃了饭才能干活阿。供电态之后,设备还没有接受过host的任何指示,处于的状态为Default态,在Default 状态下设备默认地址为0。目前它还没有得到主机的认可。这里强调一下,默认地址0是很重要的,是公共财产,谁也别想单独拥有,否则后果很严重。Host检测到USB设备的插入后,会重新给该设备分配一个地址,使设备进入寻址态;然后host会与设备通讯获取设备的信息,USB设备告诉host自己都能干什么,然后host就选择设备的一种功能进行配置,从此USB设备就知道自己工作在哪种功能下了,找到了人生目标啊!从此步入了配置态,就开始正常的工作了,如果是U盘就开始传输文件了,当然正式工作还有很多东西要讲,我们先考虑枚举这段过程。当host没有什么任务、工作需要USB设备完成时,为了节能、低碳会将设备挂起,从此设备进入挂起状态。
刚到一个班级时,老师会为每一个学生分配一个学号,来标识一个学生,这就类似于这里的设备地址。老师提问时如果叫到9527,所有的人都会听到,然后判断是不是叫自己,如果不是不予理会;如果叫到的是自己,就需要起来回答问题。从1.3的逻辑拓扑结构来看,host会将数据或者命令广播出去,所有的设备都要判断是否给予响应,决定其是否响应的就是地址,host的呼叫的地址是不是自己。
有长度限制,分之!
|