PCIe – LTSSM Detect

detect 状态

  • 目的 : 检查对端什么时候存在
  • 存在的子状态 : Detect.QuietDetect.Active

Detect.Quiet

该子状态是任何复位(功能级别复位除外)或上电事件后的初始状态,必须在复位后 20 毫秒内进入。

处于该状态时

  • 发射机电压处于 EI (Electrical Idle) 状态
  • 2.5 GT/s 为该状态的操作速度,如果从其它状态跳到该状态时(如从 Recovery 跳转到 Detect),速度不是 2.5 GT/s,则必须等待 1ms,在此期间,速度要切回到 2.5 GT/s
    • 这不会影响 TS1/2 中建议的速度
  • 物理层状态位 (LinkUp = 0,内部的状态位) 会通知数据链路层,链接不可用。当 Link Training 完成时,LinkUp = 1,从而通知数据链路层和流控制初始化开始其链路初始化部分。

寄存器操作

  • Link Status 2 寄存器中的下列 field 清 0
    • bit[1] : Equalization 8.0 GT/s Complete
    • bit[2] : Equalization 8.0 GT/s Phase 1 Successful
    • bit[3] : Equalization 8.0 GT/s Phase 2 Successful
    • bit[4] : Equalization 8.0 GT/s Phase 3 Successful
  • 16.0 GT/s Status 寄存器中的下列 field 清 0
    • bit[0] : Equalization 16.0 GT/s Complete
    • bit[1] : Equalization 16.0 GT/s Phase1 Successful
    • bit[2] : Equalization 16.0 GT/s Phase2 Successful
    • bit[3] : Equalization 16.0 GT/s Phase3 Successful
  • 32.0 GT/s Status 寄存器中的下列 field 清 0
    • bit[0] : Equalization 32.0 GT/s Complete
    • bit[1] : Equalization 32.0 GT/s Phase1 Successful
    • bit[2] : Equalization 32.0 GT/s Phase2 Successful
    • bit[3] : Equalization 32.0 GT/s Phase3 Successful

变量操作

  • 以下变量清零
    • LinkUp (物理层链路是否已经就绪)
    • use_modified_TS1_TS2_Ordered_Set
    • 下列变量在 PCIe 2.0以下不会存在
    • directed_speed_change
      • 1 : 设备希望更改数据传输速度
      • 0 : 设备不希望更改数据传输速度
    • upconfigure_capable
      • 跟 Link Upconfigure Capability 有关,当设备发送 TS2 (Symbol 4 bit[6] : Link Upconfigure Capability 为1) 且收到 8 个连续的 TS2 (Link Upconfigure Capability 为1)后,会把 upconfigure_capable 置为1
      • Link Upconfigure Capability 表示当一个较宽的链路在减少链路宽度后,是否有能力重新恢复到原先较宽的链路宽度。1 为有能力,0 为无能力
    • idle_to_rlock_transitioned
      • idle 向 Recovery.RcvrLock 跳转了多少次
      • idle 包括 Recovery.Idle 或者 Configuration.Idle
    • select_deemphasis
      • 对 Downstream port 来讲,由硬件决定
      • 对 Upstream port 来讲,变量使用 Link Control 2 寄存器中保存的 Selectable Preset/De-emphasis (bit[6])值
    • equalization_done_8GT_data_rate
    • equalization_done_16GT_data_rate
    • equalization_done_32GT_data_rate
    • perform_equalization_for_loopback

状态跳转

进入到 Detect.Active

  • 12 ms 超时或者任意一条 lane 没有处于 EI 状态。
    • note : 任意一条 lane 没有处于 EI 状态,可能是对端的 LTSSM 已经进入了其它状态

Detect.Active

处于该状态时

  • 发射机在所有未配置过 (可能就是 link,lane 这些还没有配置) 的 lane (这些 lane 必须可以形成一条或者多条) 上执行 Receiver Detection Sequence (接收机检测序列)
  • 如果不是所有 lane 都检测到 Receiver, 那么会等待 12 ms 后,再次发送接收机检测序列,如果连续两次检测到的 Receiver 都一样,则会跳转到下一个状态 (除非两次检测到的 Receiver 都是0)

状态跳转

进入 Polling

  • 在所有未配置过的 lane 都检测到接收机 (Receiver)
  • 至少一条 lane 检测到 Receiver,但是不是所有未配置的 lane 都检车到 Receiver, 12 ms 后,再次检测到 Receiver lane 同第一次一样
    • 没有检测到 Receiver 的 lane 必须:
      • 如果可以跟新的 LTSSM 关联 (可选的特性),则要与新的 LTSSM 关键。
      • 所有 lane 都不能够与新的 LTSSM 关联的话,则这些 lane 必须要处于 ei 状态
      • 在 LTSSM 重新回到 Detect 状态时,这些 lane 必须从新跟 LTSSM 关联
      • 在向 ei 状态转变时不需要发送 EIOS,此时就算发了对方也收不到
    • note : 有的 lane 检测到 Receiver, 有的 lane 没有检测到 Receiver, 可能有的 lane 很快就检测到了,有的 lane 检测 Receiver 就比较慢,所以需要 12 ms 后在检测一次,确保就是这些 lane 连上了东西 (不一定是接收机,也有可能是 50 欧姆电阻等等)

进入 Detect.Quiet

  • 任意一条 lane 都没有检测到 Receiver
    • note : 即所有 lane 都没有检测到 Receiver,没有检测到 Receiver, 发东西也没用,就不会往下一个状态跳转
  • 12 ms后, 再次检测到 Receiver 的 lane 同上次不一样
    • note : 如果再次检测到的 Receiver 还是不一样,则还需要等待 12 ms后,发送接收机检测序列,确保 lane 上连了东西的都正确的找出来了
guest
0 评论
内联反馈
查看所有评论