PCIe接口卡热插拔机制解析来源:新电子发布时间:2013-03-1812:151983次浏览大小:16px14px12px谈到PCIe的电源管理,常联想到这种接口与PCIBusPM接口规范及ACPI2.0规范兼容。另一个与电源密切相关的问题就是PCIe支持的热插拔功能。在不关机的情况下把接口卡直接插入插槽需要某些机制与步骤,否则主板或接口卡很容易毁损。下面就来说说PCIe热插拔的各项对策。严格来说,PCIe(PCIExpress)的热插拔产生于为PCI总线制定的热插拔控制器标准规范(SHPC1.0)。PCIe热插拔的设计理念隶属于一种“无意外(NoSurprises)”式策略,即用户在插入或拔除接口卡时,必须先行通知系统;系统软件也得做好准备,通过显示器通知使用者热插拔的状态。回想过去PCI总线发展的历程,起初并没有针对热插拔作特别定义,后来由于工业应用上的需要,市场上才出现支持热插拔的机制。CompactPCI就是一个例子。就热插拔的系统观点来说,PCI与PCIe概念上是一致的,都需要“热插拔控制器”(Hot-plugController)负责控制。PCI总线是一个共享式的总线接口(ShareBus),因此隔离措施的逻辑线路是必要的。而PCIe接口架构属于点对点(Point-to-point)连接型态,消除了隔离逻辑线路的存在,也允许分布式的热插拔控制器分别处理相关端口。PCIe构成元器件每个端口定义了标准的软件接口。因为程序接口存在差异,PCI与PCIe就需要不同的驱动软件。从物理接口上看,PCIe与PCI的区别在于PCIe的接脚定义了接口卡存在检测的信号(PRSNT1及PRSNT2)。即使不小心或被恶意拔除,系统软件依然有足够时间处理。PCIe环境下的热插拔要在PCIe环境下完全支持热插拔功能,就需要软/硬件双方面的搭配。软件方面,操作系统OS要涵盖用户界面、热插拔系统软件服务,还有设备驱动软件(DeviceDriver)等。在硬件方面,端口器件端要有热插拔控制器、接口卡电源开关逻辑线、接口卡复位线、提示按钮(AttentionButton)、指示器(PowerIndicator/AttentionIndicator)与接口卡存在检测接脚(即PRSNT1#与PRSNT2#信号)等。以下我们先就具有热插拔功能接口卡的插入与移除步骤做个说明,首先要了解插槽“On”与“Off”状态的内在涵义是什么。插槽“On”有下列几点关键内容:◆电源加在接口卡上◆REFCLK参考时钟信号开启◆传输链路(Link)处于动态或通过ASPM进入省电模式(L0s或L1状态)◆关闭PERST#信号而插槽“Off”恰好相反:◆关闭加在接口卡上的电源◆REFCLK参考时钟信号关闭◆传输链路处于无效状态(Inactive)◆启动PERST#信号正常工作情况下,电源指示灯(PowerIndicator,绿色)开启,闹钟提示器(AttentionIndicator,琥珀色或黄色)则处于关闭状态。软件会利用配置写入交易的传输模式,来对热插拔控制器送出指令请求(Request),并控制加在接口上的电源及指示器状态。当使用者要移除(Removal)接口卡的时候,触发可以有两种方式,通过“按键”或软件程序的“用户界面”来激发。使用按键移除的详细步骤如下:◆步骤一:使用者按下“闹钟提示器”键,热插拔控制器获得该信息,发出中断信号到“RootComplex”端,系统读取插槽信息并确认按键的请◆步骤二:热插拔控制器使电源指示灯闪烁◆步骤三:热插拔服务常式下令中止驱动程序,不对接口卡发出任何请求动作◆步骤四:软件转向接口卡插槽端口的链接控制寄存器,使链路双端的端口都失效◆步骤五:热插拔控制器关闭插槽◆步骤六:软件发出“关闭电源指示灯”的请求,指示使用者可以移除接口卡◆步骤七:释放手动接口卡固定插销(MRL),让热插拔控制器可以从插槽移走SMBus与JTAG等开关信号,然后拔除接口卡◆步骤八:系统将该接口卡占用的资源,如存储空间、中断信号线等,让渡给其他元器件使用接口卡的插入步骤则基本与上述过程相反。PCIe热插拔控制器再探讨“PCIHotPlug”1.0版规格并未定义有标准的暂存器及用户界面,所以各厂商采用的软/硬件各有不同。消费者购买不同厂商的产品时,都要学习和熟悉其使用方式。为此,PCI热插拔控制器(HPC)1.0版规范特别作了下列两条重要规定:◆定义了标准用户界面(UserInterface),消费者在使用上就更轻松了◆针对热插拔控制器,提供了一个标准化程序界面(ProgrammingInterface),使得将一个标准化的热插拔驱动软件纳入操作系统变得可行比较遗憾的是,PCIe暂存器并未在HPC中有相关定义。标准的热插拔控制器驱动软件在处理PCI与PCIe时就略显不同。先来谈标准的用户界面。这个标准的用户界面必须具有闹钟提示器、电源指示灯、手动接口卡固定插销(MRL)、插槽编号识别(SlotNumberingIdentification)、软件使用界面及提示按钮等。闹钟提示器应尽可能接近接口插槽,可以采用黄色或琥珀色的LED指示灯。该指示灯的主要作用是吸引用户的高度注意,告知热插拔的操作失败。因此,正常情况下该指示灯是关闭的。电源指示灯主要反映主电源已分派到插槽上,由热插拔相关软件控制,显示颜色为绿色。指示灯亮表示不可插入或移除接口卡。MRL最主要的作用是固定接口卡,另外可以选择额外添加传感器(Sensor)。MRL所控制的开关信号不外乎Vaux辅助电源及SMbus信号(SMBCLK与SMBDAT信号)等。仔细研读PCIe的核心规格与CEM(CardElectroMechanical)规格就可以发现该规范定义了PCIe热插拔所需的插槽信号。其中:◆PWRLED#:电源指示灯输出信号◆ATNLED#:闹钟提示器输出信号◆PWREN:主电源到插槽的控制信号◆REFCLKEN#:参考时钟到插槽的控制信号◆PERST#:基本复位信号◆PRSNT1#:连接器端接地◆PRSNT2#:接口卡存在信号,在系统主板端接拉高电阻◆PWRFLT#:外部逻辑用来告知热插拔控制器电源有误的输入信号◆AUXEN#:AUX信号与辅助电源的控制信号◆MRL#:MRL感应器输入信号◆BUTTON#:即“AttentionButton”,用来通知热插拔控制器用户要进行热插拔的动作PCIe对于热插拔控制器的标准程序界面是通过PCIExpress容量寄存器(PCIExpressCapabilityregister)来实现的。插槽容量(SlotCapabilities)必须读取设备容量寄存器(DeviceCapabilityRegister)才会知道是否支持按键与指示器。系统控制热插拔事件与动作是通过插槽控制寄存器(SlotControlRegister)来完成的,其相关位定义如图6所示。热插拔控制器追踪各种事件并通知管理热插拔的系统驱动软件,再由状态位加以确认。通常系统主板上会有不少插槽,各个插槽之间的识别需要身分确认数值(PhysicalSlotID),但这些识别值是由系统设计者指定的,也必须让诸如芯片值的Root或Switch元件的端口知道。毕竟,硬件在起初必须对各个插槽的状态寄存器(SlotStatusRegister)作初始化处理。热插拔的电源预算PCIe规格里提到电源预算(PowerBudgeting)这个问题,也就是规格书上所说的PowerBudgetingCapability,隶属于一个设计选项(Option)。虽然不是百分之百针对热插拔的接口卡,至少让系统设计者对接口卡在设计上有足够的电源预算,尽可能减少彼此之间的冲突,也可精确控制散热处理。规格中定义了支持电源预算的相关配置寄存器,却没有描述详细的实现方案。系统固件(SystemFirmware)必须知道整体的系统可用电源、系统设备的电源配置、接口上的插槽等信息。一个允许热插拔的端口在插槽容量寄存器中有能量限制(SlotPowerLimit)和能量数值(SlotPowerScale)字段,电源软件或固件初始化时必须在此字段中装入数值,表示该端口允许的最大电源提供量。同时,端口也会利用Set_Slot_Power_Limit告知接口卡。对于支持电源预算的接口卡,设备容量寄存器(DeviceCapabilitiesregister)只存放端口送过来的消息数值。同时,电源预算容量寄存器内的数值用来报告电源相关的信息。而设备驱动程序(DeviceDriver)的作用是在启动前检验电源是否充足。