全部博文(18)
分类: 嵌入式
2012-08-28 14:54:33
什么是USB,这个问题对于大家来说,肯定不陌生吧,随着生活、办公信息化的进行,我们几乎每天都使用到这种技术,从U盘、USB键盘、USB鼠标、USB Wifi、USB摄像头、USB读卡器,可以说,USB技术极大地方便了我们的生活。在USB未出现之前,那时的计算机上总要接一大堆各式各样的电缆,人们需要花很长一段时间学习各种电缆的种类、连接方法、配置方法,而且稍不注意连接不正确就可能导致计算机接口烧坏。但现在有了USB接口,人们只需要将电子产品的USB接口接到计算机的USB接口上,几乎不需要做些别的事,就可以轻而易举并且高速地完成数据的传输。如此好的技术自然得到了极大的推广,在笔者看来,USB技术对于用户和厂商来说,都有很多优点,所以这是USB技术成功的原因。
技术对用户的好处1.简单通用美观
2.不需要配置
3.传输速度快
在没有USB技术之前,用户可能需要花不少钱去购买各种各样的电缆来连接设备,但现在只需要一两条USB电缆就可以做到了,而且也不用学习各种电缆的插接、配置方法,不用钻到桌子下到机箱背后接电缆确实方便很多。同时USB传输速度也很快,USB2.0的传输上限是480M比特/秒,这个速度相当于拷贝一个60M的文件只需要1秒,有这样高的速度,你还会回到当初波特率为11520的串口时代吗。
技术对厂商的好处1.成本低
2.技术统一成熟
3.技术支持好
USB接口成本确实并不高,相比以前的DB9串口,USB只有四线,甚至USB接口都可以不用,直接在PC板上利用焊盘就可以做出接口出来,对于厂商来说,当然是能省一分就省一分。
USB接口一经推出就得到了广大的硬件、软件厂商的支持,这些都是世界知名的硬件、软件厂商。即使是比较高傲的厂商也不得不支持(如苹果,它期望用它的IEEE 1394取代USB,但最终还是兼容了USB),所以对于小的厂商来说,不用担心自己的设备会被大的厂商“不兼容”。同时USB的硬件特性也决定了可以在USB接口上做许多创新,从USB电风扇到USB茶壶等东西,这一点也有利于小的厂商发展。
USB技术有专门的网站和论坛,几乎所有的文档都是开源免费下载的,从事USB技术开发的也多是各大公司的老道工程师,在大家的努力下制定了一系列的协议,如此开放的环境自然使得USB技术充满活力。
甚至在动漫《攻壳机动队》中,USB接口成为了未来世界中人脑与计算机进行数据的交互接口,当然,这只是一个科幻故事,不过确实说明了USB技术的发展前景一片良好。
的缺点说了那么多USB的优点,那么USB有没有缺点呢,事物都是具有两面性的,USB技术自然也有,在笔者看来,主要有的缺点就一个:
1.开发复杂
这个缺点是针对开发人员来说的,不管是在软件上还是硬件上,USB都是方便了用户,苦了工程师,在串口时代,硬件工程师只需要短短的500~1000行Verilog/VHDL代码就可以实现一个UART控制器,软件工程师也仅需要百余行代码就可以控制这个串口控制器来完成通信,而现在呢,USB控制器很复杂,需要有一定能力的公司才能设计得出来,在软件上更是,软件工程师需要学习USB的通信过程,各种USB设备类的协议,各种操作系统的USB框架,USB控制器的结构,才能开始软件设计,首先要完成USB设备端的固件,接着是USB主机端的驱动,主机端的应用程序。。。。。。调试过程还需要昂贵的USB协议分析仪,如果做出产品来还得向USB组织,微软缴纳一定的保护费,否则驱动会显示没有经过认证,这便是USB的不便之处,但技术就是这样,开发者不入地狱,谁入地狱呢。
系统
关于USB的协议,USB1.1和USB2.0都有专门的协议介绍,写得也很详细,个人觉得比较好的学习方法还是去看原版的协议,因为从任何其他的资料书学习到的可能都是片面的,从本文档也是,但是如果不介绍USB协议,这一章就失去了意义了,因此,本章是从笔者的角度理解的协议,介绍的知识有助于理解下面关于USB Device和USB Host两章的学习,同时因为本文档是关于USB软件开发的,因此重点在于USB数据流模型,关于协议层和电气规范,请参看USB协议。
系统介绍关于USB系统的介绍很短,所以这里直接把USB协议中的系统介绍抄下来了,也方便大家有个概念:
4.1 USB 系统的描述 一个USB 系统主要被定义为三个部分: ·USB 的互连; ·USB 的设备; ·USB 的主机。 USB 的互连是指USB 设备与主机之间进行连接和通信的操作,主要包括以下几方面: ·总线的拓扑结构:USB 设备与主机之间的各种连接方式; ·内部层次关系:根据性能叠置,USB 的任务被分配到系统的每一个层次; ·数据流模式:描述了数据在系统中通过USB 从产生方到使用方的流动方式; ·USB 的调度:USB 提供了一个共享的连接。对可以使用的连接进行了调度以支持同步 数据传输,并且避免的优先级判别的开销。 USB 的设备及主机的细节将讲述于后。 4.1.1 总线布局技术 USB 连接了USB 设备和USB 主机,USB 的物理连接是有层次性的星型结构。每个网络集 线器是在星型的中心,每条线段是点点连接。从主机到集线器或其功能部件,或从集线器到 集线器或其功能部件,从图4-1 中可看出USB 的拓扑结构。
4.1.1.1 USB 的主机 在任何USB 系统中,只有一个主机。USB 和主机系统的接口称作主机控制器,主机控 制器可由硬件、固件和软件综合实现。根集线器是由主机系统整合的,用以提供更多的连接 点。关于主机更多的内容可参见4.9 节和第10 章。 4.1.1.2 USB 的设备 USB 的设备如下所示: ·网络集线器,向USB 提供了更多的连接点; ·功能器件:为系统提供具体功能,如ISDN 的连接,数字的游戏杆或扬声器。 USB 设备提供的USB 标准接口的主要依据: ·对USB 协议的运用; ·对标准USB 操作的反馈,如设置和复位; ·标准性能的描述性信息; 关于USB 设备的更多信息请参见4.8 节和第9 章。 4.2 物理接口 USB 的物理接口的电气特性在第7 章,机械特性在第6 章详细介绍。 4.2.1 电气特性 USB 传送信号和电源是通过一种四线的电缆,图4-2 中的两根线是用于发送信号。
存在两种数据传输率: ·USB 的高速信号的比特率定为480Mb/s; ·USB 的全速信号的比特率定为12Mb/s; ·低速信号传送的模式定为1.5Mb/s;
USB 2.0 主机控制器和集线器提供能力,使全速和低速数据可以与高速率主机控制器连接, 让主机控制器识别全速或低速设备。以最大限度连接,全速和低速连接后,带宽应用于高速 设备。 低速模式,是指以支持数量有限的低速设备,如鼠标,因此越来越普遍使用,将缓解总线利 用率。时钟传输,编码与差分数据。USB 系统编码方案采用NRZI,每遇到6 个1 就在NRZI 编码之前添加一个0,称为位填充,所以数据信息中都要求此方法。 电缆中包括VBUS 、GND 二条线,向设备提供电源。VBUS 使用+5V 电源。USB 对电缆 长度的要求很宽,最长可为几米。通过选择合适的导线长度以匹配指定的IR drop 和其它一 些特性,如设备能源预算和电缆适应度。为了保证足够的输入电压和终端阻抗。重要的终端 设备应位于电缆的尾部。在每个端口都可检测终端是否连接或分离,并区分出高速,或低速 设备。 4.2.2 机械特性 电缆和连接器的机械特性将在第5 章详述。所有设备都有一个上行的连接。上行连接器 和下行连接器是不可简单的互换,这样就避免了集线器间的非法的循环往复的连接,电缆中 有四根导线:一对互相缠绕的标准规格线,一对符合标准的电源线,连接器有四个方向,具 有屏蔽层,以避免外界干扰,并有易拆装的特性。 4.3 电源 主要包括两方面: ·电源分配:即USB 的设备如何通过USB 分配得到由主计算机提供的能源; ·电源管理:即通过电源管理系统,USB 的系统软件和设备如何与主机协调工作。 4.3.1 电源分配 每个USB 单元通过电缆只能提供有限的能源。主机对那种直接相连的USB 设备提供电源 供其使用。并且每个USB 设备都可能有自己的电源。那些完全依靠电缆提供能源的设备称作 “总线供能”设备。相反,那些可选择能源来源的设备称作“自供电”设备。而且,集线器 也可由与之相连的USB 设备提供电源。受一定布局限制的带有“总线供能”集线器的体系结 构将在第十一章讨论。在图4-4(位于3.8)中,键盘,输入笔和鼠标均为“总线供能”设备。 4.3.2 电源管理 USB 主机与USB 系统有相互独立的电源管理系统。USB 的系统软件可以与主机的能源管 理系统结合共同处理各种电源子件如挂起、唤醒,并且有特色的是,USB 设备应用特有的电 源管理特性,可让系统软件和控制其电源管理。 USB 的电源分配和电源管理特性使之可以被设计在电源传感系统中,如采用电池的笔记 本电脑。 4.4 总线协议 USB 总线属一种轮讯方式的总线,主机控制端口初始化所有的数据传输。 每一总线执行动作最多传送三个数据包。按照传输前制定好的原则,在每次传送开始时, 主机控制器发送一个描述传输运作的种类、方向,USB 设备地址和终端号的USB 数据包,这 个数据包通常称为标志包(token packet)。USB 设备从解码后的数据包的适当位置取出属于 自己的数据。数据传输方向不是从主机到设备就是从设备到主机。在传输开始时,由标志包 来标志数据的传输方向,然后发送端开始发送包含信息的数据包或表明没有数据传送。接收 端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端之间的USB 数据传 输,在主机和设备的端口之间,可视为一个通道。存在两种类型的通道:流和消息。流的数 据不像消息的数据,它没有USB 所定义的结构,而且通道与数据带宽、传送服务类型,端口 特性(如方向和缓冲区大小)有关。多数通道在USB 设备设置完成后即存在。USB 中有一个 特殊的通道——缺省控制通道,它属于消息通道,当设备一启动即存在,从而为设备的设置、 查询状况和输入控制信息提供一个入口。 事务预处理允许对一些数据流的通道进行控制,从而在硬件级上防止了对缓冲区的高估 或低估,通过发送不确认握手信号从而阻塞了数据的传输速度。当不确认信号发过后,若总 线有空闲,数据传输将再做一次。这种流控制机制允许灵活的任务安排,可使不同性质的流 通道同时正常工作,这样多种流通常可在不同间隔进行工作,传送不同大小的数据包。 4.5 健壮性 USB 健壮性的特征在于: ·使用差分的驱动接收和防护,以保证信号完整性; ·在数据和控制信息上加了循环冗余码(CRC); ·对装卸的检测和系统级资源的设置; ·对丢失或损坏的数据包暂停传输、利用协议自我恢复; ·对流数据进行控制,以保证同步信号和硬件缓冲管理的安全; ·数据和控制通道的建立,使功能部件的相互不利的影响独立开,消除了负作用。 4.5.1 错误检测 USB 传输介质产生的错误率是与自然界的异常现象的概率相吻合,是瞬时一现的,因此 就要在每个数据包中加入检测位来发现这些瞬时的错误,并且提供了一系列硬件和软件设施 来保证数据的正确性。 协议中对每个包中的控制和数据位都提供了循环冗余码校验,若出现了循环冗余码的错 误则被认为是该数据包已被损坏,循环冗余码可对一位或两位的错误进行100%的修复。 4.5.2 错误处理 协议在硬件或软件级上提供对错误的处理。硬件的错误处理包括汇报并重新进行上一次 失败的传输、传输中若遇到错误,USB 主机控制器将重新进行传输,最多可再进行三次。若 错误依然存在,则对客户端软件报告错误,客户端软件可用一种特定的方法进行处理。 4.6 系统设置 USB 设备可以随时的安装和折卸,因此,系统软件在物理的总线布局上必须支持这种动 态变化。 4.6.1 USB 设备的安装 所有的USB 设备都是通过端口接在USB 上,网络集线器知道这些指定的USB 设备,集线 器有一个状态指示器指明在其某个端口上,USB 设备是否被安装或拆除了,主机将所有的集 线器排成队列以取回其状态指示。在USB 设备安装后,主机通过设备控制通道激活该端口并 以预设的地址值给USB 设备。 主机对每个设备指定唯一的USB 地址。并检测这种新装的USB 设备是集线器还是功能部 件。主机为USB 设备建立了控制通道,使用指定的USB 的地址和0 号端口。 如果安装的USB 设备是集线器,并且USB 设备连在其端口上,那上述过程对每个USB 设备的安装都要做一遍。 如果安装的设备是功能部件,那么主机中关于该设备的软件将因设备的连接而被引发。 4.6.2 USB 设备的拆卸 当USB 设备从集线器的端口拆除后,集线器关闭该端口,并且向主机报告该设备已不存 在。USB 的系统软件将准确进行处理,如果去除的USB 设备上集线器,USB 的系统软件将对 集线器反连在其上的所有设备进行处理。 4.6.3 总线标号 总线标号就是对连接在总线上的设备指定唯一的地址的一种动作,因为USB 允许USB 设备在任何时刻从USB 上安装或拆卸,所以总线标号是USB 的系统软件始终要作的动作,而 且总线标号还包括对拆除设备的检测和处理。 4.7 数据流种类 数据和控制信号在主机和USB 设备间的交换存在两种通道:单向和双向。USB 的数据传 送是在主机软件和一个USB 设备的指定端口之间。这种主机软件和USB 设备的端口间的联系 称作通道。总的来说,各通道之间的数据流动是相互独立的。一个指定的USB 设备可有许多 通道。例如,一个USB 设备存在一个端口,可建立一个向其它USB 设备的端口,发送数据的 通道,它可建立一个从其它USB 设备的端口接收数据的通道。 USB 的结构包含四种基本的数据传输类型: ·控制数据传送:在设备连接时用来对设备进行设置,还可对指定设备进行控制,如 通道控制; ·批量数据传送:大批量产生并使用的数据,在传输约束下,具有很广的动态范围; ·中断数据的传送:用来描述或匹配人的感觉或对特征反应的回馈。 ·同步数据的传送:由预先确定的传送延迟来填满预定的USB 带宽。 对于任何对定的设备进行设置时一种通道只能支持上述一种方式的数据传输,数据流模 式的更多细节在第五章中详述。 4.7.1 控制数据传送 当USB 设备初次安装时,USB 系统软件使用控制数据对设备进行设置,设备驱动程序通 过特定的方式使用控制数据来传送,数据传送是无损性的。 4.7.2 批量数据传送 批量数据是由大量的数据组成,如使用打印机和扫描仪时,批量数据是连续的。在硬件 级上可使用错误检测可以保证可靠的数据传输,并在硬件级上引入了数据的多次传送。此外 根据其它一些总线动作,被大量数据占用的带宽可以相应的进行改变。 4.7.3 中断数据传输 中断数据是少量的,且其数据延迟时间也是有限范围的。这种数据可由设备在任何时刻 发送,并且以不慢于设备指定的速度在USB 上传送。 中断数据一般由事件通告,特征及座标号组成,只有一个或几个字节。匹配定点设备的 座标即为一例,虽然精确指定的传输率不必要,但USB 必须对交互数据提供一个反应时间的 最低界限。 4.7.4 同步传输 同步数据的建立、传送和使用时是连续且实时的,同步数据是以稳定的速率发送和接收 实时的信息,同步数据要使接收者与发送者保持相同的时间安排,除了传输速率,同步数据 对传送延迟非常敏感。所以同步通道的带宽的确定,必须满足对相关功能部件的取样特性。 不可避免的信号延迟与每个端口的可用缓冲区数有关。 一个典型的同步数据的例子是语音,如果数据流的传送率不能保持,数据流是否丢失将 取决于缓冲区的大小和损坏的程度。即使数据在USB 硬件上以合适的速率传送,软件造成的 传送延迟将对那些如电话会议等实时系统的应用造成损害。 实时的传送同步数据肯定会发生潜在瞬时的数据流丢失现象,换句话说,即使许多硬件 机制,如重传的引入也不能避免错误的产生。实际应用中,USB 的数据出错率小到几乎可以 忽略不计。从USB 的带宽中,给USB 同步数据流分配了专有的一部分以满足所想得到的传速 率,USB 还为同步数据的传送设计了最少延迟时间。 4.7.5 指定USB 带宽 USB 的带宽分配给各个通道,当一个通道建立后,USB 就分配给它一定的带宽,USB 设 备需要提供一些数据缓冲区。若USB 提供了更多带宽,则需更多的缓冲区。USB 的体系要保 证缓冲引导的硬件的延迟限定在几毫秒内。 USB 的带宽容量可以容纳多种不同的数据流,因此保证USB 上可以连接大量设备,如可 以容纳从1B+D 直到T1 速率范围的电信设备。同时USB 支持在同一时刻不同设备具有不同比 特率,并具有一个动态变动的范围。 USB 规范对总线的每类转输规定的具体的原则。 4.8 USB 设备 USB 设备分为诸如集线器、分配器或文本设备等种类。集线器类指的是一种提供USB 连 接点的设备(详见第十一章),USB 设备需要提供自检和属性设置的信息,USB 设备必须在任 何时刻执行与所定义的USB 设备的状态相一致的动态。 4.8.1 设备特性 当设备被连接、编号后,该设备就拥有一个唯一的USB 地址。设备就是通过该USB 地址 被操作的,每一个USB 设备通过一个或多个通道与主机通讯。所有USB 设备必须在0 号端口 上有一指定的通道,每个USB 设备的USB 控制通道将与之相连。通过此控制通道,所有的 USB 设备都列入一个共同的准入机制,以获得控制操作的信息。 在0 号端口上,控制通道中的信息应完整的描述USB 设备、此类信息主要有以下几类: ·标准信息:这类信息是对所有USB 设备的共同性的定义,包括一些如厂商识别、设备 种类、电源管理等的项目。设备设置、接口及终端的描述在此给出。关于这些具体的描述信 息在第九章给出; ·类别信息:此类信息给出了不同USB 的设备类的定义,主要反映其不同点。 ·USB 厂商信息:USB 设备的厂商可自由的提供各种有关信息,其格式不受该规范制约。 此外,每个USB 设备均提供USB 的控制和状态信息。 4.8.2 设备描述 主要分为两种设备类:集线器和功能部件。只有集线器可以提供更多的USB 的连接点, 功能部件为主机提供了具体的功能。 4.8.2.1 集线器 在即插即用的USB 的结构体系中,集线器是一种重要设备。图4-3 所示是 一种典型的集线器。从用户的观点出发,集线器极大简化了USB 的互连复杂性,而且以很低 的价格和高易用性提供了设备的健壮性。
集线器串接在集中器上,可让不同性质的设备连接在USB 上,连接点称作端口。每个 集线器将一个连接点转化成许多的连接点。并且该体系结构支持多个集线器的连接。 每个集线器的上游端口向主机方向进行连接。每个集线器的下游端口允许连接另外的集 线器或功能部件,集线器可检测每个下游端口的设备的安装或拆卸,并可对下游端口的设备 分配能源,每个下游端口都具有独立的能力,不论高速或低速设备均可连接。集线器可将低 速和高速端口的信号分开。 一个集线器包括两部分:集线控制器(Controller)和集线放大器(Repeater)。集线放 大器是一种在上游端口和下游端口之间的协议控制开关。而且硬件上支持复位、挂起、唤醒 的信号。集线控制器提供了接口寄存器用于与主机之间的通信、集线器允许主机对其特定状 态和控制命令进行设置,并监视和控制其端口。 4.8.2.2 功能部件 图4 –3 典型集线器 功能部件是一种通过总线进行发送接收数据和控制信息的USB 设备,通过一根电缆连接在 集线器的某个端口上,功能设备一般是一种相互无关的外设。然而一个物理单元中可以有多 个功能部件和一个内置集线器,并利用一根USB 电缆,这通常被称为复合设备,即一个集线 器连向主机,并有一个或多个不可拆卸的USB 设备连在其上。 每个功能设备都包含设置信息,来描述该设备的性能和所需资源。主机要在功能部件 使用前对其进行设置。设置信息包括USB 带宽分配,选择设备的设置信息等。 下机列举了一些功能部件: ·定位设备:如鼠标或光笔; ·输入设备:如键盘; ·电信适配器:如ISDN。 4.9 USB 主机:硬件和软件 USB 的主机通过主机控制器与USB 设备进行交互。主机功能如下: ·检测USB 设备的安装和拆卸 ·管理在主机和USB 设备之间的控制流; ·管理在主机和USB 设备之间的数据流; ·收集状态和动作信息; ·提供能量给连接的USB 设备。 主机上USB 的系统软件管理USB 设备和主机上该设备软件之间的相互交互,USB 系统软 件与设备软件间有三种相互作用方式: ·设备编号和设置; ·同步数据传输; ·异步数据传输; ·电源管理 ·设备和总线管理信息。 只要可能,USB 系统软件就会使用目前的主机软件接口来管理上述几种方式。 4.10 体系结构的扩充 USB 的体系结构包含主机控制驱动器和USB 驱动器之间的接口的扩展,使多个主机控制 器和主机控制驱动器的使用成为可能。 图4 –4 台式机环境下的集线器 典型的 USB 体系结构
|
从这份枯燥的文档中我们能学到些什么呢,至少知道了一些概念吧,知道了这些概念,我们就可以从USB用户上升到USB开发者的层面了,也表示你已经下到了地狱的第一层,个人觉得其中比较重要的概念如下:
1.USB实际上是一种有主控制端,网络式的通信方式。
2.USB传输速度分为低速(1.5Mb/s)、全速(12Mb/s)、高速(480Mb/s)三种。
3.USB有四根线,两根5V电源线(VBUS+、VBUS-),两根数据线(D+、D-)。
4.USB通信前需要进行一系列的协商操作,叫做枚举
5.USB有四种传输方式,控制传输、块传输、中断传输、同步传输
实际上学习的过程,大家最好把USB当做网络而不是像串口、SPI、I2C(这个倒是有点接近了)那样来学习、通常情况下UART、SPI两端的控制器都是对等的,而USB不一样,主机控制器只能干主机控制器的或,从设备控制器只能干从设备的活,关于主控制器和从设备控制器的细节在后面的USB Device和USB Host章节将进行介绍。USB总线是网络,可以通过USB Hub进行扩展,一个USB网络就像上面图那样构成了金字塔形,是网络那就得要有地址吧,USB总线为每个设备提供了7位地址,按道理说一个USB总线上可以有128个地址,但0号地址比较特殊,这个地址是保留的,因为新接入的设备的地址是通过枚举过程主机端给分配的,那枚举过程不也是通信吗,也需要地址,所以0号地址被用来作为新接入设备的默认地址,枚举好了就不使用了,因此一个USB总线最多能接的设备只有127个。
关于USB的三种传输速度,对于USB1.1协议来说,只支持低速、全速两种,而USB2.0则是三种都支持,支持哪种协议需要看硬件控制器的能力,对于协议来说USB2.0中就包含了USB1.1,快要普及的USB3.0协议也包含了USB2.0协议,至于硬件怎么区分这三种速度,在其后的枚举过程一章中将会有介绍。
USB的四根线,VBUS+、VBUS-是电源线,提供5V的电压和一定的驱动能力,因此USB口可以用来不进行通信纯粹作为一个电源端口,VBUS的驱动能力取决于驱动电路的驱动能力,与控制器无关。按照USB协议规定:设备在未配置前,可以从VBUS上最多获取100mA的电流,配置后最多可以获取500mA的电流,所以最好还是参照标准的USB协议好。
D+、D-为差分信号线,在低速和全速模式中,采用电压传输模式,在高速模式下,是电流传输模式,编码方式采用NRZI编码方式:当数据为0时,电平翻转;数据位1时,电平不翻转。如果长时间电平不变化怎么办呢,就采用位填充处理,位填充实际上是如下的:当遇到6个数据1时,强制插入一个数据0。经过位填充后的数据,由串行接口引擎(SIE)将数据串行化和NRZI编码后,发送到USB的差分信号线上。接收的过程刚好相反,接收端采样数据线,提取时钟,并将数据并行化,并去掉位填充,恢复出数据来。