Link Command Usage for Flow Control, Error Recovery, and Power Management
1.3 Transmitting Packets
a、在发送header packet(type1/type2 packet)前,需要在Link Control Word填充Tx Header Sequence Number;Tx Header Sequence Number每次递增1,到达最大值后翻转为0;
b、header packet(type1/type2 packet)需要消耗(type1/type2)Tx Header Buffer;
c、重发header packet(type1/type2 packet)不需要消耗(type1/type2)Tx Header Buffer,且Sequence Number不变;
d、一旦接受到LBAD,port先发送LRTY,再重新发送除了Recovery外所有未使用LGOOD_n响应的header packet;
e、在重新发送header packet前,需要置位DL bit,并重新计算CRC5;CRC16保持不变
f、接受到有效的LCRD_x(LCRD1_x/LCRD2_x)时,(type1/type2)Remote Rx Header Buffer Credit Count+1;
g、进入U0状态后,(type1/type2)header packet第一次被发送,(type1/type2)Remote Rx Header Buffer Credit Count-1;包括Recovery进入U0的重发
h、在LRTY后重发的header packet不改变(type1/type2)Remote Rx Header Buffer Credit Count;
1.4 Receiving Header Packets
接收的header packet有效,需要满足4点:
a、CRC-5
b、CRC-16
c、packet的Header Sequence Number与Rx Header Sequence Number匹配
d、Rx Header Buffer可以缓存packet
如果Receiver正确接收header packet,应使用LGOOD_n响应,同时Rx Header Sequence Number+1(最大值翻转为0),SuperSpeed占用一个Rx Header Buffer,SuperSpeedPlus占用一个Rx Buffer Credit;
如果CRC-5或者CRC-16出错,响应LBAD,同时忽略所有的header packet直到接收到LRTY,或者进入Link层Recovery状态;如果是Gen2,满足1.6,需要继续接收DPP
如果Header Sequence Number不匹配,或者Rx Buffer空间不足,或者是两个length field replica不同(Gen2 non-DPH),进入Recovery状态;
如果(type1/type2)Rx Buffer Credit有效,即使CRC错误也要继续发送LCRDn_x;
连续3次接收出错,进入Recovery状态,最后一次不再发送LBAD;
1.5 Rx Header Buffer Credit or Rx Buffer Credit
每个port的receiver都有Rx Header Buffer Credits/Rx Buffer Credits,SuperSpeed由4个Rx Header Buffer Credits,SuperSpeedPlus由4或者7个Type 1 Rx Buffer Credits、Type 2 Rx Buffer Credits(以下统称Rx Buffer Credits),Rx Buffer Credits数量表示receiver可以接收的header packet数,通过Local (Type 1/Type 2)Rx Header Buffer Credit Count来管理。
正确接收一个packet,Local (Type 1/Type 2)Rx Header Buffer Credit Count+1,不同事物使用不同的count类型
;
当packet被处理完成后,发送LCRDn_x,按字母顺序发送,发送到最大字母,翻转到A
,同时Local (Type 1/Type 2)Rx Header Buffer Credit Count-1;
1.6 Receiving Data Packet Payload
Gen1
receiver开始接收DPP,需要满足两点:
a、DPH正确接收;
b、DPPSTART Ordered Set与DPH无间隙;
检测到有效的DPPEND,DPP接收完成,当出现一些情况,终止DPP接收:
a、检测到有效的DPPABORT;
b、在检测到DPPEND、DPPABORT前接收到K-symbol;
c、接收到sDataSymbolsBabble(min 1030)个symbol,仍没有检测到DPPEND、DPPABORT;
Gen2
receiver开始接收DPP,需要满足两点:
a、DHP有效,或者DPP length field replica有效;
b、DPH后接收到DPPSTART或者DPPABORT(无间隙);
DPP 处理规则:
a、在length field + 4检测到有效的DPPEND、或者DPPABORT,接收完成,否则接收出错,进入Recovery状态;
b、在DPH后接收到DPPABORT(无DPPSTART),接收完成;
1.7 Receiving LGOOD_n
Port应该缓存发送的每一个header packet在(Type 1/Type 2) Tx Header Buffer中,直到接收到LGOOD_n:接收到的LGOOD_n不连续,进入Recovery状态
a、port从Recovery进入U0,在Header Sequence Number Advertisement阶段接收到LGOOD_n,port刷新(Type 1/Type 2) Tx Header Buffer中Header Sequence Number小于等于接收到的Header Sequence Number的header packet,同时ACK Tx Header Sequence Number赋值为接收到的Header Sequence Number+1;
b、如果不是在a阶段接收到LGOOD_n,刷新(Type 1/Type 2) Tx Header Buffer中Header Sequence Number匹配的header packet,ACK Tx Header Sequence Number+1;
c,如果b接收到的Header Sequence Number不匹配,ACK Tx Header Sequence Number不变,进入Recovery状态;
1.8 Receiving LCRD_x/LCRD1_x/LCRD2_x
Port根据接收到的LCRDn_x来调整(Type 1/Type 2) Rx Buffer Credit Count:
a、接收到LCRDn_x,(Type 1/Type 2) Rx Buffer Credit Count+1;
b、如果接收到的LCRDn_x不连续,进入Recovery状态;
1.9 Receiving LBAD
Port接收到LBAD,应该在重新发送(Type 1/Type 2) Tx Header Buffer中未使用LGOOD_n响应的Header packet前发送LRTY,此外还需遵守以下规则:
a、hub应该置位header packet的DL bit,并重新计算CRC-5。如果是DP in SuperSpeed,应该丢弃DPP,如果是DP in SuperSpeedPlus,使用nullified DPP替换DPP;
b、Host或者peripheral,置位DL bit,重新计算CRC-5,如果是DP,则清除DPH的DL bit,DPH后紧接着DPP;
2.0 Transmitter Timers
PENDING_HP_TIMER: LGOOD_n、LBAD响应超时计时器,计算从发送完HP的最后一个symbol到接收到LGOOD_n或者LBAD的最后一个symbol的时间。
- 在U0状态下,满足两点中任何一点,PENDING_HP_TIMER有效:
a、port发送一个header packet,但是没有响应,接收到LBAD到重新发现期间除外;
b、port期望接收到the Header Sequence Number Advertisement; - 满足以下条件之一,PENDING_HP_TIMER开始计时
a、进入U0状态,port期望接收到the Header Sequence Number Advertisement;
b、port发送一个header packet,并且Tx Header Buffers中没有未响应的packet;
c、由于接收到LBAD而重新发送packet; - 当接收到LGOOD_n响应,并且Tx Header Buffers中还有未响应的packet时,PENDING_HP_TIMER重新开始计时
- PENDING_HP_TIMER重置位并停止计时
a、接收到Header Sequence Number Advertisement;
b、当接收到LGOOD_n响应,并且Tx Header Buffers中没有未响应的packet;
c、接收到LBAD; - 同时满足以下两点,进入Recovery状态
a、PENDING_HP_TIMER 溢出;
b、SuperSpeed USB,header packet传输完成,或者是DPP使用DPPEND或DPPABORT完成事务传输;
(Type 1/Type 2)CREDIT_HP_TIMER: LCRDn_x响应超时计时器,计算从发送完header packet,且Remote (Type 1/Type 2)Rx Header Buffer Credit count 小于4(7)到接收到Remote Rx Header Buffer Credit且Remote (Type 1/Type 2)Rx Header Buffer Credit count 回到4(7)的时间。 - 满足以下任何条件,(Type 1/Type 2)CREDIT_HP_TIMER有效,
a、Remote (Type 1/Type 2)Rx Header Buffer Credit count 小于4(7);
b、port期望接收到the Header Sequence Number Advertisement 和 the Rx Header Buffer Credit Advertisement; - 当header packet被(重新)发送,或者port进入U0状态,开始(Type 1/Type 2)CREDIT_HP_TIMER计时
- 当接收到一个有效的LCRDn_x,重置(Type 1/Type 2)CREDIT_HP_TIMER
- 当接收到一个有效的LCRDn_x,且Remote (Type 1/Type 2)Rx Header Buffer Credit count 小于4(7),重新开始(Type 1/Type 2)CREDIT_HP_TIMER计时
- 同时满足以下两点,进入Recovery状态
a、(Type 1/Type 2)CREDIT_HP_TIMER 溢出;
b、SuperSpeed USB,header packet传输完成,或者是DPP使用DPPEND或DPPABORT完成事务传输;