当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : USB接口技术
帖子发表于 : 2007-08-10 17:14 

注册: 2007-05-09 19:59
帖子: 28
送出感谢: 0 次
接收感谢: 0 次
原贴:http://bbs.eeworld.com.cn/316/ShowPost.aspx


USB接口技术(一)



最近一段时间忙着毕业课题的设计,其中有一部分设计到USB通信,由于本人初次接触到USB底层硬件设计和软件的编写,同时现在USB通信的应用领域极其广泛,因此将一些关于USB通信的基本知识向大家介绍介绍,希望对大家有一定的帮助!



USB总线协议



USBUniversal Serial Bus总线协议是以Intel为主并有CompaqMicrosoftIBMDECNorthern Telecom以及***NEC等共七家公司共同制定的串行接口标准1994年11月制定了第一个草案1996年2月公布了USB规范版本1.0USB可把多达127个外设同时联到你的系统上所有的外设通过协议来共享USB的带宽其12Mbps的带宽对于键盘鼠标等低中速外设是完全足够的注在1999年2月发布的USB规范版本2.0草案中已建议将12Mbps的带宽提升到120-240MbpsUSB允许外设在主机和其它外设工作时进行连接配置使用及移除即所谓的即插即用Plug & Play同时USB总线的应用可以清除PC上过多的I/O端口而以一个串行通道取代使PC与外设之间的连接更容易。



一. 总线拓扑结构



USB总线的物理连接是一种分层的菊花链结构集线器(hub)是每个星形结构的中心PC机就是主机和根Hub用户可以将外设或附加的Hub与之相连这些附加的Hub可以连接另外的外设以及下层HubUSB支持最多5个Hub层以及127个外设。



二. USB的物理层



USB的物理接口包括电气特性和机械特性:USB通过一个四线电缆来传输信号与电源。其中D+和D-是一对差模的信号线而VBus和GND则提供了5V的电源,它可以给一些设备(包括Hub)供电。当然要有一定的条件限制。USB提供了两种数据传输率:一种是12Mb的高速(full speed)模式,另一种是1.5Mb的低速模式。这两种模式可以同时存在于一个USB系统中,而引入低速模式主要是为了降低要求不高的设备的成本,比如:鼠标键盘等等。USB信号线在高速模式下必须使用带有屏蔽的双绞线,而且最长不能超过5m。而在低速模式时中可以使用不带屏蔽或不是双绞的线,但最长不能超过3m。这主要是由于信号衰减的限制,为了提供信号电压保证以及与终端负载相匹配,在电缆的每一端都使用了不平衡的终端负载,这种终端负载也保证了能够检测外设与端口的连接或分离并且可以区分高速与低速设备。所有的设备都有上行的接口。上行和下行的接头是不能互换的,这保证了不会有非法的连接出现。插头与插座有两个系列分别为A和B系列。A用于基本固定的外围设备,而系列B用于经常拔插的设备。这两个系列是不能互换的。



三.USB设备



USB设备包括Hub和功能设备,而功能设备又可以细分为定位设备字符设备等等。为了进一步叙述,我们给出端点(endpoint)和管道(pipe)的概念。



端点:每一个USB设备在主机看来就是一个端点的集合。主机只能通过端点与设备进行通讯,以使用设备的功能。每个端点实际上就是一个一定大小的数据缓冲区,这些端点在设备出厂时就已定义好。在USB系统中每一个端点都有唯一的地址,这是由设备地址和端点号给出的。每个端点都有一定的特性,其中包括传输方式,总线访问频率,带宽端点号,数据包的最大容量等等。端点必须在设备配置后才能生效(端点0除外)。



端点0通常为控制端点,用于设备初始化参数等。端点1,2等一般用作数据端点,存放主机与设备间往来的数据。 管道: 一个USB管道是驱动程序的一个数据缓冲区,与一个外设端点的连接。它代表了一种在两者之间移动数据的能力。一旦设备被配置,管道就存在了。管道有两种类型:数据流管道,其中的数据没有USB定义的结构,与消息管道,其中的数据必须有USB定义的结构。管道只是一个逻辑上的概念。所有的设备必须支持端点0以作为设备的控制管道。通过控制管道,可以获取完全描述USB设备的信息。包括设备类型,电源管理配置端点描述,等等。只要设备连接到USB上,并且上电,端点0就可以被访问。与之对应的控制管道就存在了。一个USB设备可以分为三个层。最底层是总线接口,用来发送与接收包。中间层处理总线接口与不同的端点之间的数据流。通一个端点是数据最终的使用者或提供者。它可以看作数据的源或接收端。最上层就是USB设备所提供的功能,比如:鼠标或键盘等。

USB接口技术(二)

Hub



Hub在USB结构中是一个关键。它提供了附加的USB节点。这些节点被称为端口。Hub可以检测出每一个下行端口的状态。并且可以给下端的设备提供电源。



即插即用



USB设备可以即插即用,但在可以使用之前,必须对设备进行配置。一旦设备连接到某一个USB的节点上,USB就会产生一系列的操作来完成对设备的配置。这种操作被称为总线枚举过程。



1.设备所连接的Hub检测出端口上有设备连接,通过状态变化管道向主机报告。



2.主机通过询问Hub以获取确切的信息。



3.主机这时知道设备连接到哪个端口上,于是向这个端口发出复位命令。



4.Hub发出的复位信号结束后,端口被打开,Hub向设备提供100mA的电源。这时,设备上电所有的寄存器复位,并且,以缺省地址0以及端点0响应命令。



5.主机通过缺省地址与端点0进行通讯。赋予设备一个独一的地址,并且读取设备的配置信息。



6.最后主机对设备进行配置,该设备就可以使用了。当该设备被移走时,Hub依然要报告主机,并且关闭端口。一旦主机接到设备移走的报告,就会改写当前结构信息。



设备的电源



USB设备的电源可以由USB总线供给,也可以自备电源。一个USB设备可以具有这两种供电方式。但同一时刻只能由一种方式供电。这两种供电方式是可以切换的。



设备的挂起



为了节电,当设备在指定的时间内没有总线传输,USB设备自动进入挂起状态。如果设备所接的Hub的端口被禁止了,设备也将进入挂起状态(称之为选择挂起)。当然,主机也可以进入挂起状态。



USB设备当总线活动时,就会离开挂起状态。一个设备也可以通过电信号来远程唤醒进入挂起状态的主机。这个能力是可选的。如果一个设备具有这个能力,主机有能力禁止或允许使用这种能力。(To Be Continued)



USB接口技术(三)

USB主机

USB主机在USB系统中处于中心地位。并且,对USB及其连接的设备有着特殊的责任。主机控制着所有对USB的访问一个外设。只有主机允许才有权力访问总线。主机同时也监测着USB的结构。USB主机包括三层:设备驱动程序,USB系统软件,USB主控制器(主机的总线接口)。另外,还有两个软件接口:USB驱动USBD接口,主机控制驱动(HCD)接口。

USB数据流

从逻辑上讲,USB数据的传输是通过管道进行的。USB系统软件通过缺省管道(与端点0相对应)管理设备。设备驱动程序通过其它的管道来管理设备的。功能接口实际的数据传输过程是这样的:设备驱动程序通过对USBD接口(USB driver interface)的调用,发出输入输出请求(IRPI/O Request Packet)。USB驱动程序接到请求后调用HCD接口(host controller driver interface),将IRP转化为USB的传输(transfer),一个IRP可以包含一个或多个USB传输; 然后HCD将USB传输分解为总线操作(transaction),由主控制器以包(packet)的形式发出。需要注意的是,所有的数据传输都是由主机开始的,任何外设都无权开始一个传输。

IRP是由操作系统定义的,而USB传输与总线操作是USB规范定义的。为了进一步说明USB传输,我们引出帧frame的概念。 帧:USB总线将1ms定义为一帧,每帧以一个SOF包为起始,在这1ms里USB进行一系列的总线操作。引入帧的概念主要是为了支持与时间有关的总线操作。 为了满足不同外设和用户的要求,USB提供了四种传输方式:控制传输,同步传输,中断传输,批传输。它们在数据格式,传输方向,数据包容量限制,总线访问限制等方面有着各自不同的特征:

控制传输(Control Transfer)

1.通常用于配置/命令/状态等情形

2.其中的设置操作setup和状态操作status的数据包具有USB定义的结构。因此控制传输只能通过消息管道进行

3.支持双向传输

4.对于高速设备,允许数据包最大容量为81632或64字节。对于低速设备,只有8字节一种选择

5.端点不能指定总线访问的频率和占用总线的时间,USB系统软件会做出限制

6 具有数据传输,保证在必要时可以重试

同步传输(Isochronous Transfer)

1.是一种周期的连续的传输方式,通常用于与时间有密切关系的信息的传输

2.数据没有USB定义的结构数据流管道

3.单向传输。如果一个外设需要双向传输,则必须使用另一个端点

4.只能用于高速设备,数据包的最大容量可以从0到1023个字节

5.具有带宽保证,并且保持数据传输的速率恒定。每个同步管道每帧传输一个数据包

6.没有数据重发机制,要求具有一定的容错性

7.与中断方式一起占用总线的时间不得超过一帧的90%

中断传输(Interrupt Transfer)

1.用于非周期的自然发生的数据量很小的信息的传输,如键盘鼠标等

2.数据没有USB定义的结构数据流管道

3.只有输入这一种传输方式即外设到主机

4.对于高速设备允许数据包最大容量为小于或等于64字节,对于低速设备,只能小于或等于8字节

5.具有最大服务周期保证,即在规定时间内保证有一次数据传输

6.与同步方式一起占用总线的时间不得超过一帧的90%

7.具有数据传输保证在必要时可以重试

批传输(Bulk Transfer)

1.用于大量的对时间没有要求的数据传输

2.数据没有USB定义的结构数据流管道

3.单向传输,如果一个外设需要双向传输,则必须使用另一个端点

4.只能用于高速设备,允许数据包最大容量为81632或64字节

5.没有带宽的保证,只要有总线空闲就允许传输数据,优先级小于控制传输

6.具有数据传输,保证在必要时可以重试,以保证数据的准确性(To be continued)



USB接口技术(四)



USB总线协议

所有总线操作都可以归结为三种包的传输:任何操作都是从主机开始的,主机以预先排好的时序发出一个描述操作类型,方向外设地址,以及端点号(这将在以下部分给予解释)的包。我们称之为令牌包(Token Packet)。然后在令牌中指定的数据发送者发出一个数据包或者指出它没有数据可以传输。而数据的目的地一般要以一个确认包(Handshake Packet)作出响应,以表明传输是否成功。

域的类型

同步域(SYNC field)。所有的包都起始于SYNC域,它被用于本地时钟与输入信号的同步。并且在长度上定义为8位。SYNC的最后两位作为一个记号,表明PID域(标识域)的开始。在以后的叙述中SYNC域将被省去。

标识域(Packet Identifier Field)。对于每个包PID都是紧跟着SYNC的。PID指明了包的类型及其格式。主机和所有的外设都必须对接收到的PID域进行解码。如果出现错误或者解码为未定义的值,那么这个包就会被接收者忽略。如果外设接收到一个PID,它所指明的操作类型或者方向不被支持,外设将不作出响应。

地址域(Address Field)。外设端点都是由地址域指明的。它包括两个子域外设地址和外设端点。外设必须解读这两个域。其中有任何一个不匹配,这个令牌就会被忽略。

外设地址域(ADDR)。指定了外设,它根据PID所说明的令牌的类型,指明了外设是数据包的发送者或接收者。ADDR共6位,因此最多可以有127个地址。一旦外设被复位或上电,外设的地址被缺省为0,这时必须在主机枚举过程中被赋予一个独一的地址。而0地址只能用于缺省值而不能分配作一般的地址。

端点域(ENDP)。有4位,它使设备可以拥有几个子通道,所有的设备必须支持一个控制端点0(endpoint 0)。低速的设备最多支持2个端点0和一个附加端点。高速设备可以支持最多16个端点。

帧号域(Frame Number Field)。这是一个11位的域,指明了目前帧的排号。每过一帧(1ms),这个域的值加1,到达最大值XFF后,返回0。这个域只存在于每帧开始时的SOF令牌中,SOF令牌在下面将详细介绍。

数据域(Data Field)。范围是01023字节,而且必须是整数个字节。

CRC校验。包括令牌校验和数据校验。

包的类型

令牌包(Token Packed) 其中包括:IN(输入),OUT(输出),SETUP(设置)和SOF(Start of Frame帧起始)四种类型。

对于OUT和SETUP来说,ADDR和ENDP中所指明的端点将接收到主机发出的数据包,而对IN来说,所指定的端点将输出一个数据包。

Token和SOF在三个字节的时间内,以一个EOP(End of Packet)结束。如果一个包被解码为Token包,但是并没有在3个字节时间内以EOP结束,它就会被看作非法或被忽略。

数据包包括Data0和Data1两种类型。这两种包的定义是为了支持数据触发。同步数据包包含了PIDDATA和CRC三个域。

应答包(Handshake Packet)仅包含一个PID域。Handshake用来报告数据传输的状态,只有支持流控制的传输类型,控制中断和批传输才能返回Handshake。


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-08-16 19:08 
头像

注册: 2007-04-18 3:09
帖子: 43
地址: UESTC
送出感谢: 0 次
接收感谢: 0 次
大概看了一下,感觉不错,虽然大多看不懂
ps:我是菜鸟


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译