PCIe – LTSSM Polling
Polling 状态
- 目的 : 实现 bit lock (位锁定),Symbol lock (符合锁定) 和 Lane polarity (lane 极性反转)
- 存在的子状态 :
Polling.Active
,Polling.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.Compliance
- Enter Compliance (Link Control 2 寄存器的 bit[4]) 为 1
- 如果 Enter Compliance 位在进入 Polling.Active 前就已经为 1,那么在 Polling.Active 时不允许发送 TS1, 直接进入 Polling.Compliance
- 24ms 超时后,满足其一
- 不是所有预设的 lane 都退出了 EI, 比如 X8 的插槽设备插上了 x4 的设备,有一条 lane 没有退出 EI, 或者 4 条都没有退出 EI,也是符合不是所有的条件
- 在 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
- 在 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
- 进入 Polling.Active 后,至少在 detect 状态检测到 Receiver 一组预设的 lane 退出了 EI 状态
- 预设的 lane, 可以是在 detect 状态检测到 receiver 的所有 lane, 比如 x8 的插槽,插上了 x4 的设备,有设备的 4 条 lane 就可以是预设的 lane
- 能收到 TS 的 lane 一定是退出了 EI 状态。 但是退出了 EI, 不一定能收到 TS, 收到的 TS 也不一定对
- 在 Detect 状态检查到 Recevier 的任意一条 lane 收到 8 个连续的 TS, 可能有些 lane 不稳定,虽然在 detect 能检测到,但是无法正常的发送(对端 tx 有问题)或者接受(本端 rx 有问题) TS,在 Polling.Active 必须传输 1024 个 TS1, 收到的 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)
- 则发射 compliance test 的速度是由下面两个因素共同决定: