8.4.5 端口属性(Port Capabilities )
端口属性LMP描述了每个端口链路属性,它在成功完成了链路训练和初始化之后被两个链路伙伴互相发送。所有端口应该在完成了链路初始化之后,在tPortConfiguration时间内发送这个LMP。
如果一个链路伙伴在 tPortConfiguration 时间内没接收到这种LMP,那么: ·如果链路伙伴有下游属性,它应该发送一个在Section10.14.2.6中描述的错误
·如果链路伙伴只支持上游属性,那么上游端口应该转变成SS.Disabled,它应该尝试用这个设备支持的其他速度连接。
21
Tiebreaker:只有当Direction 域的bit0和bit1都置位时,此域值才有效。此域值用来决定都可配置为上游和下游端口的两个设备哪个作为上游,哪个作为下游端口。在其他情况,此域值为0.
在交换端口属性LMPs以后,链路伙伴应该决定哪个链路伙伴应该被配置成在Table 8-8.中指定的下游端点;
注意:如果TieBreaker域内容相等,那么两个链路伙伴应该再次以新的不同TieBreaker域值交换端口属性LMPs。TieBreaker域值序列被端口随机产生。当TieBreake值不相同时,较高值(1)的端口为下游端口;较低值(0)的端口为上游端口。
8.4.6 端口配置(由下游端口发送给上游端口) 只与Port Capability LMP不同的域被描述
所有支持下游端口属性的超速端口应该能发送这种LMP
如果要在上游模式中被配置的端口在链路初始化后PortConfiguration时间内没接收
22
到这种LMP,那么上游端口应该转变成SS.Disabled,它应该尝试在这个设备支持的其他速度下连接。
在下游模式下被配置的端口应该发送端口配置LMP给上游端口。发送这种LMP的端口应该为链路速度域只选择一位。
如果一个下游属性端口不能和它的链路伙伴工作,那么下游属性端口应该发送一个在Section 10.14.2.6描述的错误信号。
8.4.7 端口配置应答(由上游端口发送给下游端口作为端口配置的应答)
这种LMP被上游端口发送作为一个端口配置的应答。它被用来指示端口配置LMP的接收与拒绝。只有与端口属性LMP不同的域被描述:
所有支持上游端口属性的超速端口应该能发送这种LMP。如果下游端口在端口配置时间内没接收到LMP,它应该发送在 Section 10.14.2.6中描述的一个错误。
23
如果应答码指示链路速度被上游端口拒绝,那么下游端口应该发送一个在Section 10.14.2.6中描述的错误信号。
8.5 事务包(TP)
事务包在主机和设备间的直接路径上传输,TP用来控制数据流和管理端到端连接。类型域的值应该被设置为Transaction Packet。路由字符被集线器用来路由选择将一个呈现在其上游端口的包传递到正确的下游端口。TP包中的路由字符被设备设置为0发送给主机(设备发给主机TP包,集线器由下游端口传递到上游端口,不需路由选择)。当主机发送一个TP时,设备地址域(Device Address)包含接收方的地址。当设备发送TP给主机,那么它设置设备地址域为它自己的地址,这个域被主机用来确认TP的来源。TP的子类型域被接收方用来决定TP的格式和使用。
TP结构上也是一个头包结构。同LMP类似,TP有多种SubType,一个典型的ACK SubType的TP包格式如图8-11所示: TP的 SubType有如下类型: 0000: Reserved
0001: ACK (此类事务包用来向主机/设备报告包正确的传输) 0010: NRDY(此类事务包用来向主机报告数据包还没准备好传输) 0011: ERDY(此类事务包用来向主机报告数据包准备好传输了) 0100: STATUS (报告控制端点的状态?)
0101: STALL (此类事务包用来报告发生了错误而停止传输)
0110: DEV_NOTIFCATION(此类事务包只能用来向主机传输设备通知) 0111: PING (同步端点中探测链路是否进入低功耗状态) 1000: PING_RESPONSE 1001~1111: reserved
规范对每种SubType的TP作了详细解释。
8.5.1 (确认)应答事务包(ACK Transaction Packet)(主机和设备端点都能发送)
TP用来两个目的:
·对IN端点,这个ACK TP被主机发送以请求设备的数据(包含下一个包顺序号)和应答前一次收到的数据包。
·对OUT端点,这ACK TP被设备对接收前一次被主机发送的数据包作应答和告知主机在这个包被接收后的有效数据包缓存数(告诉主机,传完这个包后,设备自己还能接收多少数据包)。
24