USB3.0协议(中文) - 图文 下载本文

内容发布更新时间 : 2024/5/5 21:20:32星期一 下面是文章的全部内容请认真阅读。

域要求的数量还少,而且不是短包,则 EOB域应该在突发的最后包中被置位。当设备发送一个短包时,EOB域可以被置位。

对于非同步OUT和控制端点,这个域应该被设为0.

对于同步端点这个域被用来确认这是在当前服务周期中最后一次突发的最后包。LPF能被设备和主机置位。当这个DP源或目标是同步端点时候的使用请参考8.12.6章。

Endpoint Number (Ept Num). = 这个域决定DP源或者DP的接收方(哪个设备端点) Setup (S). = 这个区域被主机置位指示DP是一个建立数据包。这个域只能被主机置位。 Data Length = 这个域用来指示不包含CRC-32的DPP数据的字节数

Data Block. = 这个区域包含DPP中的数据。字节中这个区域的大小由Data Length值指示。

8.7 同步时间戳包(ITP)

ITPs的类型域值为Isochronous Timestamp Packet,ITPs被用来从主机到所有活动的设备发送时间戳(广播)。ITPs不带有地址或路由信息,而是通过集线器在U0状态下广播给所有它们的下游端口链路。设备不应该应答ITP。ITPs为同步传输被用来提供主机时序信息给设备。注意任何设备或集线器可以接收一个ITP。只要链路已经在U0状态,主机就应该在根端口链路上发送一个ITP。只有主机能初始化一个ITP发送。主机不应该为发送ITP而使一个根端口链路进入U0。如果根端口链路在U0状态,主机应该在时间戳范围内的每个总线周期发送一个ITP。当主机根端口链路从查询状态进入U0,

33

主机应该发送带有同步时间戳开始(tIsochronousTimestampStart)的ITPs。 ITP可以在一次突发中的包之间发送。如果设备收到一个带有链路控制字DL标志置位的ITP,时间戳值可以允许严重错误,可以被设备忽略。

ITP格式解析:

Isochronous Timestamp (ITS). 同步时间戳区域被用来确认从主机发送ITP以来的当前时间值,时间戳域被分为2个子域:

Bits 13:0 26:14

description

总线间隔计数。当前毫秒计数值的1/8。计数值达到0x3FFF时归0,然后继续增加。

Delta. (间隔)=从当前ITP包的开始到上一个总线周期边缘之间的时间。这个值是一些

tIsochTimestampGranularity单元数。被使用的值应该指定最接近前一个总线周期边界的间隔

注意:如果包是精确的从总线轮询周期边缘开始的,那么间隔时间被设为0.

Bus Interval Adjustment Control 这个域指定了控制总线轮询周期调整机理的设备地址。一旦上电,复位或设备断开连接,主机要设置次域为0。

8.8 三个参数地址信息

数据包和大部分事务包提供使用一个由三个域构成的地址访问指定数据流的权限。它们是设备地址、端点号和方向域。

34

一旦复位和上电,设备地址默认值为0,应该在枚举过程期间被主机用1到127之间的值来编程。设备地址0保留成默认地址,不能分配给任何其他使用。

设备除去必须的默认端点号为0的默认控制端点外,可以支持最大值达到15个IN和15个OUT端点(由方向域指示)。

8.9 路由字符域

路由字符是在下游导向(向下游端口方向发送)的包中一个20位的域,集线器使用其进行路由选择,将包传递到指定的下游端口。它由一串下游端口号(每个集线器4位)组成,集线器使用它到达设备。集线器使用集线器深度值Hub Depth乘以4作为在路由字符域中要定位的偏移值,集线器用它来决定下游端口号。集线器深度值在枚举过程期间,由每个集线器决定和分配。

注意这个域(路由字符)只在主机发送的包中有效,当被设备发送时,这个域是保留的。

上图中集线器@Tier1域值是直接连接到主机根端口之一的集线器的下游端口号。 注意:上图中结构是每4bit表示一个端口号。因此不同端口号是以4为模进行偏移。

8.9.1 路由字符端口域

在路由字符中的这4位宽度区域代表要被寻址的集线器端口 8.9.2 路由字符端口域宽度

路由字符端口域宽度是固定为4位,端口号的最大值限制为15. 8.9.3 端口号

包直接传向的集线器上指定的端口,由路由字符端口域值确定。当寻址集线器控制器时,然后在集线器层的路由字符中端口号域应该被设置为0. 集线器下游端口一个个相继寻址。

8.10 事务包使用

TP被用来报告数据事务传输的状态,能返回指示数据包、命令接收或拒绝,流控的成功接收和停止条件的值。

8.10.1 流控制条件

这部分描述当一个端点返回一个流控制应答时,在主机和设备之间的相互作用。流控制是在主机和设备端点之间的端对端级的。只有块,控制和中断端点可以发送流控制应答。同步端点不能发送流控制应答。

如果一个IN端点返回下面对ACK TP的应答之一(返回数据),则应该被认为这是在一次流控制条件中:(对主机请求数据事务包的应答)

·NRDY TP应答

·发送一个DPH中EOB域值为1的DP

如果一个OUT端点返回下面的对DP的应答之一, 则应该被认为在流控制条件中: ·NRDY TP应答

35

·发送一个NumP域值为0的ACK TP

只有当被主机设置时Packets Pending域才有效,它不影响端点进入流控制状态。详细参考8.11的主机与设备的TP 应答。

当端点在流控制条件中,它应该发送一个ERDY TP使自己进入活动状态。而且,如果端点是IN端点,那么它应该一直等待,直到它在能发送ERDY TP之前,为它发送的最后一个DP收到ACK TP。当端点不在一个流控制条件中,它不应该发送一个ERDY TP,除非端点是支持流的块端点。注意主机能重新开始到任何端点的事务处理——甚至端点在返回一个流控制应答以后还没有返回ERDY TP。

8.10.2 Burst Transactions(突发事务处理)

只要设备能够接收数据,超速USB协议就允许主机连续发送数据给一个设备或者 只要设备能够发送数据,主机就连续能从设备接受数据。设备端点能不需ACK而一次发送或者接受数据包数量(burst size)被记录在设备的endpoint companion descriptor中。在端点最大突发大小中记录的值为不止一个包(最大突发尺寸大于1),则被认为能支持“突发”事务处理。(如果突发大小为1,则意义为发送一个数据包而不需要ACK应答,这相当于没有突发,还是发送每个数据包后要发送ACK TP) 下面的规则适用于突发: ·在收到ACK之前能在突发中发送的最大包数 被限制于 端点的最大突发大小 加上 端点或主机收到最后一个ACK TP包的NumP域的值,减去在被最后一个ACK TP包应答之后端点或主机已经发送的包数。

(收到一个ACK之前一次突发中能被发送的最大包数 <= 端点的最大突发大小 + 收到的最后一个ACK TP包的NumP域值 — 在被最后一个ACK TP包应答的包之后已经发送的包数)

·在突发中的每个包都要有一个最大数据包尺寸的数据负载。仅仅在一次突发的最后一个包的大小能比描述符中记录的最大数据包尺寸小(类似于USB2.0)。如果最后一个包较小,则对于短包的相同规则也适用一个在一次突发结尾的短包(参考8..10.3短包)。 ·只要ACK TP包的NumP域值不为0,突发传输事务就能持续,每个包都有最大包尺寸大小的数据负载。

· 只要主机或者设备想要持续接受数据, NumP域值能在任何时候通过主机或者设备发送ACK TP包来增加。仅仅要求是NumP域值不能比设备支持的最大突发尺寸大。 ·如果设备或者主机发送一个NumP域值减少的ACK TP包,那么减少的值不能比1大. 例如,如果前一个ACK TP包NumP域值为5,那么对下一个收到的包的ACK TP的NumP域值不应该比4小,只有下面的情况除外:

-----如果设备能够接受数据但是不能再接收更多的数据了,则它应该发送一个NumP域值设为0的ACK TP包。

-----主机应该发送一个NumP域值设为0的ACK TP包作为设备发送一个带有EOB域值被置位的DP包或者是短包的的应答。

但是,如果主机收到一个短包,主机还需要在同一个端点上开始另外一次传输,那么主机可以发送一条NumP域值为非零值的ACK TP包来替代发送一个为0的ACK TP包。

8.10.3 短包

超速保持USB2.0支持的短包功能。当设备或主机收到数据长度区域比端点最大包

36