LTSSM 概述

LTSSM(Link Training and Status State Machine)是PCIe链路层的核心状态机,负责链路的初始化、训练、电源管理和错误恢复。每条PCIe链路的两端各有一个独立的LTSSM实例,它们协同工作以建立和维护可靠的通信链路。

状态数量

12个主要状态

多个子状态

主要功能

链路初始化与训练

速度/宽度协商

电源管理

L0/L0s/L1/L2 低功耗状态

ASPM支持

状态机全景图

配置状态
Detect S0
Polling S1
Configuration S2
工作状态
L0 S3
电源管理
L0s S4
L1 S5
L2 S6
恢复状态
Recovery S7
Hot Reset S8
Disable S9
Loopback S10
特殊状态
Tx Idle S11
配置流程 正常工作 电源管理 错误恢复

状态详解

Detect 状态

这是LTSSM的初始状态和复位后的入口状态,主要任务是检测链路对端是否存在设备。

子状态

Detect.Quiet

初始子状态,检测接收器是否检测到差分信号。如果没有检测到任何信号且超时(12ms),则进入Detect.Active。

Detect.Active

向对端发送检测脉冲,通过检测接收端的阻抗来判断对端是否有设备连接。如果检测到设备,进入Polling状态;否则返回Detect.Quiet。

关键行为

  • 发送端发送电气空闲序列
  • 接收端检测差分信号的存在
  • 使用接收器终端检测机制判断连接状态
  • 支持多Lane链路的逐Lane检测

时序要求

参数 最小值 典型值 最大值
Detect.Quiet 超时 12 ms - -
Detect.Active 超时 - - 12 ms

Polling 状态

Polling状态的主要任务是建立符号锁定(Symbol Lock)和Lane极性对齐,完成训练序列(TS)的交换。

子状态

Polling.Active

发送训练序列TS1/TS2,请求对端进行链路训练。接收端尝试建立符号锁定。

Polling.Compliance

可选状态,用于发送符合性测试码型。主要用于工厂测试和验证。

Polling.Configuration

发送TS2序列确认链路参数,准备进入Configuration状态。

训练序列 (Training Sequence)

TS1 用于链路训练,包含链路号和Lane号
TS2 确认训练完成,协商链路参数
字段 大小 描述
COM 1 字节 逗号字符,用于符号对齐
Link Number 1 字节 链路编号
Lane Number 1 字节 Lane编号
Num of FTS 1 字节 L0s退出所需的FTS数量
Data Rate 1 字节 支持的数据速率

Configuration 状态

Configuration状态完成链路宽度协商、Lane反转和Lane对齐等配置任务。

子状态

Configuration.Linkwidth.Start

开始链路宽度协商,发送带有链路号信息的TS1序列。

Configuration.Linkwidth.Accept

接受对端提议的链路宽度配置。

Configuration.Lanenum.Wait

等待Lane编号分配完成。

Configuration.Lanenum.Accept

接受Lane编号分配。

Configuration.Complete

配置完成,准备进入L0状态。

Configuration.Idle

发送空闲序列,等待进入L0。

Lane协商过程

1 两端各自通告最大Lane数
2 协商实际使用的Lane数(取较小值)
3 检测Lane极性并反转(如需要)
4 Lane对齐和Deskew
5 进入L0正常工作状态

L0 状态

L0是链路的正常工作状态,所有数据传输都在此状态下进行。在L0状态下,链路可以全速传输数据包。

L0状态特性

  • 全速数据传输(根据协商的速度)
  • 支持所有TLP和DLLP传输
  • 正常的流量控制操作
  • 可以进入L0s/L1低功耗状态
  • 错误检测和报告功能激活

状态转换

目标状态 触发条件 说明
L0s 发送端电气空闲 ASPM L0s进入
L1 收到PM进入请求 软件发起的电源管理
Recovery 错误或速度切换 链路恢复或速率改变
Disable 软件命令 链路禁用
Hot Reset 软件复位 热复位

Recovery 状态

Recovery状态用于链路恢复和速度切换。当链路发生错误或需要改变数据速率时进入此状态。

进入Recovery的场景

速率切换

从Gen1/Gen2切换到更高速率

链路重训练

错误恢复、信号质量下降

带宽切换

改变Lane数量

子状态

Recovery.RcvrLock

接收器重新建立符号锁定。

Recovery.RcvrCfg

接收器配置,交换TS1/TS2。

Recovery.Idle

发送空闲序列,准备返回L0。

Recovery.Speed

速率切换,改变数据速率。

Recovery.Equalization

均衡调整(Gen3+),优化信号质量。

均衡 (Equalization) - Gen3+

从Gen3开始,链路恢复需要执行均衡过程,调整发送端的预加重和去加重参数以优化信号完整性。

Phase 0 初始化
Phase 1 最小预加重
Phase 2 调整预加重
Phase 3 确认优化值

电源管理状态

PCIe定义了多个低功耗状态,支持不同的功耗和唤醒延迟级别。

L0s

功耗降低: ~90% 退出延迟: 数微秒

轻量级低功耗状态,发送端进入电气空闲。唤醒速度最快,适合频繁唤醒场景。

进入流程: 发送FTS → 电气空闲

L1

功耗降低: ~99% 退出延迟: 数十微秒

深度低功耗状态,需要两端协商进入。支持ASPM L1和软件控制的L1。

进入流程: PM请求 → 确认 → 电气空闲

L2

功耗降低: ~99.9% 退出延迟: 毫秒级

最低功耗状态,链路完全关闭,仅保留辅助电源。需要外部唤醒信号。

进入流程: L1 → PME_Turn_Off → L2

ASPM (Active State Power Management)

ASPM是一种硬件自动的电源管理机制,在链路空闲时自动进入低功耗状态。

ASPM级别 描述 功耗节省
L0s Only 仅使用L0s 较低
L1 Only 仅使用L1 较高
L0s + L1 组合使用 最优平衡

交互式状态机模拟器

通过此模拟器了解LTSSM的状态转换过程。点击状态节点或触发按钮来模拟状态转换。

Detect

状态日志

系统启动,进入Detect状态

典型场景分析

设备插入流程

T+0ms 设备插入,Detect.Quiet检测到信号
T+1ms 进入Detect.Active,发送检测脉冲
T+5ms 确认设备存在,进入Polling
T+25ms 符号锁定完成,发送TS1/TS2
T+50ms 进入Configuration,协商链路参数
T+60ms 进入L0,链路可用

速率升级流程

T+0μs 软件发起速率切换请求
T+1μs 进入Recovery.RcvrLock
T+24μs 交换TS1通告新速率
T+48μs 进入Recovery.Speed,切换PLL
T+100μs 重新锁定,执行均衡
T+200μs 均衡完成,返回L0