下载

3下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 USB2.0协议中文版

USB2.0协议中文版.pdf

USB2.0协议中文版

小尹
2010-02-10 0人阅读 举报 0 0 暂无简介

简介:本文档为《USB2.0协议中文版pdf》,可适用于IT/计算机领域

USB规范初探ByHevryEmail:hevryjonhotmailcomPageofUSB规范USB体系简介体系简介体系简介体系简介USB是一种支持热插拔的高速串行传输总线它使用差分信号来传输数据最高速度可达MbS。USB支持“总线供电”和“自供电”两种供电模式。在总线供电模式下设备最多可以获得mA的电流。USB被设计成为向下兼容的模式当有全速(USB)或者低速(USB)设备连接到高速(USB)主机时主机可以通过分离传输来支持它们。一条USB总线上可达到的最高传输速度等级由该总线上最慢的“设备”决定该设备包括主机、HUB以及USB功能设备。USB体系包括“主机”、“设备”以及“物理连接”三个部分。其中主机是一个提供USB接口及接口管理能力的硬件、软件及固件的复合体可以是PC也可以是OTG设备。一个USB系统中仅有一个USB主机设备包括USB功能设备和USBHUB最多支持个设备物理连接即指的是USB的传输线。在USB系统中要求使用屏蔽的双绞线。一个USBHOST最多可以同时支持个地址地址作为默认地址只在设备枚举期间临时使用而不能被分配给任何一个设备因此一个USBHOST最多可以同时支持个地址如果一个设备只占用一个地址那么可最多支持个USB设备。在实际的USB体系中如果要连接个USB设备必须要使用USBHUB而USBHUB也是需要占用地址的所以实际可支持的USB功能设备的数量将小于。USB体系采用分层的星型拓扑来连接所有USB设备如下图所示:以HOSTROOTHUB为起点最多支持层(Tier)也就是说任何一个USB系统中最多可以允许个USBHUB级联。一个复合设备(CompoundDevice)将同时占据两层或更多的层。ROOTHUB是一个特殊的USBHUB它集成在主机控制器里不占用地址。ROOTHUB不但实现了普通USBHUB的功能还包括其他一些功能具体在增强型主机控制器的规范中有详细的介绍。“复合设备(CompoundDevice)”可以占用多个地址。所谓复合设备其实就是把多个功能设备通过内置的USBHUB组合而成的设备比如带录音话筒的USB摄像头等。USB采用轮询的广播机制轮询的广播机制轮询的广播机制轮询的广播机制传输数据所有的传输都由主机发起任何时刻整个USB体USB规范初探ByHevryEmail:hevryjonhotmailcomPageof系内仅允许一个数据包的传输即不同物理传输线上看到的数据包都是同一被广播的数据包。USB采用“令牌包”“数据包”“握手包”的传输机制在令牌包中指定数据包去向或者来源的设备地址和端点(Endpoint)从而保证了只有一个设备对被广播的数据包令牌包作出响应。握手包表示了传输的成功与否。数据包:USB总线上数据传输的最小单位包括SYNC、数据及EOP三个部分。其中数据的格式针对不同的包有不同的格式。但都以位的PID开始。PID指定了数据包的类型(共种)。令牌包即指PID为INOUTSETUP的包。端点(Endpoint):是USB设备中的可以进行数据收发的最小单元支持单向或者双向的数据传输。设备支持端点的数量是有限制的除默认端点外低速设备最多支持组端点(个输入个输出)高速和全速设备最多支持组端点。管道(Pipe)是主机和设备端点之间数据传输的模型共有两种类型的管道:无格式的流管道(StreamPipe)和有格式的信息管道(MessagePipe)。任何USB设备一旦上电就存在一个信息管道即默认的控制管道默认的控制管道默认的控制管道默认的控制管道USB主机通过该管道来获取设备的描述、配置、状态并对设备进行配置。USB设备连接到HOST时HOST必须通过默认的控制管道对其进行枚举枚举枚举枚举完成获得其设备描述、进行地址分配、获得其配置描述、进行配置等操作方可正常使用。USB设备的即插即用特性即依赖于此。枚举:是USB体系中一个很重要的活动由一系列标准请求组成(若设备属于某个子类还包含该子类定义的特殊请求)。通过枚举HOST可以获得设备的基本描述信息如支持的USB版本、PID、VID、设备分类(Class)、供电方式、最大消耗电流、配置数量、各种类型端点的数量及传输能力(最大包长度)。HOST根据PID和VID加载设备驱动程序并对设备进行合适的配置。只有经过枚举的设备才能正常使用。对于总线供电设备在枚举完成前最多可从总线获取mA的电流。USB体系定义了四种类型的传输它们是:控制传输:主要用于在设备连接时对设备进行枚举以及其他因设备而已的特定操作。中断传输:用于对延迟要求严格、小量数据的可靠传输如键盘、游戏手柄等。批量传输:用于对延迟要求宽松大量数据的可靠传输如U盘等。同步传输:用于对可靠性要求不高的实时数据传输如摄像头、USB音响等。注意:中断传输并不意味这传输过程中设备会先中断HOST继而通知HOST启动传输。中断传输也是HOST发起的传输采用轮询的方式询问设备是否有数据发送若有则传输数据否则NAK主机。不同的传输类型在物理上并没有太大的区别只是在传输机制、主机安排传输任务、可占用USB带宽的限制以及最大包长度有一定的差异。USB设备通过管道和HOST通信在默认控制管道上接受并处理以下三种类型的请求:标准请求标准请求标准请求标准请求::::一共有个标准请求如得到设备描述、设置地址、得到配置描述等。所有USB设备均应支持这些请求。HOST通过标准请求来识别和配置设备。USB规范初探ByHevryEmail:hevryjonhotmailcomPageof类类类类((((class))))请求请求请求请求::::USB还定义了若干个子类如HUB类、大容量存储器类等。不同的类又定义了若干类请求该类设备应该支持这些类请求。设备所属类在设备描述符中可以得到。厂商请求厂商请求厂商请求厂商请求::::这部分请求并不是USB规范定义的而是设备生产商为了实现一定的功能而自己定义的请求。USBHUB提供了一种低成本、低复杂度的USB接口扩展方法。HUB的上行PORT面向HOST下行PORT面向设备(HUB或功能设备)。在下行PORT上HUB提供了设备连接检测和设备移除检测的能力并给各下行PORT供电。HUB可以单独使能各下行PORT不同PORT可以工作在不同的速度等级(高速全速低速)。HUB由HUB重发器(HUBRepeater)、转发器(TransactionTranslator)以及HUB控制器(HUBController)三部分组成。HUBRepeater是上行PORT和下行PORT之间的一个协议控制的开关它负责高速数据包的重生与分发重生与分发重生与分发重生与分发。HUB控制器负责和HOST的通信HOST通过HUB类请求和HUB控制器通讯获得关于HUB本身和下行PORT的HUB描述符进行HUB和下行PORT的监控和管理。转发器提供了从高速和全速低速通讯的转换能力通过HUB可以在高速HOST和全速低速设备之间进行匹配。HUB在硬件上支持Reset、Resume、Suspend。重生与分发:指的是HUBRepeater需要识别从上行(下行)PORT上接收到的数据并分发到下行(上行)PORT。所谓分发主要是指从上行PORT接收到的数据包需要向所有使能的高速下行PORT发送即广播。USBHOST在USB体系中负责设备连接移除的检测、HOST和设备之间控制流和数据流的管理、传输状态的收集、总线电源的供给。USB数据流模型数据流模型数据流模型数据流模型USB体系在实现时采用分层的结构如下图所示:在HSOT端应用软件(ClientSW)不能直接访问USB总线而必须通过USB系统软件和USB主机控制器来访问USB总线在USB总线上和USB设备进行通讯。从逻辑上可以分为功能层、设备层和总线接口层三个层次。其中功能层完成功能级的描述、定义和行为设备级则完成从功能级到传输级的转换把一次功能级的行为转换为一次一次的基本传输USB总线接口层则处理总线上的Bit流完成数据传输的物理层实现和总线管理。途中黑色箭头代表真实的数据流灰色箭头代表逻辑上的通讯。USB规范初探ByHevryEmail:hevryjonhotmailcomPageof物理上USB设备通过分层的星型总线连接到HOST但在逻辑上HUB是透明的各USB设备和HOST直接连接和HOST上的应用软件形成一对一的关系。如下图所示:各应用软件功能设备对之间的通讯相互独立应用软件通过USB设备驱动程序(USBD)发起IRQ请求请求数据传输。主机控制器驱动程序(HCD)接收IRQ请求并解析成为USB传输和传输事务(Transaction)并对USB系统中的所有传输事务进行任务排定(因为可能同时有多个应用软件发起IRQ请求)。主机控制器(HostController)执行排定的传输任务在同一条共享的USB总线上进行数据包的传输。如下图所示。USB系统中数据的传输宏观的看来是在HOST和USB功能设备之间进行微观的看是在应用软件的Buffer和USB功能设备的端点之间进行。一般来说端点都有Buffer可以认为USB通讯就是应用软件Buffer和设备端点Buffer之间的数据交换交换的通道称为管道。应用软件通过和设备之间的数据交换来完成设备的控制和数据传输。通常需要多个管道来完成数据交换因为同一管道只支持一种类型的数据传输。用在一起来对设备进行控制的若干管道称为设备的接口这就是端点端点端点端点、、、、管道和接管道和接管道和接管道和接口的关口的关口的关口的关系。一个USB设备可以包括若干个端点不同的端点以端点编号端点编号端点编号端点编号和方向方向方向方向区分。不同端点可以支持不同的传输类型、访问间隔以及最大数据包大小。除端点外所有的端点只支持一个方向的数据传输。端点是一个特殊的端点它支持双向的控制传输。管道和端点关联和关联的端点有相同的属性如支持的传输类型、最大包长度、传输方向等。四种传输类型控制传输:控制传输是一种可靠的双向双向双向双向传输一次控制传输可分为三个阶段。第一阶段为从HOST到Device的SETUP事务传输这个阶段指定了此次控制传输的请求类型第二阶段为数据阶段也有些请求没有数据阶段第三阶段为状态阶段通过一次INOUT传输表明请求是否成功完成。控制传输通过控制管道在应用软件和Device的控制端点之间进行控制传输过程中传输的数据是有格式定义的USB设备或主机可根据格式定义解析获得的数据含义。其他三种传输类型都没有格式定义。USB规范初探ByHevryEmail:hevryjonhotmailcomPageof控制传输对于最大包长度有固定的要求。对于高速设备该值为Byte对于低速设备该值为全速设备可以是或或或。最大包长度最大包长度最大包长度最大包长度表征了一个端点单次接收发送数据的能力实际上反应的是该端点对应的Buffer的大小。Buffer越大单次可接收发送的数据包越大反之亦反。当通过一个端点进行数据传输时若数据的大小超过该端点的最大包长度时需要将数据分成若干个数据包传输并且要求除最后一个包外所有的包长度均等于该最大包长度。这也就是说如果一个端点收到发送了一个长度小于最大包长度的包即意味着数据传输结束。控制传输在访问总线时也受到一些限制如:�高速端点的控制传输不能占用超过的微帧全速和低速的则不能超过。�在一帧内如果有多余的未用时间并且没有同步和中断传输可以用来进行控制传输。中断传输:中断传输是一种轮询的传输方式是一种单向单向单向单向的传输HOST通过固定的间隔对中断端点进行查询若有数据传输或可以接收数据则返回数据或发送数据否则返回NAK表示尚未准备好。中断传输的延迟有保证但并非实时传输它是一种延迟有限的可靠传输支持错误重传。对于高速全速低速端点最大包长度分别可以达到Bytes。高速中断传输不得占用超过的微帧时间全速和低速不得超过。中断端点的轮询间隔由在端点描述符中定义全速端点的轮询间隔可以是~mS低速端点为~mS高速端点为(interval)*uS其中interval取到之间的值。除高速高带宽中断端点外一个微帧内仅允许一次中断事务传输高速高带宽端点最多可以在一个微帧内进行三次中断事务传输传输高达字节的数据。所谓单向传输并不是说该传输只支持一个方向的传输而是指在某个端点上该传输仅支持一个方向或输出或输入。如果需要在两个方向上进行某种单向传输需要占用两个端点分别配置成不同的方向可以拥有相同的端点编号。批量传输:批量传输是一种可靠的单向传输但延迟没有保证它尽量利用可以利用的带宽来完成传输适合数据量比较大的传输。低速USB设备不支持批量传输高速批量端点的最大包长度为全速批量端点的最大包长度可以为、、、。批量传输在访问USB总线时相对其他传输类型具有最低的优先级USBHOST总是优先安排其他类型的传输当总线带宽有富余时才安排批量传输。高速的批量端点必须支持PING操作向主机报告端点的状态NYET表示否定应答没有准备好接收下一个数据包ACK表示肯定应答已经准备好接收下USB规范初探ByHevryEmail:hevryjonhotmailcomPageof一个数据包。同步传输:同步传输是一种实时的、不可靠的传输不支持错误重发机制。只有高速和全速端点支持同步传输高速同步端点的最大包长度为低速的为。除高速高带宽同步端点外一个微帧内仅允许一次同步事务传输高速高带宽端点最多可以在一个微帧内进行三次同步事务传输传输高达字节的数据。全速同步传输不得占用超过的帧时间高速同步传输不得占用超过的微帧时间。同步端点的访问也和中断端点一样有固定的时间间隔限制。在主机控制器和USBHUB之间还有另外一种传输分离传输(SplitTransaction)它仅在主机控制器和HUB之间执行通过分离传输可以允许全速低速设备连接到高速主机。分离传输对于USB设备来说是透明的、不可见的。分离传输:顾名思义就是把一次完整的事务传输分成两个事务传输来完成。其出发点是高速传输和全速低速传输的速度不相等如果使用一次完整的事务来传输势必会造成比较长的等待时间从而降低了高速USB总线的利用率。通过将一次传输分成两此将令牌(和数据)的传输与响应数据(和握手)的传输分开这样就可以在中间插入其他高速传输从而提高总线的利用率。USB物理规范和电气规范物理规范和电气规范物理规范和电气规范物理规范和电气规范此节略去请参考USB规范英文版USB协议层协议层协议层协议层规范规范规范规范USB采用littleedian字节顺序在总线上先传输一个字节的最低有效位最后传输最高有效位采用NRZI编码若遇到连续的个要求进行为填充即插入一个。所有的USB包都由SYNC开始高速包的SYNC宽度为bit全速低速包的SYNC段度为bit。实际接收到的SYNC产度由于USBHUB的关系可能会小于该值。USB数据包的格式PID表征了数据包的类型分为令牌(Token)、数据(Data)、握手(Handshacke)以及特殊包大类共种类型的PID。具体定义见英文协议第页。对于令牌包来说PID之后是位的地址和位的端点号。令牌包没有数据域以位的CRC校验和结束。SOF是一类特殊的令牌包PID后跟的是位的帧编号。对于数据包来说PID之后直接跟数据域数据域的长度为N字节数据域后以位USB规范初探ByHevryEmail:hevryjonhotmailcomPageof的CRC校验和结束。握手包仅有PID域没有数据也没有校验和。分离传输会用到一类特殊的包StartSplit和CompleteSplit包格式如下:在StartSplit和CompleteSplit包中主要指定了此次分离传输所在的HUB的地址和下行端口编号以及端点类型(控制、中断、批量、同步)。以及此次传输中数据包在整个数据中的位置(第一个包、中间的包、末尾的包)。握手包握手包握手包握手包包括ACKNAKSTALL以及NYET四种其中ACK表示肯定的应答成功的数据传输NAK表示否定的应答失败的数据传输要求重新传输STALL表示功能错误或端点被设置了STALL属性NYET表示尚未准备好要求等待。数据在USB总线上的传输以包为单位包只能在帧内传输。高速USB总线的帧周期为uS全速以及低速USB总线的帧周期为mS。帧的起始由一个特定的包(SOF包)表示帧尾为EOF。EOF不是一个包而是一种电平状态EOF期间不允许有数据传输。注意:虽然高速USB总线和全速低速USB总线的帧周期不一样当时SOF包中帧编号的增加速度是一样的因为在高速USB系统中SOF包中帧编号实际上取得是计数器的高位最低三位作为微帧编号没有使用因此其帧编号的增加周期也为mS。事务传输事务传输事务传输事务传输((((Transaction))))的流程的流程的流程的流程批量事务传输图中一个方框表示一个Packet灰色的包表示主机发出的包白色的包表示Device发出的包。批量传输是可靠的传输需要握手包来表明传输的结果。若数据量比较大将采用多次批量事务传输来完成全部数据的传输传输过程中数据包的PID按照DATADATADATA…的方式翻转以保证发送端和接收端的同步。USB规范初探ByHevryEmail:hevryjonhotmailcomPageofUSB允许连续次以下的传输错误会重试该传输若成功则将错误次数计数器清零否则累加该计数器。超过三次后HOST认为该端点功能错误(STALL)放弃该端点的传输任务。一次批量传输(Transfer)由次到多次批量事务传输(Transaction)组成。翻转同步:发送端按照DATADATADATA…的顺序发送数据包只有成功的事务传输才会导致PID翻转也就是说发送段只有在接收到ACK后才会翻转PID发送下一个数据包否则会重试本次事务传输。同样若在接收端发现接收到到的数据包不是按照此顺序翻转的比如连续收到两个DATA那么接收端认为第二个DATA是前一个DATA的重传。控制传输(Transaction)一次控制传输分为三(或两个)个阶段:建立(Setup)、数据(DATA)(可能没有)以及状态(Status)。每个阶段都由一次或多次(数据阶段)事务传输组成(Transaction)。左图为建立阶段的事务传输流程图。可以看出:与批量传输相比在流程上并没有多大区别区别只在于该事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西。建立阶段过后可能会有数据阶段这个阶段将会通过一次或多次控制传输事务完成数据的传输。同样也会采用PID翻转的机制。建立阶段Device只能返回ACK包或者不返回任何包。最后是状态阶段通过一次方向与前一次相反的控制事务传输来表明传输的成功与否。如果成功会返回一个长度为的数据包否则返回NAK或STALL。下图为整个控制传输的示意图:中断传输中断传输在流程上除不支持PING之外其他的跟批量传输是一样的。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西。主机在排定中断传输任务时会根据对应中断端点描述符中指定的查询间隔发USB规范初探ByHevryEmail:hevryjonhotmailcomPageof起中断传输。中断传输有较高的优先级仅次于同步传输。同样中断传输也采用PID翻转的机制来保证收发端数据同步。下图为中断传输的流程图。同步传输同步传输是不可靠的传输所以它没有握手包也不支持PID翻转。主机在排定事务传输时同步传输有最高的优先级。USB总线上的情形是怎样的?包是USB总线是数据传输的最小单位不能被打断或干扰否则会引发错误。若干个数据包组成一次事务传输一次事务传输也不能打断属于一次事务传输的几个包必须连续不能跨帧完成。一次传输由一次到多次事务传输构成可以跨帧完成。USB框架框架框架框架在USB框架中规范主要定义了USB设备的各种状态、常用操作、USB设备请求、描述符、设备类等。USB规范初探ByHevryEmail:hevryjonhotmailcomPageof下图为USB设备的状态转移图:这里重点介绍下枚举的过程。当设备连接到主机时按照以下顺序进行枚举:连接了设备的HUB在HOST查询其状态改变端点状态改变端点状态改变端点状态改变端点时返回对应的bitmap告知HOST某个PORT状态发生了改变。主机向HUB查询该PORT的状态得知有设备连接并知道了该设备的基本特性。主机等待(至少mS)设备上电稳定然后向HUB发送请求复位并使能该PORT。HUB执行PORT复位操作复位完成后该PORT就使能了。现在设备进入到defalut状态可以从Vbus获取不超过mA的电流。主机可以通过地址与其通讯。主机通过地址向该设备发送getdevicedescriptor标准请求获取设备的描述符。主机再次向HUB发送请求复位该PORT。主机通过标准请求setaddress给设备分配地址。主机通过新地址向设备发送getdevicedescriptor标准请求获取设备的描述符。主机通过新地址向设备发送其他getconfiguration请求获取设备的配置描述符。USB规范初探ByHevryEmail:hevryjonhotmailcomPageof根据配置信息主机选择合适配置通过setconfiguration请求对设备而进行配置。这时设备方可正常使用。USB设备的常用操作包括:设备连接、设备移除、设备配置、地址分配、数据传输、设备挂起、设备唤醒等。USB的请求包括标准请求、类请求以及厂商请求三类。所有的请求都通过默认管道发送按照控制传输的三个阶段进行。首先HOST通过一次控制事务传输向Device发送一个字节的Setup包这个包说明了请求的具体信息如请求类型、数据传输方向、接收目标(DeviceInterfaceEndpoint等)。具体定义参考USBSpecp。USB标准请求共包括个请求如清除特性(ClearFeature)、得到配置(GetConfiguration)、得到描述(GetDescriptor)、设置地址(SetAddress)等。具体参考USBSpecpUSB主机主机主机主机::::硬件和软件硬件和软件硬件和软件硬件和软件该章节主要定义了USB主机的硬件和软件组成及其在USB传输中的行为这部分的硬件设计主要指EHCI的设计软件的设计主要是设备驱动程序和USB系统软件的设计。其中USB系统软件一般由操作系统提供。由于跟项目关联不大故略去如有需要请参考USBSpecChapter。USBHUB规范规范规范规范这一章描述了USBHUB的架构主要从HUBRepeater、HUBController以及TransactionTranslator三个方面展开。另外还包括USBHUB类的请求及描述符。从功能上来说HUB必须支持连接行为、电源管理、设备连接移除检测、总线错误检测和恢复、高全低速设备支持。下图为USBHUB的架构图:USBHUB自身的工作速度由上行PORT的连接速度决定。从结构上分USBHUB由HUBRepeater、HUBController及TransactionTranslator三部分组成。其中HUBRepeater主要负责连接的建立和撤销即完成上行PORT和下行PORT工作在相同速度的连接管理。同时还支持错误的检测与恢复以及设备连接移除的检测。HUBController负责与HOST通讯完成与HOST的交互(请求的响应)、HUB的控制及管理。TransactionTranslator主要负责高速的分离传输并把它们分发到连接了全低速设备的下行PORT。RoutingLogic负责将下行PORT连接到HUBRepeater或者TransactionTranslator(以后简USB规范初探ByHevryEmail:hevryjonhotmailcomPageof称TT)。当USBHUB的上行PORT连接在全速低速时TT不工作HUBRepeater工作在全速低速模式。当USBHUB的上行PORT连接在高速时TT工作HUBRepeater工作在高速模式。数据的转发数据的转发数据的转发数据的转发下行方向上:USBHUB采用广播的方式向所有使能的、工作与上行PORT相同速度的下行PORT转发来自上行PORT的数据包。上行方向上:USBHUB将在下行PORT接收到的数据包递交到上行PORT而不向其他PORT转发。唤醒信号的转唤醒信号的转唤醒信号的转唤醒信号的转发发发发唤醒信号(Resume)的转发采用完全广播的方式在任何PORT收到的唤醒信号USBHUB都会向其他PORT转发。USBHUB的帧同步的帧同步的帧同步的帧同步USBHUB必须与HOST保持同步拥有和HOST相同的帧周期这是通过帧同步的操作来实现的。在USBHUB内有两个计数器一个寄存器计数器都是用USBHUB的本地时钟驱动的。其中一个计数器向上计数用来测量来自上行PORT连续两个SOF包的时间间隔寄存器用来存储此时间间隔每次SOF包到来都会被更新另一个计数器从测得的时间间隔开始向下计数计到时即认为新的一帧开始了。然后加载寄存器中存储的值重新计数。由于USBHUB检测SOF包也是需要时间的所以实际发现SOF包的时间要比该SOF包在总线上出现的时间稍晚如果不加以处理USBHUB内部的帧时间会整体比总线上的帧时间推迟一些。该延迟由USBHUB本身决定所以对于USBHUB来说是已经的为了排除此延迟USBHUB需要采取一定的方法来处理如EOF提前。即在向下计数器尚未计到时提前认为当前帧结束。该提前量应恰好等于USBHUB检测SOF包的延迟。从而保证了在整个USB系统中所有部件的帧时间(帧头和帧尾到来的时刻)除了在USB传输线传播带来的传播延迟之外都是一样的。数字系统的时钟抖动、计数器量化误差都会带来帧周期的抖动为防止该抖动引起传输错误USB规范规定系统中所有部件引起的抖动必须在一定限制范围内并采取了一定的措施来预防该问题如EOF和EOF时刻的引入。EOF和EOF是两个安全时间比实际的EOF时间稍早。USBHUB在转发数据包时需要参考这两个时间晚于这两个时间发送的包有可能因为抖动而产生EOF期间的干扰。HUBRepeater顾名思义HUBRepeater将接收到数据Repeat出去这个repeat是双向的既包括从上行PORT到下行PORT的repeat又包括型下行PORT到上行PORT的repeat。需要用USBHUB的本地时钟从PORT上接收数据然后再用本地时钟将数据放到PORT上去。下图为HUBRepeater的框图。USB规范初探ByHevryEmail:hevryjonhotmailcomPageof在我们的项目中USBPHY芯片完成了HUBRepeater大部分的电气层功能如数据恢复、包检测等。在高速连接中USB规范要求从上行PORT到下行PORT的连接在SOP(StartofPacket)到来时建立且延迟不超过bittime。实际实验过程中发现即使USBHUB的Repeater延迟超过bittime也未导致功能失败。HUBRepeater的行为受到EOF和EOF时间的影响具体参考USBSpecP。HUBController下图为HUBController的逻辑结构。图中右上方是端点即默认的控制端点HOST通过向该端点发送标准请求和HUB类请求完成USBHUB的枚举和控制。如复位某个下行PORT、使能某个下行PORT、给某个下行PORT上电等。图中左上方是一个中断型的状态改变端点HOST通过以固定的时间间隔向该端点发起IN的中断传输查询该HUB自身和各下行PORT的状态是否改变。当没有状态改变时该端点返回NAK的握手包当有状态改变时返回一个反应了HUB自身和各下行PORT状态改变信息的Bitmap。每个PORT映射到该Bitmap中的一位当该PORT的状态有改变时对应的位置这是由USBHUB硬件完成的。所谓状态改变包括:设备连接、复位完成、设备移除、电流过流等USBHUB的硬件负责检测这些事件的发生并痛过置位反应到Bitmap中来。TransactionTranslatorTT是USBHUB中最复杂的一部分这里我并不准备详细描述它而只是从结构和基本操作逻辑上展开介绍更多的细节请在有必要时参考USBSpec。前面已经说过:TT在USBHUB中主要负责从高速到全低速传输事务的转发完成速度的匹配。从传输的角度来说主要就是完成分离事务传输(SplitTransaction)。下图为TT的基本结构。USB规范初探ByHevryEmail:hevryjonhotmailcomPageof和大部分速度匹配逻辑一样TT也采用Buffer的方式来完成速度匹配。Buffer的一端是一个高速Handler处理高速数据收发另一端是全速低速Handler处理全速低速数据的收发。针对传输类型的不同TT采用多个Buffer来缓存数据。其中同步传输和中断传输的StartSplit(SSplit)阶段和CompleteSplit(CSplit)阶段分别用一个Buffer批量传输和中断传输的SSplit和CSplit不分开存储但是在一个TT中至少有个用于批量传输和中断传输的Buffer。分离传输仅在HOST和HUB之间发生对于设备全速低速设备来说是透明的。一个USBHUB可以有多个TT这在USB协议中是允许的。按照处理方式的区别TT中的分离传输可以分为两类周期分离传输和非周期分离传输。周期分离传输指的是同步分离传输和中断分离传输非周期分离传输指的是批量分离传输和控制分离传输。同步传输和中断传输被归为周期传输是因为它们的传输是有周期的HOST以固定的间隔向同步端点和中断端点发起传输。相对应的批量传输和控制传输没有固定的周期。先来看OUT型批量中断分离传输的流程如下图所示:HOST知道某个HUB的某个下行PORT上连接的是全速低速设备(通过查询HUB的端口状态得知)。当HOST要向该设备传送数据时它必须启动一次OUT型的分离传输。首先HOST发送一个SSPLIT包表明:下面我要进行分离传输了。SSPLIT包中指明了该分离传输所对应的HUB地址和PORT编号同时也指明了端点的类型(具体定义参考StartSplit包的定义)。然后按照普通批量中断传输的顺序先发送一个OUTSETUP的令牌包然后发送一个数据包并等待来自HUB的握手包。如果没问题HUB的TT会在Buffer开辟一片缓存保存以上接收到的三个包后并ACK主机表明已经接收到StartSplit阶段USB规范初探ByHevryEmail:hevryjonhotmailcomPageof的数据包。然后TT根据SSPLIT包中的信息通过全速低速Handler向指定的下行PORT转发令牌包和数据包并接收来自设备的握手响应同样保存在Buffer中并更新此次分离传输的状态信息。主机在完成StartSplit阶段一段时间后向HUB发起CompleteSplit传输查询此次传输的状态。具体过程为先发送一个CSPLIT包然后是OUTSETUP包TT根据这两个包可以查询到已经存储在Buffer中的分离传输如果查询不到则认为传输错误返回STALL握手包。如果查询到了但设备还没有响应则返回NYET握手包让主机等待一段时间后重新查询。如果传输已经完成则TT向HOST转发来自设备的握手包(STALLACKNAK)。这时一次完整的分离传输完成。IN型的批量控制分离传输有相似的过程只不过数据包的传输在CSplit阶段下图为其流程图。周期型的分离传输基本过程和非周期的分离传输大致相同但在细节上有很多不一样的地方。如周期性的分离传输使用两个Buffer分别存放SSplit和CSplit阶段的数据主机在安排SSplit和CSplit也和非周期分离传输有些不同有较多的限制。TT采用流水的方式处理周期型的分离传输一次周期型的分离传输在TT中共有四种状态:New、Pending、Ready以及Old。一次分离传输依次经历这四种状态。其中New态为这次分离传输在TT中建立的状态是一个暂态、最长不能超过个微帧的时间Pending为等待传输完成的状态最长不能超过个微帧Ready为传输已经完成等待Host取回结果的状态最长不能超过个微帧Old表示传输已经全部完成TT中该传输所占用的Buffer可以重新利用。由于速度不匹配在一个微帧里最多可以在全速总线上传输字节的数据在传输的数据量较大的情况下例如同步传输的最大包长度为字节如果等到整个包传完再响应HOST的CSplit不但要求TT有更多的Buffer并且会使HOST浪费较多的时间在等USB规范初探ByHevryEmail:hevryjonhotmailcomPageof待数据传输完成。因此TT采用了如下的处理方式:上行方向上即IN型的传输:无论何时只要TT收到超过个字节的数据就响应HOST的CSplit向HOST发回数据并在PID中以MDATADATA表明还有没有未传完的数据。如果还有数据则以MDATA发送否则以DATA发送。HOST在收到MDATA后应继续在下一个微帧里发起CSplit传输向HUB请求数据知道收到一个DATA的数据包。下行方向上即OUT型的传输:HOST把一个大的数据包拆成最大字节的若干个小包在连续的多个微帧里用SSplit向TT发送数据。如下图所示:OUT型中断分离传输USB规范初探ByHevryEmail:hevryjonhotmailcomPageofOUT型的同步分离传输OUT型的同步分离传输只有SSplit阶段而没有CSplit阶段因为同步传输是不可靠的传输HOST不需要确认传输是否成功完成。IN型的同步分离传输

用户评价(4)

  • yifeigamil 正好在找,看看,谢谢

    2012-03-09 21:28:13

  • isix 挺好的,就是简洁了点

    2011-10-11 17:42:47

  • desomond 还不错,pdf做得也比较清晰,3Q

    2011-06-18 01:27:15

  • 念念 非常感谢楼主分享

    2011-05-26 18:23:28

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/17

USB2.0协议中文版

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利