USB3.0协议规范中文解读 - 图文

且转变成Idle状态。如果主机在最后一个被设备发送的DP中检测到一个错误,它会以带有重试位的ACK TP (Steam n, NumP>0, Rty)应答,IMDSM会转变成INMvDataDevice状态。

注意:如果DP错误在 INMvDataHost 中被检测到,主机会产生一个NumP > 0 and Rty = 1的ACK TP,这会引起管道转变成INMvDataDevice状态,并且重新发送包。

8.12.1.4.3 块OUT流协议

这个区域定于了超速包交换进行从一个状态转变到另外一个状态的输出块端点上的流协议。

对于输出管道,主机的端点数据被发送到功能设备的buffers中,除非另外的规定,DP将包含端点数据。

在端点配置后,管道在Disabled状态。主机通过发送带有流ID域设为Prime的DP要将管道转变成Prime Pipe 状态。这个转变发生在端点buffers被主机软件分配给管道之后。

8.12.2 控制传输

控制传输最小有两个事务处理阶段;建立阶段和状态阶段。一次控制传输可以可选的在建立阶段和状态阶段中间包含一个数据阶段。数据阶段的方向由在setup包数据负载的第一个字节中的bmRequestType域指示。在setup阶段期间,一次setup事务处理是用来发送信息给设备的控制端点。Setup事务处理和一次块OUT事务处理格式相似,但是在DPH中有个setup区域被设置为1,并且数据长度域被设置为8. 除此之

49

外,setup包总是使用数据顺序号0。设备收到setup包会以在Section 8.11.4中定义的应答。在主机和设备上任何控制端点之间交换的TP或DP的方向域应该被设置为0。(控制端点为双向的,所以不区分端点方向)。

注意:如果端点想要对控制传输进行流控制,则它可以返回NumP域被设为0的ACK TP作为一个SETUP包的应答。设备必须发送ERDY开始数据或状态阶段。

控制传输如果存在数据阶段的话,它由一个或多个IN/OUT事务处理组成,并且和带有突发设置为1的块传输的协议规则相同。数据阶段总是从顺序号设置为0开始。所有数据阶段的事务处理应该是在同一个方向(比如全部为IN或OUT)。在数据阶段期间要被发送的最大数据量和它的方向在setup阶段被指定了。如果数据量超过了最大包大小,数据以多个最大数据包大小发送。剩下的任何数据在最后数据包中被发送。

注意:所有的控制端点值支持突发次数为1,因此,主机一次只能对控制端点发送或接收一个包。

控制传输的状态阶段是整个控制传输流程的最后的事务处理。状态阶段事务处理通过子类型被设为STATUS的TP来确认。作为对Deferred位为0的STATUS TP的应答,设备应该发送NRDY,STALL或ACK TP。如果设备发送一个NRDY TP(收到STATUS TP后没完成状态阶段),主机再发送另外一个STATUS TP给设备之前会等待设备为控制端点发送一个ERDY TP。如果STATUS TP中的Deferred位置位,那么设备会发送一个ERDY TP向主机指示,准备完成控制传输的状态阶段了。

Figure 8-33 and Figure 8-34展示了控制读和写流程的事务处理顺序,数据顺序号值和数据包类型:

50

联系客服:779662525#qq.com(#替换为@)