摘要热插拔是Compact PCI总线技术中突出且最吸引用户的技术,解决了用户对系统稳定性和冗余性迫切的要求。文中分析了Compact PCI总线系统3种热插拔技术的原理,以完全热插拔技术为基础,设计热插拔系统,硬件采用热插拔电源控制器LTC1643L和PCI桥接芯片PCI9030实现硬件功能板卡,软件使用硬实时操作系统VxWorks。在分析VxWorks操作系统结构以及设备驱动程序结构后,结合PCI9030的设备配置空间的特点,编写VxWorks下Compact PCI功能板卡的驱动程序以及热插拔监控程序,最终实现系统的热插拔功能。
关键词Compact PCI总线;热插拔;VxWorks;LTC1643L;PCI9030;PCI配置空间
1992年,英特尔公司将PCI总线作为局部总线,用于CPU与外围器件相连,例如显示控制器、以太网控制器、内存控制器等。经过10多年的发展,PCI总线标准已成为PC机业界标准。但由于其自身无法提供更高可靠性及无法满足更高可用性系统对正常运作时间的要求,主板散热困难,边缘接头可靠性低,在更换主板时易受损坏等弊端逐渐显现出来。1997年8月,PICMG发布了第一个技术标准Compact PCI技术标准PICM G2.0,该标准的发布标志着Compact PCI系统的诞生。
Compact PCI是一种新的开放式工业计算机标准。它融合了计算机与工业设备诸多经过广泛验证的标准,是PCI总线技术与欧式卡组装技术的组合。它与传统的PCI系统完全兼容,系统的设计者只需将电路板上的连接器重新绘制,就可以将一个传统的PCI系统升级为一个Compact PCI系统,大幅缩短了产品推向市场的时间。与此同时Compact PCI标准给系统设计者提供了冗余设计、故障切换和故障管理等极大的设计空间,其中最具吸引力的特点就是Compact PCI系统具备了传统PCI板卡无法实现的热插拔能力。
1 热插拔原理
Compact PCI总线的热插拔过程就是软硬件交互的连接过程。主要包括物理连接、硬件连接和软件连接。物理连接过程就是板卡在插入和拔出的过程中,接口的长、中、短针依次与总线连接的过程。硬件连接是各种电信号驱动响应的过程。Compact PCI总线增加一个ENUM#信号,即系统枚举信号。当一个Compact PCI设备卡被插入或拔出时。ENUM#被激活,同时激活热插拔监控软件,监控软件判断热插拔类型并经行相关操作。软件连接过程是软件层同系统连接或断离的过程。对于板卡的插入,过程包括分配系统资源,包括I/O空间、内存空间、中断号,加载设备驱动程序并激活应用软件。根据系统要求的不同,热插拔系统有3种模型:
(1)基本热插拔模型。最基本的热插拔方式需要用户干预,用户通过控制台通知操作系统将进行设备卡的插入或拔出。
(2)完全热插拔模型。完全热插拔是在基本热插拔模型的基础上,在设备卡的插入/拔出机构中添加一个微开关装置,这个开关藏在手柄中,在设备的插入和拔出过程中激活枚举信号,及ENUM#信号,该信号通过中断的方式通知操作系统将要插入或拔出一个设备卡,操作系统再执行总线枚举,资源分配,安装驱动程序或卸载驱动程序。
(3)高可用性模型。在完全热插拔模型基础上对板卡实行了更高程度的控制,不仅是指示板卡的插入或可拔出的状态。这种模型的软件能够控制板卡的硬件连接,这就使得软件能对发生故障的板卡立即进行总线或电气上的隔离,并启用冗余板卡,满足系统始终处于运行状态、几乎没有故障的高可用性目标。
2 系统的硬件设计
系统在X86系统主机下,设计为一个I/O适配卡,通过以上分析可知,具备热插拔能力的CompactPCI板卡必须具有电源管理模块,完成对板卡的上电操作及Healthy#信号获取,目前市场已有Compact PCI热插拔电源管理的专用芯片,典型的是Liear公司的LTC1643L;其二是板卡上的桥芯片必须支持系统热插拔,本文采用PLX公司的PCI9030,其提供了完善的热插拔功能。系统的硬件框图如图1所示。
热插拔系统的工作过程如下:Compact PCI的电源有长针和中针,设备卡的设计者应将板卡的供电系统分为两个部分,长针电源给PCI桥芯片及电源管理芯片供电,中针电源给板卡的其他部分供电。当操作者插入一块板卡时,系统就进入物理连接状态,此时是长针电源的插入,桥接芯片及电源管理芯片通电,做好热插入的准备,而系统其他部分还未通电。当操作者继续将板卡插入时,中针电源与板卡连接,系统其他部分仍未通电,短针信号BD_SEL#激活,在上拉电阻的作用下,由原来的高电平下拉到低电平,板卡上的电源管理模块响应这个信号,电源管理芯片响应信号后,经过一定延时,接通中针电源,对板卡上的其他部份供电,系统进入硬件层连接状态,板卡随时准备工作。在硬件层连接过程中需要两个信号的配合,它们是Healthy#和PCI_RST#信号,PCI_RST#信号与传统PCI复位信号相同,但在热插拔系统中,系统复位必须满足的条件是板卡正常供电,该状态信号为Healthy#信号,由板卡电源管理模块通过对板卡上各种电源的监视提供。产生板卡上可靠的复位信号的典型做法是将Healthy#与PCI_RST#做逻辑或,得到的或信号作为整个系统的复位信号,完成以上操作后系统进入软件层连接状态。在进入软件层时需要ENUM#信号有效,信号的触发依赖位于热插拔设备卡拉手上的微动开关,在插入和拔出设备卡的过程中会激活ENUM#信号,然后向桥接芯片发出一个触发信号,同时设备卡上的热插拔指示灯点亮,操作系统完成对设备卡的配置,接着加载设备驱动程序,激活设备应用软件。
3 热插拔系统软件的设计
热插拔系统的实现依赖于具体的硬件系统和操作系统,该主机操作系统为VxWorks实时操作系统,软件系统的实现需要设备卡的驱动程序,以及热插拔监控程序,其工作流程如下:当设备卡插入Compact PCI总线时,关闭微动开关时,激活枚举信号,触发操作系统响应,读取本地空间寄存器中设备卡的状态,判断是否为插入,如果是板卡插入,此时释放信号量,激活设备卡插入程序,程序加载设备驱动程序,创建设备,打开设备,激活应用程序。当设备卡拔出Compact PCI总线时,微动开关会触发枚举信号,以同样的方式读取本地空间寄存器的状态,如果为拔出,卸载设备驱动程序,删除设备,释放与设备相关的资源。热插拔软件流程如图2所示。
3.1 Vxworks驱动程序的设计
驱动程序主要实现了驱动程序的安装,设备的创建,以及打开设备,读写设备的功能。开发驱动程序首先修改主机的BSP,在config Al l.h文件中添加#define cpci9030.h,然后在sysLib.c中加入include“cpci9030.c”。在cpci9030.c中主要实现以下函数:
syscpciInit(),设备资源初始化函数,主要的作用是读取系统分配给采集卡的地址映射空间,包括内存空间和I/O空间,以及设备的中断号,调用sysMmuMapAdd()系统函数将内存空间做虚拟化映射,使CPU能够正常访问采集卡。调用intConnect()系统函数将设备卡的中断程序添加到系统中。
plx_Drv(),驱动程序安装函数,函数调用IosDrvInstall()函数将开发的驱动程序添加到系统的驱动程序表中。
plx_UnDrv(),驱动程序卸载函数,函数调用IosDrvRemove()函数,将驱动程序从系统中移除。
plx_DevCreate(),创建设备函数,调用系统函数iosDevAdd()函数将设备添加到系统的设备列表中。
plx_DevRemove(),设备删除函数,调用系统函数iosDevDelete()函数,删除系统中创建的设备。
plx_Open(),设备打开函数,在设备列表中找到设备,并在空闲文件表中注册,返回文件描述符。
plx_Read(),设备读函数,读取设备中的数据,系统函数read()调用。
plx_Write(),设备写函数,写入数据到设备中,系统函数write()调用。
3.2 热插拔监控程序的设计
当设备插入Compact PCI总线,在连接过程中,设备通电以后会激活ENUM#信号,进而会产生一个系统中断,系统响应这个中断信号,执行中断函数,读取PCI9030的配置空间的设备关联区寄存器,判断板卡是插入还是拔出,并清除响应的中断状态。当中断状态是由插入板卡的引起的,会激活监视程序加载驱动程序安装函数plx_Drv(),设备创建函数plx_DevCreate(),以及设备打开函数plx_Open(),当中断由板卡拔出引起的,中断函数释放信号量激活任务,调用驱动程序卸载函数plx_UnDrv(),调用设备删除函数plx_DevRemove(),关闭由设备操作占用的文件和资源。
4 结束语
在对计算机系统稳定性和可维护性要求越来越高的前提下,PICMG提出了Compact PCI总线技术,较好地解决了这个问题,随着Compact PCI技术的不断成熟,热插拔技术会受到越来越多的重视,并向高可用性热插拔技术发展,以及双系统冗余技术的实现,在未来将会改变计算机系统的特性。