USB超高速3.0协议与USB2.0协议的差异
超高速在框架层级是向后兼容 USB 2.0 的。然而, USB 2.0 和超高速协议还是有一些根本性的差异:
- USB 2.0 使用三部分事务交易(令牌,数据和握手),而超高速对这相同的三部分的使用是不相同的。对于输(OUTs),令牌被列入数据包;而对于输入(INs),令牌则被握手所取代。
- USB 2.0 不支持突发(bursting)而超高速支持连续突发(continuous bursting)。参见端点描述符及端点伴随描述符。
- USB 2.0 是一个半双工广播(broadcast)总线,而超高速是双重单工(dual-simplex)单播(unicast)总线,这就允许同时进行 IN 和 OUT 事务交易。
- USB 2.0 使用轮询模型,而超高速使用异步通知。
- USB 2.0 没有流(Streaming)的能力,而超高速支持对批量端点的流(Streaming)。
- USB 2.0 没有提供机制来允许具有同步(isochronous)传输能力的设备来在服务间隔之间进入低功耗 USB 总线状态。超高速允许具有同步(isochronous)传输能力的设备在服务间隔之间自动进入低功耗链路状态。超高速主机可以传送 PING 包到目标同步设备,以便允许时间,在启动同步传输之前,将路径转换回到活动功率状态。
- 如果系统进入更低的系统电源状态, USB 2.0 没有提供机制来让设备告知主机设备可以容忍多少延迟。因此,一个主机可能不能进入更低系统电源状态,因为可能会影响设备的性能(由于它缺乏一个对设备的电源策略的理解)。 USB 3.0 提供了一种机制,让超高速设备使用延迟容忍消息(Latency Tolerance Messaging)告知主机其对延迟的容忍。主机可以使用这些信息来建立一个系统电源策略,将设备的延迟容忍考虑在内。
- USB 2.0 以固定的 1 ms/125 μs 间隔传输 SOF/uSOF。取决于主机和系统软件的实现,设备驱动程序可能会在有限的小的调整区间内更改该间隔。 USB 3.0 增加了设备机制来发送总线间隔调整消息(Bus Interval Adjustment Message),被主机用来调整其 125 微秒总线间隔,高达+ / -13.333 微秒。此外,主机可能会在一个总线间隔边界附近宽松的时序窗口(relaxed timingwindow)内发送同步时间戳包(Isochronous Timestamp Packet)(ITP)。
- USB 2.0 的电源管理,包括链路电源管理,总是由主机直接发起。超高速支持链路级的电源管理,可由链路的任何一端启动。因此,每一个链路可以独立地在空闲(idle)时进入低功耗状态,而在需要通讯时退出。
- USB 2.0只在每个事务交易的端到端层级处理事务交易错误检测和恢复以及流量控制。超高速将这些功能在端到端和链路层级进行了拆分。
比较USB2.0和超速的事务处理(Transaction)
- 超速全双工总线物理层允许同时进行双向的通信。超速协议允许收到握手包之前发送多个数据包(突发)。对于OUT传输,包含在USB2.0令牌包中的信息(设备地址和端点信息)被合并在数据包头里面,因此不需要额外令牌包。对于输入传输IN,超速主机发送一个握手包(ACK)给设备以请求数据(和指示数据是否正确)。设备可以通过返回数据或者返回STALL握手包来应答,或者返回一个没准备好(NRDY)握手包延迟传输直到设备准备好了。
- USB2.0的包是广播方式,每个连接的设备解析每个包的地址、端点、方向信息来决定自己是否应该响应。超速包有路由信息,HUB决定每个包要送达哪个设备,只有一个例外,等时(同步)时间戳包(Isochronous Timestamp Packet, ITP)广播到每一个设备。
- USB2.0的查询方式已经被异步通知代替。超速传输通过主机发出一个请求来开始传输,后面跟随着设备的应答。如果设备能接受请求,它就接收数据或者发送数据;如果端点停止了,设备应该以STALL握手包响应;如果设备由于缺少缓存空间或者没有数据而不能接受请求,应该以NRDY应答告诉主机现在还不能处理请求。当等到设备能接受请求时,设备会主动发送一个端点准备好(ERDY)异步通知给主机然后主机会重新安排传输事务。
- 单路传送和有限制的多点广播的包以及异步通知,都允许没有活跃传输包的链路进入一个降低功耗状态,上游和下游端口共同决定它们的链路进入一个低功耗状态,集线器会传递到上游端口。通过允许链路伙伴独立控制它们的链路电源状态,集线器将任意下游端口可见的最高链路电源状态传递到上游端口,使总线快速进入最低允许电源状态。
超速包介绍:
超速包以16字节的头部开始。一些包只包含有头部(TP,LMP,ITP)。所有的头部以用于决定包处理方式的包类型信息开始。头部有16位CRC保护,以2个字节链路控制字(link control word)结束。依赖于类型,大多数包包含有路由信息(路由字符)和一个三参数的设备地址(设备地址,端点号和方向)。路由字符给主机用来指导包被发送到被指向的拓扑路径。设备发送的包被集线器默认路由选择,集线器总是把数据从任何可见的下游端口传到上游端口(这一过程不需要路由信息)。
Data Bursting(突发数据)
突发数据通过消除在每个基于数据包应答的等待时间提高效率(即无需等待应答就能处理数据)。每个超速设备上的端点指示了它在必须等待一个明显握手之前能够发送/接受的包数量(称之为最大数据突发大小)。最大数据突发大小是一个每个端点各自的能力,一个主机从与端点相关的SuperSpeed Endpoint Companion descriptor描述符决定一个端点的最大数据突发大小。
主机在每个事务处理的基础之上能动态改变突发大小,直到最大突发大小被配置了。主机能使用不同突发大小的一个例子,不受限于,但是包括一个主机上的公平决策和中断流的重试。 当端点是OUT类型,主机能容易控制突发大小(接收器必须总是能管理突发大小事务处理),当端点为IN类型,主机能基于每次事务处理限制端点突发大小,是通过在发送给设备的应答包中的一个域来限制。
IN transfer(输入传输):
主机和设备应该延续传输类型和端点属性的约束。
一个主机通过发送一个ACK确认请求包给设备(IN)开始请求一次传输。这个确认(握手包)包包含了数据包路由选择到想要的端点所需要的地址信息。主机告知设备它可以发送的数据包数量和期望来自于设备第一个包的序号(0)。在应答中,端点会发送正确的序列号的数据包给主机,主机发的确认包也暗中应答了之前成功收到的数据包(以及请求下一个顺序号的数据包)。
注意:即使主机需要为每一个收到的数据包发送一个确认包,但是设备可以不需等待任何确认包就发送所需要的数据包数量。
超速总线的一次IN传输由一个或多个IN事务处理组成,一个IN事务处理由一个或多个包组成(比如主机发送ACK TP,设备发送DP或NRDY TP或STALL)。
当下面的任何条件发生,都能结束IN传输:
- ·所有数据已经成功传送;
- ·设备端点发送一个短包(比最大包尺寸小的包)作为应答;
- ·端点响应错误。
(Host发送IN packet之后,设备可以持续发送多个数据包,不需要等待每个包都得到host的确认包(ACK TP),因为超速是dual-simplex(全双工)的,但是设备收到的总的认可包数量应该和设备发送的数据包数量一样。)
OUT transfer:
主机通过发送一个突发数据包给设备开始一次OUT传输,每一个数据包(的DPH)包含需要路由选择目标端点的地址信息,也包含数据包的顺序号(作为区分不同发送顺序的数据包标号)。对于一个非同步事务,设备返回一个确认包,其中包含下个要接收的数据包顺序号和隐含地应答当前数据包。
注意:虽然设备需要为每个收到的数据包发一个确认包,但是主机不需等待一个应答就能发送最大的突发数据包数量给设备。
OUT transfer在下列情况下时会结束:
- ·所有数据已经成功传送;
- ·Host发送了一个短包;
- ·端点响应错误。
四种transfer类型
四种transfer类型:control、bulk、interrupt、isochronous transfer。
同USB2.0,但是bulk 最大包大小增加为1024B,control端点最大包大小增加为512B。control 端点不支持burst,bulk可以burst 1~16,bulk还增加了Stream能力;interrupt、isochronous可以burst 1~16(当最大突发大小为1时,对于同步传输,其最大包大小能为0-1024之间任意大小,对于中断端点,最大包大小可以在1-1024之间任意大小;如果最大突发大小为>1时,最大包大小只能为1024)。