PCIe – LTSSM Polling

Polling 状态

  • 目的 : 实现 bit lock (位锁定),Symbol lock (符合锁定) 和 Lane polarity (lane 极性反转)
  • 存在的子状态 : Polling.ActivePolling.Compliance 和 Polling.Configuration

Polling.Active

处于该状态时

  • 发射机在 Detect 状态检测到 Receiver 的所有 lane 上发射 TS1 Ordered Set, 并且 TS1 中的 Lane number (Symbol 1) 和 Link number (Symbol 0) 都设为 PAD
    • 在此状态,必须设置好 TS1 中的 Symbol 4 (速度指示标识),设置为 port 支持的所有速度,包括不准备用的
    • 在从 ei 退出后,发射机必须等到 TX 共模模式稳定后,才可以发送 TS1 Ordered Sets
      • 进入该状态 192ns 之内,发射机必须用 Transmit Margin field ( Link Control 2 寄存器的 bit[9:7] )中的默认电压发射 patterns, 直到进入 Polling.Compliance 或者 Recovery.Rcvrlock 状态

状态跳转

图片

Polling.Active -> Polling.Compliance

  • Enter Compliance (Link Control 2 寄存器的 bit[4]) 为 1
    • 如果 Enter Compliance 位在进入 Polling.Active 前就已经为 1,那么在 Polling.Active 时不允许发送 TS1, 直接进入 Polling.Compliance
  • 24ms 超时后,满足其一
    1. 不是所有预设的 lane 都退出了 EI, 比如 X8 的插槽设备插上了 x4 的设备,有一条 lane 没有退出 EI, 或者 4 条都没有退出 EI,也是符合不是所有的条件
    2. 在 detect 状态检测到 Receiver 的任意一条 lane 收到了 8 个连续的 TS1, 且 TS1 需要同时满足:
      • link# 和 lane# 都是 PAD
      • Compliance Receive (Symbol 5 bit[4]) 为 1
      • Loopback bit (Symbol 5 bit[2]) 为 0

Polling.Active -> Polling.Configuration

  • 在 Detect 状态检查到 Receiver 的所有 lane 都收到 8 个连续的 TS (包含 TS1 和 TS2, 如果一方从其它状态跳转到 Detect, 而对方还处于可以发 TS2 的状态时, 就可能会收到 TS2), 在 Polling.Active 必须传输 1024 个 TS1 ,收到的 TS 必须满足一下任意一个条件:
    • TS1 的 lane# (lane number) 和 link# (link number) 必须是 PAD,并且 Compliance Receive (symbol 5 bit[5]) 位是 0
    • TS1 的 lane# 和 link# 为 PAD, 并且 Loopback bit (Symbol 5 bit[2]) 为 1
    • TS2 的 lane# 和 link# 都是 PAD
  • 24ms 超时后, 同时满足 1 和 2
    1. 在 Detect 状态检查到 Recevier 的任意一条 lane 收到 8 个连续的 TS, 可能有些 lane 不稳定,虽然在 detect 能检测到,但是无法正常的发送(对端 tx 有问题)或者接受(本端 rx 有问题) TS,在 Polling.Active 必须传输 1024 个 TS1, 收到的 TS 需要满足以下任意一个条件:
      • TS1 的 lane# (lane number) 和 link# (link number) 必须是 PAD,并且 Compliance Receive (symbol 5 bit[5]) 位是 0
      • TS1 的 lane# 和 link# 为 PAD, 并且 Loopback bit (Symbol 5 bit[2]) 为 1
      • TS2 的 lane# 和 link# 都是 PAD
    2. 进入 Polling.Active 后,至少在 detect 状态检测到 Receiver 一组预设的 lane 退出了 EI 状态
      • 预设的 lane, 可以是在 detect 状态检测到 receiver 的所有 lane, 比如 x8 的插槽,插上了 x4 的设备,有设备的 4 条 lane 就可以是预设的 lane
      • 能收到 TS 的 lane 一定是退出了 EI 状态。 但是退出了 EI, 不一定能收到 TS, 收到的 TS 也不一定对

Polling.Active -> detect

  • 24ms 超时后不满足进入 Polling.Configuration 和 Polling.Compliance 的条件,比如所有的 lane 都退出了 EI, 但是无法正常发送或接受 TS,或者收到的 TS 不符合进入 Polling.Configuration 和 Polling.Compliance 的条件

Polling.Configuration

图片

处于该状态时

  • 接收机必须处理极性反转 (如果有必要的话)
  • 进入此状态是,Transmit Margin field (Link Control 2寄存器的 bit[9:7]) 必须为 000b
  • 发射机 Polling.Compliance sequence 设置更新 (待续)
  • 在 Detect 状态检测到 Receiver 的所有 lane 发送 TS2
    • link# 和 lane# 为 PAD
    • 在此状态就是表明支持的所有速度,即使是不打算用的,即设置 Data Rate Identifier (Symbol 4)

状态跳转

Polling.Configuration -> Configuration

  • 在 Detect 状态检测到 Receiver 的任意一条 lane 收到 8 个连续的 TS2 (link# 和 lane# 为 PAD),并且在收到第一个 TS2 后,至少发送了 16 个 TS2

Polling.Configuration -> Detect

  • 48ms 超时

Polling.Compliance

处于该状态时

  • 进入时会采样 Transmit Margin field (Link Control 2 寄存器的 bit[9:7]); 发射引脚在进入此状态 192ns 之类仍然有效; 并且 ltssm 在此子状态时一致有效
  • 从 Polling.Active 跳转到 Polling.Compliance 时,传输用例 (pattern) 的链路速度和 de-emphasis (去加重) 采用下面的算法:
    • 如果端口只能以2.5 GT/s 的数据速率传输, 传输 compliance pattern 的速度为 2.5 GT/s, de-emphasis 水平为 -3.5 dB
    • 如果从 Polling.Active 进入到 Polling.Compliance 是由于收到了 8 个连续的 TS1 (Compliance Receiver bit 为 1, Loopback bit 为 0),
      • 则发射 compliance test 的速度是由下面两个因素共同决定:
        • 最高通用传输
        • 在 Detect 状态检测到 Receiver 的任意一条 lane 发送 TS1 中的 Data Rate Identifiers (Symbol 4 )
      • de-emphasis 等于在 Polling.Acitve 中接收到 TS1 中的 Selectable De-emphasis bit (Symbol 4 bit 6)
    • 如果速度在 8.0 GT/s 或更高, 每条 lane 的变量 select_preset 会设置为建议发射机的值, 其值等于 Transmitter Preset 位 (EQ TS1 Symbol 6 bit[6:3], 不能时保留的编码), 并且该值发射机必须使用
    • 如果任意一条 lane 没有收到 8 个连续的 EQ TS1 (携带 Transmit Preset 信息)或者说到了 8 个连续的 EQ TS1, 但是 EQ TS1 中的 Transmit Preset 是保留的编码, 可以以特定方式使用任何受支持的发射器预设

状态跳转

图片

guest
28 评论
内联反馈
查看所有评论
Thomas

进入polling.compliance的24ms超时,该时间从哪里算做起点?polling.active?

Thomas

@重新开始 谢谢解答

Thomas

@重新开始 继续请问,“从Polling.Active开始算,就是24ms超时后”的超时是说无法正常进入polling.configuration引起的超时吗?

Alen

@重新开始 谢谢作者~强的一批 🐂🍺

Thomas

@重新开始 谢谢作者,是要所有lane都接50欧姆电阻?还是TX的一条lane接50欧姆电阻能让所有lane进pollin.compliance呀

Thomas

@重新开始 感谢花费宝贵的时间解答,我实际尝试的是没有接电阻的lane,不会发compliance码型。

Thomas

@重新开始 作者您好,继续请教两个问题。

  1. 想从Polling.compliance退出Polling状态,可以直接退出吗?还是必须先经过Electrical Idle再Polling.active再退出?
  2. 协议提到Polling.compliance进入Polling.active的条件是Enter Compliance bit从1置0;或者检测到至少1个EIOS。那如果是以后者的方法进入Polling.active,那么Enter Compliance bit还会从1置0吗?

期待您的回复,谢谢!

Thomas

@重新开始 感谢感谢!还是您理解得透彻。
也就是说因为Enter compliance bit置1进入的,想要退出必须要置0。反之Enter compliance bit本身就为0,也就不需要置0。但是DSP为什么不会因为检测到EIOS而将Enter compliance bit置0没太看懂,您方便再讲讲吗?或者说DSP会因为检测到EIOS退出Polling.compliance吗?

Thomas

@重新开始 感谢感谢!太强了!

Thomas

@重新开始 大师都谦虚。
还有个问题,就是我之前提到的,如果某条lane不接50欧姆电阻,就不会发出compliance pattern,那就是某条lane,进入了polling.compliance,而不是整个device。是这样理解吗?

Thomas

@Thomas 不对,应该是Device进入polling.compliance,lane发不出pattern是因为终端开路,默认无设备连接。

Thomas

@重新开始 好的,谢谢~

Thomas

@Thomas If the Port entered Polling.Compliance due to detecting eight consecutive TS1 Ordered Sets i… 阅读更多 »

Thomas

@重新开始 感谢作者这么晚还回复了很多。 但是SPEC的前半部分又提到,检测到8个连续的特定TS1OS会发送Compliance Pattern。所以是Modified Compliance Patt… 阅读更多 »

Thomas

@重新开始 谢谢!那比如说要做电气测试,就是除了TS1和Link Control 2 Register以外的方式(即超时)进入Polling.compliance,这时就会发用于测试的Compliance Pattern。可以这么理解吗?

Thomas

@重新开始 感谢解惑,您是目前网上唯一把Polling.compliance说出来,说得清楚的,大部分都是一笔带过。回头看我提的几个问题,都比较简单,没仔细看SPEC,哈哈。总之感谢您抽出时间解答!