2. PCIe热插拔电气基础:电源轨、参考时钟、复位与边带信号
PCIe热插拔操作的电气基础由四类关键信号构成:电源轨(Power Rails)、参考时钟(Refclk)、复位信号(PERST#)以及边带信号(WAKE#、PRSNT#)。这些信号在热插拔事件中的上电/掉电顺序、电平稳定时间以及状态跳转关系,直接决定了LTSSM能否正确完成链路训练与恢复。
2.1 电源轨:Vcc、Vaux与3.3V
PCIe设备通常需要三组独立的电源轨,分别承担主功能供电、辅助供电和边带接口供电。热插拔过程中,电源轨的建立顺序必须严格遵守规范,否则可能导致器件闩锁或信号竞争。
| 电源轨 | 标称电压 | 主要用途 | 热插拔关键要求 |
|---|---|---|---|
| Vcc | 3.3V / 12V(取决于插槽类型) | PCIe核心逻辑、SerDes收发器、链路训练 | 必须在PERST#释放前稳定到标称值的90%以上 |
| Vaux | 3.3Vaux(辅助电源) | WAKE#逻辑、PME(电源管理事件)、寄存器保持 | 在Vcc掉电后仍需维持至少100ms,用于唤醒序列 |
| 3.3V | 3.3V(边带接口电源) | PRSNT#、PERST#、参考时钟缓冲器供电 | 必须早于或与Vcc同时建立,不能滞后 |
设计要点:在热插拔控制器设计中,Vaux通常由主板上的常备电源(如+3.3V_SB)提供,不经过插槽电源开关。Vcc则通过热插拔电源开关(如TI TPS259xx或ADI LTC423x系列)控制,确保上电斜率在规范允许范围内(通常为1V/ms~10V/ms)。
电源轨建立顺序(热插入场景):
- PRSNT#1 与 PRSNT#2 先后接地 → 触发机械插入检测
- 热插拔控制器开启 Vcc 电源开关(延迟约 5~20ms 防抖)
- Vcc 电压上升至 90% 标称值(典型上升时间 1~5ms)
- PERST# 保持低电平至少 100ms(等待所有电源轨稳定)
- PERST# 释放 → 参考时钟稳定 → LTSSM 开始 Detect 状态
2.2 参考时钟(Refclk)
PCIe参考时钟(Refclk)为SerDes提供精确的100MHz差分时钟源。热插拔过程中,Refclk必须在PERST#释放前稳定输出,否则LTSSM在Detect状态无法正确检测接收端终端电阻。
- 差分对结构: Refclk+ / Refclk-,典型摆幅 0.7V~1.2V(峰峰值),共模电压约 0.3V~0.6V。
- 频率精度: ±300ppm(Gen1/Gen2),±100ppm(Gen3/Gen4/Gen5)。
- 热插拔要求: 时钟缓冲器必须支持“无毛刺”上电,在Vcc建立后100μs内输出稳定时钟。
- 展频时钟(SSC): 如启用展频,调制深度通常为 -0.5% ~ -0.75%,调制速率 30kHz~33kHz。
常见设计陷阱:部分低成本时钟缓冲器在Vcc上电过程中会产生“短脉冲”或“频率跳变”,导致下游设备误检测到时钟丢失,触发LTSSM Recovery状态。建议选用支持“输出使能延迟”的时钟芯片,或在时钟路径上增加RC滤波。
2.3 复位信号:PERST#
PERST#(PCIe Reset)是全局复位信号,低电平有效。热插拔场景下,PERST#的时序控制是电气序列的核心。
| 参数 | 最小值 | 典型值 | 说明 |
|---|---|---|---|
| Tperst-clk(PERST#释放到Refclk稳定) | 100μs | 1ms | 确保时钟已稳定 |
| Tperst-pwr(PERST#释放到Vcc稳定) | 100ms | 200ms | 等待所有电源轨建立 |
| Tperst-hld(PERST#有效保持时间) | 100ms | 200ms | 热插入后复位保持 |
| Tperst-wake(WAKE#到PERST#释放) | 100ms | 150ms | 唤醒序列专用 |
PERST# 释放条件检查清单:
- Vcc 电压 ≥ 90% 标称值且持续稳定
- Vaux 电压 ≥ 90% 标称值
- 3.3V 电压 ≥ 90% 标称值
- Refclk 输出频率在 ±300ppm 以内
- 所有电源轨的上升斜率未触发过流保护
2.4 边带信号:WAKE# 与 PRSNT#
边带信号在热插拔事件中承担检测、唤醒和状态通知功能。
2.4.1 PRSNT#(Present Detect)
PRSNT# 信号通常由插槽中的两个引脚(PRSNT#1 和 PRSNT#2)实现。在标准PCIe插槽中,这两个引脚在物理长度上比其它信号引脚短(称为“短引脚”或“先断后合”引脚),用于检测卡的插入/拔出事件。
- PRSNT#1: 连接到主板上的检测电路,通常上拉至3.3V。
- PRSNT#2: 在PCIe卡上直接接地。
- 检测原理: 当卡完全插入时,PRSNT#1 通过卡上的 PRSNT#2 接地,电平从高变低,触发热插拔控制器动作。
- 防抖时间: 硬件检测电路通常设置 5ms~20ms 的防抖滤波,防止机械抖动误触发。
2.4.2 WAKE#(Wake Signal)
WAKE# 是漏极开路信号,用于从低功耗状态(L2/L3)唤醒系统。热插拔场景中,WAKE# 在以下情况下被断言:
- 设备从 D3cold 状态需要恢复到 D0 状态
- 热插入后,设备需要通知系统电源管理控制器
- 系统处于 S3/S4/S5 睡眠状态时,设备需要唤醒系统
WAKE# 电气特性: 漏极开路输出,需要外部上拉电阻(典型值 10kΩ 至 3.3Vaux)。在 Vaux 有效时即可工作,不依赖 Vcc。WAKE# 脉冲宽度至少需要 100ms 以确保被系统控制器可靠采样。
2.5 电气序列总结
完整的PCIe热插拔电气序列可归纳为以下步骤,每个步骤都对应LTSSM的特定状态:
| 步骤 | 事件 | 信号变化 | LTSSM状态 |
|---|---|---|---|
| 1 | 卡插入插槽 | PRSNT#1 接地(低电平) | —(未上电) |
| 2 | 热插拔控制器检测到插入 | 使能 Vcc 电源开关 | — |
| 3 | Vcc、Vaux、3.3V 建立 | 电源轨上升至 90% 标称值 | — |
| 4 | Refclk 稳定输出 | 差分时钟幅度达标 | — |
| 5 | PERST# 释放(高电平) | 复位信号撤销 | Detect |
| 6 | LTSSM 开始链路训练 | 发送 TS1/TS2 训练序列 | Detect → Polling |
| 7 | 链路训练完成 | 进入 L0 状态 | L0 |
热拔出场景注意事项:当卡被拔出时,PRSNT#1 和 PRSNT#2 断开,热插拔控制器应立即关闭 Vcc 电源开关(典型响应时间 < 1μs),同时将 PERST# 拉低,防止 SerDes 在电源掉电过程中发送无效数据。WAKE# 在拔出事件中不应被断言,除非系统需要进入低功耗状态。