某些特殊的应用场合可能要求PCIe设备能够以高可靠性持续不间断运行,为此,PCIe总线采用热插拔(Hot Plug)和热切换(Hot Swap)技术,来实现不关闭系统电源的情况下更换PCIe卡设备。

注:本文将简单地介绍一下PCIe总线的热插拔机制,关于热切换(Hot Swap),请参考PCIe Spec的相关章节。

 

PCIe总线的热插拔主要指的是PCIe卡设备的热插拔,以及相关的实现机制等。PCIe卡有两个用于热插拔机制的边带信号——PRSNT1#和PRSNT2#。PCIe卡设备上的这两个信号之间是短路的,PCIe插槽的PRSNT1#被固定地连接到地,PRSNT2#则被上拉。且这两个信号的金手指长度要比其他的信号的金手指长度要短一点。如下图所示,当PCIe卡设备未被完全插入插槽时,插槽的PRSNT2#信号由于上拉的作用,将一直处于高点平状态。当PCIe卡设备被完全插入插槽后,插槽上的PRSNT2#信号则会被PCIe卡设备的短路线连接到地,从而使得其变为低电平。换句话说,从插槽的角度看,当PRSNT2#位高电平时,则认为PCIe卡设备未能正确插入或者无PCIe卡设备;当PRSNT2#位低电平时,表明PCIe卡设备被正确地插入插槽中。

java 热插拔功能设计模式 什么是热插拔_PCIE

注:PCIe总线除了有一个Base Spec之外,还有一个关于PCIe卡设备的Spec——PCIe Card ElectroMechanical Spec(CEM)。

与PCI总线不同,PCIe总线采用的是点到点的连接(Point-to-Point Connections),因此其并不像PCI总线那样需要用于卡设备的隔离逻辑(Isolation Logic),但是每个端口(桥设备中的,如Root和Switch)都必须包含一个独立的热插拔控制器(Hot Plug Controller),如下图所示:

java 热插拔功能设计模式 什么是热插拔_热插拔_02

当然,热插拔不仅仅是硬件的事,其需要软硬件协同实现。要想实现热插拔功能,操作系统、主板热插拔驱动器、PCIe卡设备驱动以及PCIe卡硬件功能都必须支持热插拔,缺一不可。从PCIe卡设备硬件功能的角度来看,其需要支持Quiesce命令、Pause命令(可选)、Start命令和Resume命令。

桥设备(Switch等)中还需要支持热插拔控制器(Hot Plug Controller),如下图所示,这里就不详细介绍了。具体请参考PCIe Spec相关章节内容。

java 热插拔功能设计模式 什么是热插拔_热插拔_03

配置空间中,与热插拔相关的寄存器如下图所示:

java 热插拔功能设计模式 什么是热插拔_pice是否可以热插拔_04