3. 热插拔电气序列定义

热插拔(Hot-Plug / Hot-Remove)是 PCIe 协议的核心能力之一,允许在系统带电运行状态下插入或移除 PCIe 设备,而不会损坏硬件或导致系统崩溃。本章聚焦于热插拔电气序列中的三个关键要素:PRSNT1/PRSNT2 信号机制、WAKE# 信号行为以及热插拔时序要求。理解这些电气序列是后续参数调优与链路训练验证的基础。

3.1 PRSNT1 / PRSNT2 信号机制

PRSNT1 和 PRSNT2 是 PCIe 连接器上用于物理检测卡是否存在的专用引脚。它们不参与数据传输,而是通过电气连接状态向系统报告插槽状态。

关键概念: PRSNT1 和 PRSNT2 在连接器上通常短接在一起。当卡完全插入时,这两个引脚通过卡上的 PCB 走线形成回路;当卡未插入或未完全插入时,回路断开。

3.1.1 引脚定义与连接方式

引脚 方向(主板侧) 典型连接 功能
PRSNT1 输出(通常接地) 主板侧接地 提供参考地电平
PRSNT2 输入(上拉至 Vaux) 主板侧通过电阻上拉至 3.3Vaux 检测卡插入状态

在 PCIe 卡上,PRSNT1 和 PRSNT2 通过一条短走线直接相连。当卡插入时,主板侧的 PRSNT2 引脚通过卡上的走线连接到 PRSNT1(地),因此 PRSNT2 被拉低。系统通过检测 PRSNT2 的电平变化来判断卡的插入或移除。

3.1.2 信号检测逻辑

  • 卡未插入: PRSNT2 被上拉电阻拉高至 3.3Vaux,系统检测到高电平,认为插槽为空。
  • 卡完全插入: PRSNT2 通过卡上的短接线连接到 PRSNT1(地),电平被拉低至 GND,系统检测到低电平,触发热插拔事件。
  • 卡部分插入: 回路未完全建立,PRSNT2 可能处于不确定状态(高阻或抖动),系统应设计去抖逻辑以避免误触发。
设计提示: PRSNT2 的上拉电阻值通常选择在 10kΩ 至 100kΩ 之间,需平衡功耗与抗噪能力。过小的电阻会增加待机功耗,过大的电阻则容易受噪声干扰。

3.2 WAKE# 信号行为

WAKE# 信号是 PCIe 热插拔与电源管理中的关键带外信号,用于在设备处于低功耗状态(如 D3cold)时,主动唤醒系统或重新建立链路。

3.2.1 WAKE# 信号特性

  • 电平触发: WAKE# 是低电平有效信号,由设备驱动拉低以请求唤醒。
  • 开漏/开源输出: 设备端使用开漏或开源结构,多个设备可以共享同一 WAKE# 线。
  • 上拉至 Vaux: 主板侧将 WAKE# 通过电阻上拉至 3.3Vaux,确保空闲状态为高电平。
  • 带外信号: WAKE# 不依赖主参考时钟(Refclk)或链路训练状态机,可在主电源关闭时工作。

3.2.2 WAKE# 时序行为

当设备需要唤醒系统时,WAKE# 信号需满足以下时序要求:

  1. 断言阶段: 设备将 WAKE# 拉低至少 100 ns,确保系统侧可靠检测。
  2. 保持阶段: 设备保持 WAKE# 低电平,直到系统响应(如恢复主电源或开始链路训练)。
  3. 释放阶段: 系统确认唤醒后,设备释放 WAKE#,信号由上拉电阻恢复高电平。
注意: 在热插拔场景中,WAKE# 信号也可能用于通知系统新插入的设备需要初始化。设计时需确保 WAKE# 的电气特性(如上升/下降时间、电压摆幅)符合 PCIe Base Spec 要求,避免信号反射或振铃导致误触发。

3.3 热插拔时序要求

热插拔操作必须遵循严格的时序序列,以确保电源、信号和机械结构的安全。时序要求分为插入序列和移除序列两部分。

3.3.1 插入时序序列

下图展示了 PCIe 设备插入过程中的关键电气事件顺序:

PCIe 热插拔插入时序序列 PCIe 热插拔插入时序序列 时间 机械接触 PRSNT 检测 电源稳定 Refclk 稳定 训练 说明: 1. 机械接触:卡插入连接器,地线和长引脚先接触。 2. PRSNT 检测:PRSNT1/2 回路建立,系统检测到卡存在。 3. 电源稳定:主电源(3.3V/12V)建立并稳定至容差范围内。 关键时序参数 T1: 机械接触 → PRSNT 检测延迟 ≤ 10 ms T2: PRSNT 检测 → 电源稳定 ≤ 100 ms T3: 电源稳定 → Refclk 稳定 ≤ 10 ms T4: Refclk 稳定 → 链路训练开始 ≤ 1 ms

3.3.2 移除时序序列

设备移除时,时序要求更为严格,需确保在电源和信号断开前完成数据保护:

  1. 系统检测 PRSNT 变高: 卡开始拔出,PRSNT1/2 回路断开,PRSNT2 被上拉至高电平。
  2. 系统发起热插拔中断: 通知软件层准备移除设备。
  3. 软件完成 I/O 操作: 刷新 pending 事务,停止 DMA,释放资源。
  4. 系统关闭链路电源: 断开主电源和参考时钟。
  5. 机械断开: 卡完全拔出,所有引脚安全分离。
关键约束: 从 PRSNT 变高到电源实际断开之间,必须保证足够的保持时间(通常 ≥ 500 ms),以确保软件层有足够时间完成数据 flush 和状态保存。此参数在 PCIe CEM 规范中有明确定义。

3.4 电气序列参数调优要点

在实际硬件验证中,以下参数需要重点关注和调优:

参数 影响 调优方向
PRSNT2 上拉电阻 检测响应时间、抗噪性 降低电阻可加快响应,但增加功耗;需在 10kΩ~47kΩ 间平衡
WAKE# 最小脉冲宽度 唤醒可靠性 确保 ≥ 100 ns,建议留 20% 余量至 120 ns
电源上升斜率 器件上电顺序、浪涌电流 3.3V 和 12V 电源上升时间建议控制在 0.1 ms ~ 10 ms
PRSNT 去抖时间 防误触发 硬件去抖 5 ms ~ 20 ms,软件去抖 50 ms ~ 100 ms
保持时间(移除时) 数据完整性 从 PRSNT 变高到电源关断 ≥ 500 ms

3.5 链路训练前的电气准备

在链路训练开始之前,必须确保以下电气条件全部满足:

  • 主电源稳定: 3.3V 和 12V 电源电压在规范容差内(±5%),纹波 ≤ 50 mVpp。
  • 参考时钟稳定: Refclk 频率精度 ±300 ppm,抖动满足 PCIe Gen 规范要求。
  • PRSNT 状态确认: 系统已通过 PRSNT2 电平确认卡存在,并完成去抖处理。
  • WAKE# 释放: 如果设备之前处于 D3cold 状态,WAKE# 信号必须已释放至高电平。
  • PERST# 释放: 复位信号 PERST# 必须在电源稳定后释放,释放时序需满足 Tperst-clk 要求(Refclk 稳定后至少 100 µs 再释放 PERST#)。
验证建议: 使用示波器同时捕获 PRSNT2、PERST#、主电源和 Refclk 波形,测量各事件之间的延迟是否满足规范。重点关注 PRSNT2 下降沿到 PERST# 释放之间的时间窗口,这是热插拔链路训练能否成功启动的关键。

3.6 常见问题与避坑

  • PRSNT 抖动导致误触发: 卡插入时机械接触可能产生多次弹跳,硬件必须增加施密特触发器或 RC 滤波去抖。
  • WAKE# 信号竞争: 多设备共享 WAKE# 线时,需确保开漏驱动能力足够,避免信号无法拉低。
  • 电源时序违反: 3.3Vaux 必须在主电源之前稳定,否则设备可能进入未知状态。
  • 保持时间不足: 快速拔出卡时,若软件未及时响应,可能导致数据丢失或系统挂死。