摘要:描述了cPCI平台实现热切换的动作机制,引入一种方法将cPCI设备热插拔动作转为独享中断,用LED指示处理进程,并给出依此方法实现无控制台进行全热切换的软硬件设计方案。
关键词:cPCI 热切换 即插即用 设备驱动中断服务程序
cPCI(即Compact PCI)是PICMIG制定的、更加坚固耐用的PCI版本,广泛应用于工业和嵌入式控制系统中。它在电气、逻辑和软件功能方面与PCI完全兼容。除机械特性不一致外,cPCI与PCI的差别在于cPCI具有支持热切换(HotSwap)的能力。随着电子产品成本的下降和市场对工业产品尤其是电信应用产品可靠性要求的提高,基于cPCI平台的设计逐渐成为电信设备厂商的。
1 cPCI热切换原理
1.1 热切换基础
cPCI标准定义的机械、电气特性是实现热切换的基础。它采用的连接器符合IEC917和IEC1074-101标准,其插针引脚分别有长、中长、短三种长度。当插入一个卡到插槽时,首先长的引脚(电源和地)被连接,卡逻辑将所有PCI信号引脚预设到一个固定电平1V;接着是中长度引脚的PCI信号连接,这些信号的电平已经固定且尚未开始,不会对系统造成干扰;才轮到短的此脚,即BD_SEL#信号连接,告知卡逻辑可以开始工作。卡拔出的顺序正好相反,BD_SEL#首先断开,PCI信号被调整到一固定电平,才断开电源和地信号。在电路方面,cPCI增加一个ENUM#信号,即系统枚举信号。当一个cPCI设备卡被插入或拔出时,ENUM#被激活。
除cPCI本身的特性以外,要实现热切换,具有支持即插即用(PnP)的操作系统也是必要条件之一,只有支持PnP才能实现设备驱动程序的动态安装和卸载。
1.2 三种层次热切换
1.2.1 基本热切换
基本的热切换方式需要用户干预。用户通过控制台通知OS(操作系统)即将进行设备卡插入或拔出。当插入一个卡时,其详细流程如下:
(a)通过系统界面,用户通知OS即将在一个槽中插入一个卡;
(b)用户插入卡,对卡完成上电初始化;
(c)用户通知系统,卡已经插入,要求OS重新枚举总线;
(d)OS执行总线枚举,确定新卡需要的资源;
(e)OS对卡的PCI配置寄存器编程,向其分配资源;
(f)OS装入适当的设备驱动程序,并调用其初始化代码;
(g)设备驱动程序初始化完成,卡开始工作。
当拔出一个卡时,流程类似,需要用户预先通知OS将要拔出设备卡,OS卸载设备驱动程序并回收设备资源后,才能拔出设备。
1.2.2 全热切换
全热切换是在基本热切换的基础上,在卡的插入/拔出机构中添加一个微开关装置。这个开关藏在手柄中。当cPCI卡被插入或拔出时,在卡开始或停卡工作之前,微开关首先改变状态,产生ENUM#信号,该信号通过某种途径通知OS将要插入或拔出一个卡,OS再执行总线枚举、安装驱动程序或卸载驱动程序等动作。
1.2.3 高可用性热切换
高可用性热切换是在全热切换的基础上建立的。它要求在系统卡和每个设备卡之间实现点对点的RST#和信号隔离。这使OS可以自动隔离一个坏卡,然后将一个替代卡(已经安装)启动,接着坏卡继续工作。所以它通常也称作无缝切换或无间断切换,是一种冗余设计方案。
三种热切换的自动化层次不同,实现的复杂程度也各有不同。下面介绍一种支持全热切换的cPCI平台的HotSwap子系统实现方案,对其硬件电路和软件设计分别进行介绍。
2 cPCI热切换子系统硬件实现
2.1 桥接芯片
在硬件电路上需要一兼容cPCI规范的PCI-to-PCI的桥接芯片,以便热插拔卡时实现引脚控制逻辑和支持全热切换功能。以PLX PCI6150为例,它提供一个HotSwap寄存器,记录设备插拔状态,其定义如表1所示。
表1 HotSwap寄存器定义
bit15~8 | 7 | 6 | 5,4 | 3 | 2 | 1 | 0 |
保留 | INS | EXT | PI | LOO | PIE | EIM | DHA |
DHA:Device Hiding Arm,设备隐藏处理,在设备卡刚插入尚未正常工作前或被驱动程序停止之间可隐藏后级总线设备。
EIM:Enable or Disable ENUM#,使能或禁止ENUM#输出。
PIF:Pending Insert or Extrace act,暂时挂起插入或者拔出动作。
LOO:LEN On or Off,LED指示控制,与芯片的LED引脚相对应。
PI:Programming Interface,可编程接口,软件触发插入/拔出等动作。
EXT:Extraction State,拔出状态位,当微开关断开时,此状态位为1。
INS:Insertion State,插入状态位,在PCI6150上电复位成功后,此状态位为1。
2.2 硬件电路逻辑
系统卡电路在逻辑上就是一普遍PC主机板,它与热切换相关的部分集中在对来自cPCI连接器的ENUM#信号的处理。在设计时,将它接在系统板Super I/O芯片Winbond W83627HF的IRQIN0引脚,以扩展中断输入的ISA中断方式实现。这样设计的好处是:可避免与其它PCI设备共享中断,而独点一个中断以保证中断的响应速度;该引脚输入是可编程的,可根据系统的中断使用情况分配任意空闲中断;而且该中断可以不挂靠任何物理设备而独立存在,这样驱动程序也就可以设计成一静态服务程序,静态服务程序安装/卸载比物理设备驱动程序要简单得多。ENUM#是低电平有效,而IRQIN0输入是边沿触方式,需要一逻辑电路进行转换。系统卡逻辑框图如所示。
设备卡电路中与热切换相关的部分是微开关电路和状态LED驱动,PCI6150的ENUM#信号直接与cPCI连接器的同名信号相连。EUNM#信号还和LED信号一起被用来驱动一双色LED,ENUM#信号为低时,LED被驱动为红色闪烁;ENUME信号为高、LOO信号为高时LED被驱动为红色,LOO信号为低时LED信号被驱动为绿色。设备卡逻辑电路如所示。
整个系统电路的逻辑工作是:当设备卡插入时,PCI6150上电初始化,芯片逻辑置HotSwap寄存器INS状态位,触发ENUM#信号为低,LED闪烁红色,ENUM#经cPCI底板到达系统卡,经电平/边沿转换,生成中断请求有效信号IRQIN0,处理器响应中断,进入中断服务程序,ENUM#信号被撤除,设备驱动程序成功安装后置LOO位,状态指示为红色,设备开始工作。当要拔出设备卡时,EJECT微开关先被断开,PCI5160置HotSwap寄存器EXT位,激活ENUM#信号,状态LED为闪烁红色,处理器响应中断,ENUM#被撤除,通知OS卸载设备驱动程序,之后热交换软件清LOO位,状态LED指示蓝色,设备可以安全拔出。整个过程无需用户与操作系统交互,根据LED的显示即可判断卡的工作状态,安全顺利实现热切换。
3 cPCI热切换子程序软件实现
软件系统的目标是实现中断的响应处理,与操作系统交互,以正确及时地安装或卸载对应的设备驱动程序,确保整个软件系统安全运行。
3.1 软件分层设计
本系统软件分成三层:层为设备驱动程序hotswap.sys,它执行与硬件相关的操作,如响应热切换过程中产生的中断事件、对Hotswap寄存器的操作,包括控制LED指示、清除INS/EXT状态位、隐藏设备等;中间层为热切换处理程序,一个由HSMonitor.exe创建的建立线程,一方面接收来自驱动程序的通知,另一方面通知OS重新枚举cPCI总线或卸载某一设备驱动程序;上层为一图形界面应用程序HSMonitor.exe,为用户提供可见的设备插拔动态信息。软件结构如所示。
3.2 软件流程
ENUM#信号有效时,首先设备驱动程序hotSwap.sys的中断服务程序被执行,中断服务程序扫描整个cPCI总线,读取PIC6150的热切换寄存器,清除相应状态,并根据设备的INS/EXT状态位建立设备变更清单,通知热切换处理线程。热切换线程读取设备变更清单,如果有刚插入的设备,则通知OS重新枚举cPCI总线,如果有待拔出的设备,则利用设备槽信息(总线号/设备号)换算成PnP DevNode地址,通知OS移除该DevNode。OS在移除一个DevNode后或枚举总线时发现了新设备则发消息到应用程序HSMonitor.exe,该应用程序被设计成每次开机时自运行且注册为该消息的接收者。HSMonitor.exe获取刚被处理过的DevNode及处理结果。包括设备驱动加载成功、设备被成功移除等,以日志形式显示到控制台,供用户查询。
cPCI平台产品因为其可靠性和坚固性逐渐被国内电信设备三商采用,本设计中的cPCI平台产品被广泛应用于语音呼叫中心和自动应答系统,其基于cPCI的全热切换设计保证了系统的不间断运行,极大地提高了系统可靠性。本产品近一年的市场应用表明,该设计方案成本低廉,容易实现,用户使用方便。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。