前言本文主要讲述PCIe热插拔机制,通过图形方式方便读者快速掌握。
一、概述
如果在PCIe设备不支持热插拔的条件下,在不断电的情况下插拔一块PCIe SSD时,很可能会对主板或PCIe插槽造成损毁。
为了防止意外的发生,PCIe Spec设计了一种“No Surprise”热插拔机制,即,当用户要插拔PCIe设备时,必须先通知系统软件做好准备,然后通过指示灯告知用户热插拔的状态。
二、原理详解
2.1 热插拔原理总结
PCIe总线的热插拔主要指的是PCIe卡设备的热插拔以及相关的实现机制等。
如图所示,上方部分PCIe卡有两个用于热插拔机制的引脚——PRSNT1#和PRSNT2#。PCIe卡设备上的这两个信号之间是短路的,下方部分PCIe插槽的PRSNT1#被固定地连接到地,PRSNT2#则被上拉。且PCIe卡上的这两个信号的金手指长度要比其他的信号的金手指长度要短一点。当PCIe卡设备未被完全插入插槽时,插槽的PRSNT2#信号由于上拉的作用,将一直处于高电平状态。当PCIe卡设备被完全插入插槽后,PRSNT1#与插槽上接地的PRSNT1#连接,同时插槽上的PRSNT2#信号则会被PCIe卡设备的短路线连接到地,从而使得其变为低电平。换句话说,从插槽的角度看,当PRSNT2#位高电平时,则认为PCIe卡设备未能正确插入或者无PCIe卡设备;当PRSNT2#位低电平时,表明PCIe卡设备被正确地插入插槽中。
2.2 热插拔软硬件要求
热插拔不仅仅是硬件的事,其需要软硬件协同实现。要想实现热插拔功能,操作系统、主板热插拔驱动器、PCIe卡设备驱动以及PCIe卡硬件功能都必须支持热插拔,缺一不可。从PCIe卡设备硬件功能的角度来看,其需要支持Quiesce命令、Pause命令(可选)、Start命令和Resume命令。
PCIe环境下的热插拔需要软件与硬件的通力合作。红色框内属于软件方面的需求,绿色框内是硬件方面的需求。
软件方面主要包括:
1、User Interface: 这部分由系统OS提供。主要允许用户可以请求插拔PCIe设备。
2、Hot-Plug Service: 这部分也是由系统OS提供。主要负责处理用户插拔PCIe设备的请求。
3、Standardized Hot Plug System Driver: 这部分驱动可以由系统OS或者主板提供。
4、Device Driver: 这部分主要有适配卡提供。
硬件方面主要包括:
1、Hot-Plug Controller: 主要负责接收和处理来自Hot Plug System Driver的指令。
2、Card Slot Power Switching Logic: 主要被Hot Plug Controller控制,用于turn-on/off电源。
3、Card Reset Logic: 按照Hot-plug System Driver的指示,Hot Plug Controller向需要插拔PCIe设备的插槽(Slot)传送PERST#信号。
4、Power Indicator: 主要负责指示设备连接器上面的电源状态。
5、Attention Indicator: 这个是警示灯,提醒用户热插拔失败状态,所以一般情况下处于关闭状态。
6、Card Present Detect Pins: PCIe设计了两个用于检测PCIe设备是否存在的信号PRSNT1#和PRSNT2#。PRSNT#1接地,当PCIe设备存在时,PRSNT#2拉高。
桥设备(Switch等)中还需要支持热插拔控制器(Hot Plug Controller)。
注:PCIe总线除了有一个Base Spec之外,还有一个关于PCIe卡设备的Spec——PCIe Card ElectroMechanical Spec(CEM)。
与PCI总线不同,PCIe总线采用的是点到点的连接(Point-to-Point Connections),因此其并不像PCI总线那样需要用于卡设备的隔离逻辑(Isolation Logic),但是每个端口(桥设备中的,如Root和Switch)都必须包含一个独立的热插拔控制器(Hot Plug Controller),如下图所示:
配置空间中,与热插拔相关的寄存器如下图所示:
全部0条评论
快来发表一下你的评论吧 !