关键词:CPCI 平台;ARM;VxWorks ;热插拔;工业控制
1 引言
嵌入式平台一般以主板为基础,根据应用扩展功能模块。如果适配板用可编程逻辑器件实现,主板通过它与功能模块相连,那么主板可以适应功能模块的变化。假如适配板为功能模块预留一定数量的接口,那么平台具有更大的扩展性。但由于适配板的接口是设计者自定义的,因而本质上决定了基于适配板方法设计的嵌入式平台不具有开放性。为了解决这个问题,主板与功能模块必须基于某种标准总线进行设计。
CompactPCI( 下文简称CPCI)总线是基于PCI电气规范开发的高性能工业总线,广泛应用于工控、通讯等行业。简单来说,CPCI总线是PCI 总线的电气规范、标准的针孔连接器、欧洲卡规范三者的结晶。因此基于CPCI 总线设计的嵌入式平台不仅具有PCI 总线的高性能、欧洲卡结构的高可靠性以及支持热插拔功能,而且具有良好的开放性和扩展性,可以适应不断变化的应用环境和需求[1]。针对本单位实际情况,本文提出构建基于ARM处理器与VxWorks操作系统的CPCI工控平台,用它代替目前基于适配板方法设计的嵌入式平台,并将它作为新项目的开发平台。文章给出该平台设计方案,并重点介绍该平台硬件和软件的设计。
2 平台方案
CPCI平台硬件一般由系统卡、外设卡、无源底板、电源模块、机箱组成。
CPCI平台可按基本热插拔、全热插拔、高可用性热插拔三种层次实现。其中基本热插拔需要用户通过操作台与操作系统交互来实现卡的热插拔管理,不太适合嵌入式的应用;而全热插拔则用卡推出/插入手柄与LED指示灯代替操作台,大大简化了用户与操作系统的交互;而高可用性热插拔在全热插拔的基础上,除了用软件对硬件连接过程进行管理,并且在系统卡与每个外设卡槽之间实现点对点的复位和隔离信号,这样操作系统可以自动隔离并替换坏卡。高可用性热插拔的性能优于全热插拔,但其硬件和软件的设计难度也增大。故本CPCI平台将按全热插拔方式实现。
3 平台硬件设计
对于CPCI 机箱、底板、电源,可以根据应用选择标准构件。在此只介绍系统卡与外设卡的硬件设计。
3.1 系统卡硬件设计
系统卡主要由CPU、CPCI主桥控制器、热插拔控制电路、外围电路组成。CPU是整个平台的指挥官;CPCI主桥控制器为CPCI总线的扩展提供桥梁;热插拔控制电路负责系统卡上电与断电的控制;外围电路针对应用而定。
CPCI主桥控制器的选型是系统卡设计的关键,如果CPU 内置PCI 主桥控制器,则无需额外的CPCI主桥控制器,只需增加卡热插拔检测以及状态指示控制电路,即可实现CPCI主桥控制器的功能。这样不仅简化设计,而且降低成本。如果CPU没有内置PCI主桥控制器,可以采取如下三种方法实现CPCI主桥控制器的功能。
(1)自己设计逻辑,然后定制ASIC芯片。
(2)自己设计或购买别人的接口逻辑,用大规模CPLD或FPGA来实现。
(3)选择通用的CPCI主桥芯片。
第一种方法,只适用于用量比较大的情况,否则ASIC开发成本太高。第二和第三种方法,适用于小规模的情况。对于第二种方法,设计难度较大,并且开发出来的CPCI接口性能还要经过严格的验证才能使用,这无疑延长了产品的研发周期。由于我们使用的ARM9处理器没有内置PCI 主桥控制器,在此选用第三种方法。在众多厂家生产的PCI芯片中,以美国PLX公司的PCI9056功能最完备,是作为CPCI主桥芯片的最佳选择。PCI9056具有PCI R2.2规范兼容的32位,最高可达66MHZ的PCI总线,并且它满足PICMG 2.0 R3.0 CPCI规范以及PICMG 2.1 R2.0 Hot Swap规范的要求。PCI9056的Local Bus可配置为三种模式,以满足不同体系结构CPU的需要。针对ARM9处理器,我们把PCI9056的Local Bus配置为C模式,并且通过增加逻辑器件将ARM9 处理器的外部总线接口与PCI9056 的Local Bus进行连接,以实现时序协调和传输控制。PCI9056内置PCI仲裁器,可以支持7个PCI设备的仲裁,这很适用于标准8槽底板的设计。
热插拔控制电路设计的关键是热插拔控制器的选型,而热插拔控制器的供应商众多,每个供应商针对不同应用提供不同型号的芯片。考虑到PCI9056主桥控制器集成了预充电路、Early Power电路,我们选择Linear公司的LTC1643A芯片作为热插拔控制器。它可以控制3.3V、5V、±12V电压的供电,并且提供Fault、Power-Good状态信息。系统卡电路的复位可以由Power-Good状态来进行控制。
现在以PCI9056作为CPCI主桥控制器,以LTC1643A作为热插拔控制器,简单介绍系统卡插入底板的上电工作过程,而系统卡拔出底板的断电工作过程与之相反。
(1)首先,系统卡的孔式插座与底板最长的电源、地信号针接触,此时LTC1643A的ON#与PCI9056的BD_SEL#信号均被拉高,LTC1643A处于非工作状态,而PCI9056处于预充状态。
(2)接着,系统卡的孔式插座与底板的中长信号针接触,由于PCI9056处于预充状态,这样系统卡与底板CPCI信号间的能源传送减到最少。
(3)最后,系统卡的孔式插座与底板的最短信号针BD_SEL#接触,由于底板BD_SEL#信号针接地,所以LTC1643A的ON#与PCI9056 的BD_SEL#信号均被拉低。此时,PCI9056脱离预充状态,LTC1643A开始工作。LTC1643A控制3.3V 、5V、±12V上电,当它检测到3.3V、5V、±12V输出均在误差范围内,它控制Power-Good#信号拉低,从而控制CPU的复位信号,让CPU开始上电初始化过程。
(4)当CPU对PCI9056初始化时,它控制PCI9056进行复位,从而控制PCI_RST#信号复位,达到对底板上所有外设卡复位的目的。
3.2 外设卡硬件设计
外设卡主要由CPCI主/从设备接口芯片、EEPROM、热插拔控制电路、应用电路组成。CPCI主/从设备接口芯片允许外设通过它挂接到CPCI总线上,CPCI主设备接口芯片既可作为CPCI总线上的master发起交易,又可作为CPCI总线上的slave响应交易;而CPCI从设备接口芯片只可作为CPCI总线上的slave响应交易;EEPROM用于存储配置信息,当外设卡上电时,CPCI主/从设备接口芯片可以把EEPROM中的配置信息拷贝到它的配置首部寄存器空间;热插拔控制电路主要负责外设卡上电与断电的控制;应用电路按照应用需求设计。
外设卡设计的关键是CPCI主/从设备接口芯片的选型。在众多厂家生产的PCI芯片中,以美国PLX公司的主/从设备接口芯片最为齐全。鉴于我们的应用是工业控制,考虑到性价比,PCI9030从设备接口芯片是不错的选择。
PCI9030芯片推荐使用支持序列读功能的93 系列三线串口EEPROM,我们选用AT93C56A。EEPROM信息的更新除了使用专门的编程器外,还可以使用在线编程的方法实现。
现在以PCI9030作为CPCI设备接口芯片,以LTC1643A作为热插拔控制器,简单介绍外设卡插入底板的上电工作过程,而外设卡拔出底板的断电工作过程与之相反。
(1)首先,外设卡的孔式插座与底板最长的电源、地信号针接触,此时LTC1643A的ON#与PCI9030的BD_SEL#信号均被拉高,LTC1643A处于非工作状态,而PCI9030处于预充状态。
(2)接着,外设卡的孔式插座与底板的中长信号针接触,由于PCI9030处于预充状态,这样外设卡与底板CPCI信号间的能源传送减到最少。
(3)最后,外设卡的孔式插座与底板的最短信号针BD_SEL#接触,由于底板BD_SEL#信号针接地,所以LTC1643A的ON#与PCI9030的BD_SEL#信号均被拉低。此时,PCI9030脱离预充状态,LTC1643A开始工作。LTC1643A控制3.3V 、5V、±12V上电,当它检测到3.3V、5V、±12V输出均在误差范围内,它控制Power-Good#信号拉低,只要此时来自系统卡的PCI_RST#复位信号无效,那么PCI9030进行复位。
(4)当PCI9030完成复位时,一方面,它产生Local_RST_Out#复位信号,从而控制应用电路进行复位;另一方面,如果它检测到EEPROM存在,就把EEPROM中的配置信息拷贝到它的配置首部寄存器空间。当PCI9030完成初始化,即可响应来自系统卡的CPCI交易。
(5)当PCI9030检测到卡已插入的状态,它通过ENUM#信号向系统卡产生中断请求。系统卡确认产生该中断信号的外设卡,并调用它的驱动安装程序,达到对该外设卡所需内存、I/O、中断等资源的分配。最后,系统卡熄灭该外设卡的状态指示灯,以表示它在线。
4 平台软件设计
由于该平台是基于VxWorks操作系统设计的,总体的软件框架如图所示。
现说明各部分软件的功能。
(1)BSP是介于平台硬件与操作系统之间的板级支持包,使操作系统能够独立于平台硬件。BSP的设计主要包括系统卡硬件的初始化,为操作系统提供中断、时钟服务,完成外设驱动程序的初始化。针对CPCI总线部分,在系统卡硬件初始化时包括对PCI9056主桥芯片进行配置。为了实现对CPCI总线上设备的扫描,以及对CPCI设备进行资源配置功能,必须要针对PCI9056主桥芯片编写CPCI配置库。
(2)外设卡驱动程序的设计主要针对外设卡实现的功能,按照CPCI设备驱动程序的编写规范,提供给应用程序标准的接口函数,从而实现对设备进行安装、打开、读写、控制、关闭、卸载的管理。
(3)系统卡、外设卡中断服务程序分别响应系统卡、所有外设卡的热插拔事件,主要把热插拔事件告诉热插拔服务程序,让它代为处理。系统卡中断服务程序的优先级比外设卡中断服务程序的要高,因为系统卡热插拔事件所产生的系统状态直接决定外设卡可使用的系统资源状况。
(4)热插拔服务程序主要处理系统卡与外设卡中断服务程序的请求,并优先处理系统卡的请求。现分别说明它如何处理来自系统卡、外设卡的热插拔请求:
(a)系统卡中断服务请求处理
当系统卡请求插入时,它只是熄灭系统卡的卡状态指示灯,以提示用户系统卡在线;当系统卡请求拔出时,它枚举所有在线外设卡的卸载函数,并使被卸载外设卡的卡状态指示灯点亮,以提示用户外设卡离线。
(b)外设卡中断服务请求处理
当外设卡请求插入时,它枚举所有请求插入的外设卡的安装函数,并使被安装外设卡的卡状态指示灯熄灭,以提示用户该卡在线;当外设卡请求拔出时,它枚举所有请求拔出的外设卡的卸载函数,并使被卸载外设卡的卡状态指示灯点亮,以提示用户该卡离线。
(5)外设卡应用模块是外设卡驱动程序的使用者,它通过外设卡驱动程序完成对外设卡中设备的读写、控制功能。
5 结束语
目前已将该CPCI平台方案成功应用于片式电子元件高速编带机项目,不仅大大降低该产品的使用、维护和升级改造的费用,还创造良好的经济效益。
|