PCIe – LTSSM Polling

Polling 状态

  • 目的 : 实现 bit lock (位锁定),Symbol lock (符合锁定) 和 Lane polarity (lane 极性反转)
  • 存在的子状态 : Polling.Active, Polling.CompliancePolling.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.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.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 也不一定对

进入 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)

状态跳转

进入 Configuration

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

进入 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)
Subscribe
提醒
guest
11 评论
最旧
最新
内联反馈
查看所有评论
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码型。