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/
- Linux下应用程序如何取得U盘插拔消息
- 基于Cy68013的USB设备在VC程序中热插拔的实现
- PHP反射机制实现插件的可插拔设计
- 经验分享:解决u盘的直插拔
- Linux的suspend机制的设计原理(续)--cpu的热插拔
- USB充电插拔与USB Debugging connect提示
- 添加sdcard插拔事件的监听广播
- 状态栏显示耳机插拔图标
- USB 3G卡热插拔那些事5------PPP协议
- ELMAH——可插拔错误日志工具
- linux获取网线插拔状态的实现
- 我心中的核心组件(可插拔的AOP)~第二回 缓存拦截器
- 我心中的核心组件(可插拔的AOP)~调度组件quartz.net
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)--AOP编程
- Linux可插拔认证模块的基本概念与架构
- Android 4.x耳机插拔检测实现方法
- MFC中动态检测串口热插拔的实现
- 解决Win7下使用waveIn系列函数录音时插拔麦克风时的死锁问题
- Oracle Database 12c可插拔数据库应用案例
- ELMAH——可插拔错误日志工具