USB30协议规范中文解读Word文件下载.docx
《USB30协议规范中文解读Word文件下载.docx》由会员分享,可在线阅读,更多相关《USB30协议规范中文解读Word文件下载.docx(75页珍藏版)》请在冰豆网上搜索。
![USB30协议规范中文解读Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-12/13/a0e22f8b-5da7-4293-8fbc-a31356864dc0/a0e22f8b-5da7-4293-8fbc-a31356864dc01.gif)
HUB和一个USB3.0
HUB。
连接到上游端口的电源和地线是共享的。
集线器参与到一个端到端的协议中,所承担的工作:
路由选择输出的包到下游端口。
输入包混合传递到上游端口
当不在低功耗状态下时,向所有下游端口播送时间戳包〔ITP〕
当在一个低功耗状态的端口检测到包时,集线器将目标端口转变成退出低功耗状态,通知主机和设备〔带内〕包遭遇到了一个在低功耗状态的端口。
主机(Hosts):
一个USB3.0主机通过主控器和USB设备互连。
为了支持USB3.0双总线结构,USB3.0主控器必须包括超速〔USB3.0〕和USB2.0局部,这样可以同时管理每一个总线上主机和设备间的控制、状态和信息交换。
主机含有几个根下行端口实现超速USB和USB2.0,主机通过这些端口:
检测USB设备的连接和移除;
管理主机和设备间的控制流;
管理主机和设备间的数据流;
收集状态和活动统计;
对连接的设备供电;
USB系统软件继承了USB2.0的结构,包括:
设备枚举和配置;
规划周期性和异步数据传输;
设备和功能电源管理;
设备和总线管理信息。
数据流模型:
超速USB集成了USB2.0的数据流模型,包括:
主机和设备间的数据和控制交换通过管道〔pipe〕进行
,数据传输在主机软件和指定的设备端点间进行。
设备可以有不止一个的活动管道,有两种类型的管道:
流式管道〔数据〕和消息管道〔控制〕,流式管道没有USB2.0定义的结构,消息管道有指定的结构〔请求的结构〕。
管道相关联的是数据带宽,传输类型〔见下面描述〕,端点属性,如传输方向与缓冲大小。
大多数管道在系统软件对设备进行配置后才存在,但是当设备上电在默认的状态后,一个消息管道即默认的控制管道总是存在的。
提供权限访问设备的配置,状态和控制信息。
一个管道支持USB2.0定义的四种传输类型的一种(管道和端点属性一致)。
海量传输类型〔bulk〕在超速中进行了扩展,叫做流〔stream〕。
流式提供在协议级支持在标准块传输管道中多路传输多个独立的逻辑数据流。
第四章
超速数据流模型
4.2超速通信流
SS保持相似的观念和机理,支持端点,管道和传输类型。
参考USB2.0协议。
端点的属性〔最大包尺寸〔端点缓存大小〕,突发大小等〕被记录在描述符中和SSEndpointCompanionDescriptor。
正如在USB2.0中,端点是使用三个参数组成的地址来验证〔设备地址,端点号和方向〕。
所有的SS设备必须起码在默认控制管道〔端点0〕开始执行。
4.2.1管道
一个超速管道是一个设备上的端点和主机软件的连接。
管道代表拥有缓存空间的主机软件和设备端点之间传输数据的能力,和USB2.0有相同的过程。
主要的区别在于当超速的非同步端点忙时,会返回一个没有准备好〔NRDY〕应答,当它想又要效劳时必须发送准备好〔ERDY〕通知。
主机在下一个传输类型限制下的有效时机中重新安排事务。
4.3超速协议综述:
正如在USB3.0结构总览那章中提到的,超速协议是利用双差分数据线的物理层。
所有的USB2.0的类型都可以被高速协议支持。
协议之间的区别在于下面要首先讨论的超速中使用的包的描述。
4.3.1与USB2.0的区别:
在框架上,超速是向后兼容USB2.0的,但是二者在协议上还是有一些重大的不同:
USB2.0的transaction有三局部(令牌〔token〕、数据〔data〕和握手(handshake)),超速也是这三局部但是用法不同〔令牌包集成在头包和DPH中,各种类型的握手包都是TP包形式〕;
对于OUT事务,令牌被合并在数据包中;
对于IN事务,令牌被握手包代替。
USB2.0不支持突发〔bursting〕,超速支持持续突发;
USB2.0是半双工(half-duplex)的播送总线,超速是dual-simplex〔全双工〕的非播送总线,支持同时进行IN、OUT
transaction;
USB2.0使用轮询模式,超速使用异步通知方式;
USB2.0不支持流能力,超速支持海量(bulk)端点的Stream方式;
USB2.0在同步传输(isochronous)间隔中没有进入低耗电状态的机制,超速那么允许同步传输效劳间隔中自动进入低耗电状态〔不效劳的时间段进入低功耗〕;
SS主机在效劳间隔前发送一个PING包到目标同步设备允许开始同步传输之前转变成电源活动状态。
USB2.0设备无法通知主机自己在进入低耗电状态前可容忍的延迟时间〔设备通知主机自己进入低功耗状态的最长延迟时间〕,超速那么提供Latency
Tolerance消息;
USB2.0以固定的1ms/125us间隔发送帧包/小帧包〔USB2.0全速和高速模式〕。
超速下,设备可以发送Interval
Adjustment消息给主机调整间隔125us一直到+/-13.333us;
USB2.0电源管理总是主机导向〔主机初始化〕的,超速链路两端都支持电源管理;
因此不管何时需要空闲,需要退出,需要通信,每个链路能独立的进入低电源状态。
USB2.0
仅在每个transaction进行end-to-end级别的错误检测、恢复、流控,超速在end-to-end〔数据包重试〕和链路级别〔头包重试〕分割这些功能。
4.3.2比拟USB2.0和超速的事务处理(Transaction)
超速全双工总线物理层允许同时进行双向的通信。
超速协议允许收到握手包之前发送多个数据包〔突发〕。
对于OUT传输,包含在USB2.0令牌包中的信息〔设备地址和端点信息〕被合并在数据包头里面,因此不需要额外令牌包。
对于输入传输IN,超速主机发送一个握手包〔ACK〕给设备以请求数据〔和指示数据是否正确〕。
设备可以通过返回数据或者返回STALL握手包来应答,或者返回一个没准备好(NRDY)握手包延迟传输直到设备准备好了。
USB2.0的包是播送方式,每个连接的设备解析每个包的地址、端点、方向信息来决定自己是否应该响应。
超速包有路由信息,HUB决定每个包要送达哪个设备,只有一个例外,等时时间戳包〔Isochronous
Timestamp
Packet,
ITP〕播送到每一个设备。
USB2.0的查询方式已经被异步通知代替。
超速传输通过主机发出一个请求来开始传输,后面跟随着设备的应答。
如果设备能接受请求,它就接收数据或者发送数据;
如果端点停止了,设备应该以STALL握手包响应;
如果设备由于缺少缓存空间或者没有数据而不能接受请求,应该以NRDY应答告诉主机现在还不能处理请求。
当等到设备能接受请求时,设备会主动发送一个端点准备好〔ERDY〕异步通知给主机然后主时机重新安排传输事务。
单路传送和有限制的多点播送的包以及异步通知,都允许没有活泼传输包的链路进入一个降低功耗状态,上游和下游端口共同决定它们的链路进入一个低功耗状态,集线器会传递到上游端口。
通过允许链路伙伴独立控制它们的链路电源状态,集线器将任意下游端口可见的最高链路电源状态传递到上游端口,使总线快速进入最低允许电源状态。
4.3.1.2超速包介绍:
超速包以16字节的头部开始。
一些包只包含有头部〔TP,LMP,ITP〕。
所有的头部以用于决定包处理方式的包类型信息开始。
头部有16位CRC保护,以2个字节链路控制字〔linkcontrolword〕结束。
依赖于类型,大多数包包含有路由信息〔路由字符〕和一个三参数的设备地址〔设备地址,端点号和方向〕。
路由字符给主机用来指导包被发送到被指向的拓扑路径。
设备发送的包被集线器默认路由选择,集线器总是把数据从任何可见的下游端口传到上游端口〔这一过程不需要路由信息〕。
有四种根本类型的包:
〔协议层〕
Link
Management
Packet(LMP),只穿过一对直接连接的端口〔链路两端〕,主要用来管理链路。
Transaction
Packet(TP,事务包),穿过所有直接连接主机与设备的链路,用来控制流式数据包,配置设备和集线器等〔任何传输类型的事务处理都用到〕。
注意一个Transaction
Packet是没有数据的。
〔控制命令包,TP包就是一个包头〔DPH〕〕
Data
Packet(DP),穿过所有直接连接主机与设备的链路,数据包有两局部组成,一个和TP包相似的数据包头(DPH)和带有数据块加上用来确保数据完整性的32位CRC的数据包〔DDP〕
Isochronous
Packet(ITP)。
它被主机用来多点播送到所有的活动的链路上。
4.4对传输(transfer)的一般性描述:
每一个发送给接收器的非同步数据包通过一个握手包〔ACKTP〕被应答〔同步端点不应答,非同步端点要为每个收到的数据包进行应答,以报告是否正确传输和是否要重传〕,但是由于超速有独立的发送与接收路径,所以发送器不必在发送下一个包之前为每次传输的数据包等待一个握手〔超速USB的一个特色:
同时进行发送数据与接收应答,当设备检测到数据包错误时或者端点错误,没准备好等,都会通过在应答TP包中反响给主机,主机收到的应答TP包中记录出错的包顺序号,于是主机从错误的那个顺序号开始重新发送包〕。
超速保护所有的根本数据流和USB2.0定义的传输观点,包括传输类型,管道和根本数据流模式。
和USB2.0的区别在这章被讨论,开始是协议层,然后是传输类型。
USB2.0标准利用一系列事务处理的模式。
这从本质上意味这主机是在开始下一次事务前完成这一次总线处理〔令牌,数据和握手〕。
别离事务处理也坚持这相同模式,因为他们由完整的高速事务组成,类似所有其他事务在相同的模式下完成。
超速通过实施发送与接受同步改善了USB2.0事务的协议。
因此超速USB事务处理协议本质上是一个别离的事务处理协议,它允许在同一时间不止一个OUT总线事务处理〔设备可以多个〕和至多一个IN总线事务处理〔主机只有一个〕在总线上活动。
设备对事务处理的应答的命令是确定在每个端点根底上〔例如,如果一个端点接收三个DP包,端点必须为每一个DP包返回ACKTP告知收到DP包〕。
USB2.0协议要在继续下一个总线事务处理之前完成整个IN或OUT事务〔令牌,数据和握手包连续传输〕,所有的来自主机的传输本质上是播送到USB2.0总线上的每一个活动设备,与之比拟起来,超速协议不进行播送任何包〔ITP除外〕,包只穿过需要到达目标接收方的链路,主机通过发送握手请求〔ACKTP〕或者发送数据〔OUT〕开始所有的事务,设备以数据或者握手来应答。
假设设备没有有效的数据〔IN〕或者不能接受数据(OUT),它会以一种包〔NRDY〕来应答以指示不能进行此操作。
之后,当设备准备好发送或者接收数据时,它会发送一个包给主机指示它已经准备好重新进行事务处理。
除此之外,超速提供将链路转变成指定的低电源状态或者退出低电源状态的能力。
低电源链路状态可以在软件使能以后由软件控制或者自发的硬件控制来进入。
还提供一个自动将主机与设备之间的所有链路由非活动电源状态转变成活动电源状态的机制。
设备在每个端点的描述符中记录每个端点的最大包尺寸。
这个尺寸只指示负载数据块长度,不包括链路层和协议层的包头〔DPH〕。
超速的带宽分配相似于USB2.0。
4.4.1DataBursting〔突发数据〕
突发数据通过消除在每个基于数据包应答的等待时间提高效率〔即无需等待应答就能处理数据〕。
每个超速设备上的端点指示了它在必须等待一个明显握手之前能够发送/接受的包数量〔称之为最大数据突发大小〕。
最大数据突发大小是一个每个端点各自的能力,一个主机从与端点相关的SuperSpeedEndpointCompaniondescriptor描述符决定一个端点的最大数据突发大小。
主机在每个事务处理的根底之上能动态改变突发大小,直到最大突发大小被配置了。
主机能使用不同突发大小的一个例子,不受限于,但是包括一个主机上的公平决策和中断流的重试。
当端点是OUT类型,主机能容易控制突发大小〔接收器必须总是能管理突发大小事务处理〕,当端点为IN类型,主机能基于每次事务处理限制端点突发大小,是通过在发送给设备的应答包中的一个域来限制。
4.4.2IN
transfer〔输入传输〕:
主机和设备应该延续传输类型和端点属性的约束。
一个主机通过发送一个ACK确认请求包给设备〔IN〕开始请求一次传输。
这个确认〔握手包〕包包含了数据包路由选择到想要的端点所需要的地址信息。
主机告知设备它可以发送的数据包数量和期望来自于设备第一个包的序号〔0〕。
在应答中,端点会发送正确的序列号的数据包给主机,主机发确实认包也暗中应答了之前成功收到的数据包〔以及请求下一个顺序号的数据包〕。
注意:
即使主机需要为每一个收到的数据包发送一个确认包,但是设备可以不需等待任何确认包就发送所需要的数据包数量。
超速总线的一次IN传输由一个或多个IN事务处理组成,一个IN事务处理由一个或多个包组成〔比方主机发送ACKTP,设备发送DP或NRDYTP或STALL〕。
当下面的任何条件发生,都能结束IN传输:
所有数据已经成功传送;
设备端点发送一个短包〔比最大包尺寸小的包〕作为应答;
端点响应错误。
〔Host发送IN
packet之后,设备可以持续发送多个数据包,不需要等待每个包都得到host确实认包〔ACKTP〕,因为超速是dual-simplex〔全双工〕的,但是设备收到的总的认可包数量应该和设备发送的数据包数量一样。
〕
4.4.3OUT
transfer:
主机通过发送一个突发数据包给设备开始一次OUT传输,每一个数据包〔的DPH〕包含需要路由选择目标端点的地址信息,也包含数据包的顺序号〔作为区分不同发送顺序的数据包标号〕。
对于一个非同步事务,设备返回一个确认包,其中包含下个要接收的数据包顺序号和隐含地应答当前数据包。
注意虽然设备需要为每个收到的数据包发一个确认包,但是主机不需等待一个应答就能发送最大的突发数据包数量给设备。
OUT
transfer在以下情况下时会结束:
Host发送了一个短包;
四种transfer类型:
control、bulk、interrupt、isochronous
transfer。
用意同USB2.0,但是bulk
最大包大小增加为1024B,control端点最大包大小增加为512B。
control
端点不支持burst,bulk可以burst
1~16,bulk还增加了Stream能力;
interrupt、isochronous可以bust
1~16〔当最大突发大小为1时,对于同步传输,其最大包大小能为0-1024之间任意大小,对于中断端点,最大包大小可以在1-1024之间任意大小;
如果最大突发大小为>
1时,最大包大小只能为1024〕。
4.4.5控制传输
控制传输的目的与特点与USB2.0协议完全相同。
这个规格的协议层章节详细描述了用于完成控制传输的包,总线事务处理和事务处理流程。
设备架构那章定义了完整系列的设备使用的标准命令编码。
每个设备需要启动默认控制管道作为一个消息管道。
这个管道用来进行设备初始化和管理,用来访问设备描述符和向设备请求对其进行操作〔在设备级〕。
控制传输必须维持相同的在USB2.0中定义的请求〔获取描述符等命令〕。
超速系统会制造一个最好的条件情况支持主机与设备间的控制传输。
正如USB2.0,功能和客户软件不能为控制传输主动要求指定带宽〔不是能分配10%的带宽吗?
〕。
4.4.5.1控制传输包大小
控制端点有一个固定的最大控制传输数据包大小为512字节〔同时反响了端点缓存大小〕。
还有一个最大突发大小为1〔控制传输不支持突发数据?
这些最大值适用于在控制传输数据阶段的所有的数据事务处理。
参考8.12.2章,详细描述了超速控制传输的建立〔setup〕与数据阶段〔data〕。
超速设备在设备描述符的bMaxPacketSize域中必须记录一个09H的值。
默认控制管道的默认最大包大小的解码规那么在9.6.1章被给出〔2的9次方=512B〕。
默认控制管道必须支持最大顺序值为32〔在[0-31]范围的顺序值被使用〕。
USB2.0与超速之间,设备到主机和主机到设备的数据阶段数据传输和完成一般没有什么改变。
4.4.5.2控制传输带宽需求
设备没有方法为控制管道指示想要的带宽。
主机通过权衡所有控制管道总线访问需求与在那些管道上挂起事务处理来提供一个最好的情况给客户软件和功能设备之间的传输。
这个规那么跟USB2.0相似。
超速需要保存有效的总线带宽给控制管道作为以下使用:
控制传输事务处理可能与其他被定义功能端点的事务处理一同被安排
控制传输的重试不能优先于其他最好情况的事务处理
如果有控制传输和块传输为多个端点挂起,根据一个主机控制器相关的公平规那么,不同端点的控制传输被选择效劳。
当一个控制端点传输一个流控制事件,主时机移除来自于被安排的活动端点。
一旦收到一个来自于设备准备好的通知,主时机对这个端点恢复传输。
这些要求允许主机与设备间的控制传输周期性的通过有最好条件的超速总线移动数据。
系统软件的任意操作行为在USB2.05.5.4定义。
超速控制传输同样适用。
4.4.5.3控制传输数据流程
超速保护消息格式和在USB2.0定义的控制传输的一般阶段流程。
超速协议定义了对控制传输建立和状态阶段的相同改变。
4.4.6块传输
此规格的8.12.1章详细描述了用来完成块传输的包,总线事务处理和事务处理流程。
块传输类型是用来支持想要跟相当大的海量数据通信设备,传输能使用任何可用的超速带宽。
超速块传输功能端点提供以下:
对基于有限带宽的超速总线访问
保证数据的发送,但是不保证带宽和发送时间
超速维持下面的块传输管道特征:
对块传输管道通信流没有强制固定的数据结构
块传输管道是一个流式管道,因此总是有通信流进出主机。
如果应用需要一个双向块传输通信流,必须使用两个块传输管道〔一个OUT,一个IN〕。
标准USB块传输管道提供移动数据流的能力。
超速增加了协议级支持多倍流模式的流式概念。
4.4.6.1块传输数据包大小
块传输端点应该在端点描述符中设置最大数据包大小为1024字节。
也要指定端点在超速总线上能够接受或发送的突发大小。
可允许的块传输端点突发大小在1到16的范围。
所有的超速块传输端点要支持[0-31]的顺序值。
主机需要支持任何超速bulk传输端点和所有的bulk传输突发大小。
主机要确保发送给端点的数据包的数量不能超过描述符中定义的最大包大小。
此外,发送的突发数据包不能超过记录的最大突发大小。
块传输功能端点发送的数据包,其数据域必须总是小于等于1024字节。
如果块传输数据量超过1024,那么突发事务中所有数据包除了最后一次,都必须是1024字节大小。
最后一次是剩下的缺乏1024字节的数据。
块传输可以持续多个总线事务处理。
块传输在端点有以下情况时完成:
已经准确传输完了所期待的数据
传输了一个比1024字节少的数据包〔短包〕
应答STALL握手包
4.4.6.2块传输带宽需求
正如USB2.0,块传输功能端点没有方法为块管道指定想要的带宽。
块事务处理只发生在超速总线上有可用带宽的根底上。
超速提供一个最好的条件在客户软件和功能设备间传输块数据。
控制传输对总线操作比块传输更有优先权〔对总线操作的优先级,控制传输比拟高〕。
当有多个端点的bulk传输挂起时,主时机根据一个公平访问原那么提供事务处理的时机给每个端点,这就是主机依赖性操作。
所有在系统中挂起的块传输竞争相同的有效总线时间。
端点和客户软件不能为块传输假定配置一个指定的效劳率〔总线带宽不能为块传输主动分配〕。
总线时间被提供给客户软件,由于其他设备被插入到系统或者从系统中移除或者因为块传输被其他功能端点需要,端点能被改变。
客户软件不能假定在块传输和控制传输之间的顺序,即在一些情形中,块传输能在控制传输的前面进行。
主机在带有块传输端点的事务处理中能使用任何在1和记录的最大的突发大小,更高效的利用有效总线带宽。
例如,可能有比有效总线带宽更多的块传输,所以主机可以每次使用事务中更小的数据突发,以提供公平效劳给所有挂起的块数据流〔因为块传输多,有效带宽少,所以为了能公平给所有等待的块传输时机,主时机使用事务处理中比拟小的数据突发大小,从而将有效带宽充分平均分配给所有块传输〕。
当一个块传输端点传输一次流控制事件〔在8.10.1章定义〕时,主时机从安排的活动端点中移除它,主时机基于接收到来自于设备的准备好通知恢复端点的传输。
4.4.6.3块传输数据流程
块事务处理为数据可靠传输使用标准的突发序列,在8.10.2章定义。
块端点通过一次适宜的控制传输〔SetConfiguration,SetInterface,ClearEndpointFeature〕被初始化成最初的发送/接受顺序号和突发大小值〔8.12.1.2和8.12.1.3〕。
同样,主机在已经成功完成了上面提到的适宜的控制传输后,配置块传输管道初始的发送/接收序列号和突发大小值。
超速块管道的停止条件跟USB2.0定义的块端点一样同样有副作用。
从停止条件中恢复也跟USB2.0相同。
块管道停止条件包括STALL握手包作为一次事务处理的应答或者由于发送错误主机事务处理的重试次数消耗完的应答。
4.4.7中断传输
中断传输类型用来支持带有轮询效劳间隔需要高可靠性传输小数量数据的设备。
这个规格的协议层章详细描述了与中断传输相关的包,总线事务和事务处理流程。
超速中断传输类型一般提供以下方面:
能保证最大的效劳间隔
能保证在下一次效劳间隔中尝试重新传输
在每个效劳周期中为中断端点尝试中断传输,保存一定带宽保证在每个效劳间隔尝试传输。
一旦传输成功,就不尝试另外一次传输〔在此周期内〕,直到下一个轮询效劳周期到来〔保证每个效劳周期中尝试一次中断传输〕。
如果端点以没有准备好的通知或者一个指示不能接收任何包的ACK应答,那么主机不会在此次效劳中尝试另外一次到端点的传输,除非接收到