PCIe(Peripheral Component Interconnect Express)的上电时序是硬件设计中非常关键的一环,严格遵守时序规范是确保设备正常识别、稳定运行的前提。
PCIe的上电时序主要遵循 PCI Express Card Electromechanical Spec (CEM) 规范。以下是关于PCIe上电时序的详细介绍,包括电源轨定义、时序阶段、关键参数以及热插拔的特殊处理。
1. PCIe 涉及的电源轨
在介绍时序之前,需要明确PCIe插槽或设备通常涉及的主要电源轨:
- 12V (12Vaux12V_{aux}12Vaux / 12V12V12V): 主要用于驱动大功率设备(如显卡)或作为辅助电源。
- 3.3V (3.3V3.3V3.3V): 主电源轨,用于设备核心逻辑、配置空间等。
- 3.3Vaux (3.3Vaux3.3V_{aux}3.3Vaux): 辅助电源,用于支持唤醒功能,即使在系统处于低功耗状态(如D3cold)时也必须保持供电。
- 内部电源 (VddV_{dd}Vdd): 设备内部逻辑使用的电源(如1.8V, 1.5V, 1.2V等),通常由板载LDO或DC-DC从3.3V转换而来。
2. 上电时序流程图
PCIe CEM规范定义了严格的电源开启顺序。典型的上电时序流程如下:
PCIe设备 PCIe插槽 电源管理逻辑 系统电源/主板 PCIe设备 PCIe插槽 电源管理逻辑 系统电源/主板 阶段 1: 电源启动 阶段 2: 电源稳定与复位 电源稳定时间 阶段 3: 链路训练 开启系统电源 输出 12V 输出 3.3V 输出 3.3Vaux 电压上升 (斜率需符合规范) 释放 PERST 参考时钟 就绪 检测接收端 链路训练 开始 链路建立
3. 详细时序步骤解析
第一阶段:主电源上电
规范要求电源轨之间没有严格的先后顺序,但通常建议先稳定高压轨或同时上电,以避免闩锁效应。
- 12V12V12V 上电: 对于标准插槽,12V通常最先或与3.3V同时上电。
- 3.3V3.3V3.3V 上电: 主逻辑电源。
- 3.3Vaux3.3V_{aux}3.3Vaux 上电: 辅助电源。如果系统支持唤醒,此电源可能一直存在,或者在主电源上电前就已经稳定。
第二阶段:电源稳定与复位
这是最关键的阶段。电源必须稳定之后,复位信号才能撤销。
- 电源斜率 : 电压上升必须单调,不能有回沟。上升时间通常要求在 0.1ms 到 20ms 之间。
- PERST# (Power Good/Reset) :
- 这是PCIe的全局复位信号。
- 在电源稳定之前,主机必须将 PERST# 保持为低电平(复位状态)。
- 当所有电源轨稳定后,主机将 PERST# 拉高。
第三阶段:链路训练
PERST# 拉高后,物理层链路开始工作。
- 参考时钟: 主机提供 100MHz 差分参考时钟。
- 检测: 设备检测接收端的终端电阻。
- 训练: 开始发送 TS1/TS2 序列,协商链路宽度和速率。
4. 关键时序参数
根据 PCIe CEM 规范,以下是几个核心的时间参数(具体数值请参考对应版本的规范,以下为典型值):
| 参数符号 | 描述 | 最小值 | 最大值 | 备注 |
|---|---|---|---|---|
| TPower_ValidT_{Power\_Valid}TPower_Valid | 电源电压从10%上升到90%的时间 | 0.1 ms | 20 ms | 上升沿必须单调 |
| TPV_PERSTT_{PV\_PERST}TPV_PERST | 电源稳定到PERST#解除复位的时间 | 100 ms | - | 最关键的参数 |
| TPERST_CLKT_{PERST\_CLK}TPERST_CLK | PERST#解除到参考时钟稳定的时间 | - | - | 通常时钟在复位前或复位时已稳定 |
| TPERST_ConfigT_{PERST\_Config}TPERST_Config | 复位后到配置空间可访问的时间 | - | - | 取决于设备初始化速度 |
重点说明:
- TPV_PERSTT_{PV\_PERST}TPV_PERST (Power Valid to PERST#) : 规范要求电源稳定后,必须等待至少 100ms 才能将 PERST# 拉高。这是为了给PCIe设备内部电容充电和内部控制器初始化留出足够时间。如果这个时间太短,设备可能无法完成内部初始化,导致链路训练失败。
5. 热插拔时的上电时序
热插拔对时序要求更为严格,因为涉及到在系统运行时插入/拔出设备。
- 预充电: 插槽的长针(电源针)和短针(信号针)设计确保电源先接通。
- 电源隔离: 热插拔控制器会检测卡插入,然后开启MOSFET给插槽供电。
- 浪涌电流控制: 必须限制上电瞬间的浪涌电流,防止拉垮系统电源。
- 复位逻辑: 插入检测 -> 电源开启 -> 等待稳定 -> 拉高 PERST#。
6. 常见问题与调试建议
如果在实际设计中遇到PCIe设备无法识别或频繁掉线,建议检查以下几点:
- PERST# 时序不足: 使用示波器测量 3.3V 稳定到 PERST# 拉高的时间,确认是否满足 100ms 的要求。很多BIOS设置或CPLD逻辑中可以调整这个延时。
- 电源质量: 3.3V 或 12V 上是否有纹波或跌落。PCIe设备在链路训练切换速率时会有瞬态大电流,如果电源响应慢,会导致电压跌落引起复位。
- 时钟稳定性: 检查 100MHz 参考时钟的幅度和抖动。时钟必须在 PERST# 拉高之前稳定。
- 上电顺序冲突: 某些设备可能要求内部核心电源先于接口电源上电,这需要查阅具体芯片的Datasheet,可能需要调整板级电源设计。
总结
PCIe上电时序的核心在于**"电源先稳定,复位后解除"**。
- 核心公式 :TPowerOn→Delay(>100ms)→PERST#=High→LinkTrainingT_{PowerOn} \rightarrow Delay(>100ms) \rightarrow PERST\#=High \rightarrow Link TrainingTPowerOn→Delay(>100ms)→PERST#=High→LinkTraining。
- 设计要点:确保电源单调上升,控制好上电浪涌电流,并严格遵守 PERST# 相对于电源稳定的延时要求。