PCIe引脚PRSNT与热插拔
热插拔的基本目的是要让PCIe设备按照规定的顺序、原则,从系统中移除或插入到系统中来,并能正常的工作,且不影响系统的正常运行。事实上,PCIe“热插拔”的关键目的就是为前面面所提到的系统RAS服务的,是提升系统RAS能力的非常重要的手段!
热插拔有三个重要的功能:
- 在线替换发生故障的PCIe设备。不需要关闭、重启系统。
- 热插拔器件,系统及其他功能服务继续运行,不受影响。
- 热插拔PCIe设备的相关驱动/软件自动加载/卸载。
Spec中对于热插拔是这样定义的:
Hot-Plug |
Insertion and/or removal of a card into an active backplane or system board as defined in PCI Standard Hot-Plug Controller and Subsystem Specification, Revision. 1.0. No special card support is required. |
Hot swap |
Insertion and/or removal of a card into a passive backplane. The card must satisfy specific requirements to support Hot swap. |
注意,这里有两个相关概念,前面我们讲的热插拔,其实是广义的“热插拔”。这里的Hot-Plug,为了方便,我们叫做PCIe热插拔,也就是我们现在及后面将要讨论的内容。
Hot Swap,即热交换,也叫热切换,主要指的是CPCI(Compact PCI,紧凑型PCI)领域所使用的。关于 Hot Swap,CPCI有专门定义的一套规范,叫《CompactPCI® Hot Swap Specification》,也有中文版本,有兴趣的可以自行研究。
如无特别的指出,我们后续所说的热插拔都是指的是PCIe Hot-Plug。
顺便说一下:在PCI的年代,就已经提出了PCI的相关热插拔规范。2001年,PCI定义了PCI标准热插拔控制器(SHPC:PCI Standard Hot-plug Controller and Subsystem Specification)规范,PCIe沿用了这套规范。
硬件上看,一个新的PCIe设备插入系统,肯定是需要硬件上支持识别到这个插入动作的。因此,Spec定义了一个在位(Present)的pin脚,硬件上用作判断卡是否插入。卡插入时,这个pin被拉低。当然,因为PCIe金手指的长度较长,插入卡时有可能前后高低差异。因此,需要有前后多个present pin来确保金手指完全插入。
PRSNT与热插拔
如图 1所示,PCIe背板卡槽的PRSNT1#接地,PRSNT2#连接到热插拔控制器,并上拉。PCIe板卡的PRSNT#1信号连接到距离其最远的PRSNT2#引脚(PRSNT2#可能有多个)【2】。需要注意的是,PRSNT引脚比其它引脚短1mm,这样可以保证插入和拔出时有1ms的时间差,从而确保上电、掉电时序符合规范。当板卡插入时,其它引脚接触完成后,PRSNT#1先被拉低,PRSNT#2最后被拉低,然后PCIe背板的热插拔控制器认为板卡已被完全插入,开始启用相关信号。
图 1 PRSNT信号与热插拔
PRSNT硬件设计
当硬件需要支持热插拔时,PRSNT1#、PRSNT2#引脚必须按照规范连接,如果不支持热插拔(不用于服务器的板卡一般都不支持)则必须将PRSNT2#接地,如果悬空会导致背板插槽的PRSNT2#无法被拉低,从而导致板卡无法正常工作(仅出现于支持热插拔的PCIe背板)。
参考
【1】 PCI Express® Card Electromechanical Specification Revision 2.0
【2】 https://pinouts.ru/Slots/pci_express_pinout.shtml
【3】 https://www.pcietech.com/367.html/