利用PCI1510实现PCI板卡的热插拔测试
2007-12-21
作者:王琨强,赵志珩
摘 要:介绍了一种PCI-to-PCI接口的转接卡,详述了其系统组成和工作原理,并给出了实现方法。
关键词:PCI PCMCIA 热插拔" title="热插拔">热插拔 测试
对于普通的PCI板卡,无论是总线的硬件结构还是操作系统(如Windows序列操作系统)都不支持热插拔。在批量生产PCI板卡时,必须在关机的情况下插拔PCI板卡,然后开机测试,因此测试工作十分费时费力。本文介绍利用TI公司的PCI1510制作一个PCI-to-PCI转接卡,从硬件和软件两个方面实现PCI板卡的热插拔。
1 系统总体结构
利用PCI1510制作的PCI-to-PCI转接卡的总体结构框图如图1所示。在电气原理上类似于一款PCI总线到CardBus总线的接口电路板,但在物理形式上,CardBus总线并没有使用PCMCIA插座,而是使用PCI插座。由于PCI板卡的电源要求同PCMCIA板卡的电源要求相差很大,这款PCI-to-PCI板卡的电源处理方法同一般PCMCIA接口板的电源处理方法有较大的差别。
需要说明的是,一般PCMCIA接口板卡插入PCMCIA插槽后,系统能自动识别板卡是否插入,但本文所设计的PCI-to-PCI转接板卡,由于PCI总线没有板卡插入识别信号,所以在设计时增加了一个控制开关" title="控制开关">控制开关。当控制开关断开时,表示没有待测PCI板卡插入;当有待测PCI板卡插入时,操作者合上控制开关,通知系统已有待测PCI板卡插入,此时控制逻辑电路" title="逻辑电路">逻辑电路接收此信号并按PCI1510所要求的方式给出板卡插入识别信号。
图1中的PCI-to-PCI转接卡主要由以下几个部分组成:总线转换电路,主要由PCI1510及其配置电路24C02组成;控制逻辑电路,由ATF16V8C实现,其作用是根据操作者手动给出的开关信号向PCI1510给出相应的板卡插入和拔出信号,同时给出电源开关电路的控制信号;电源开关电路,由两片IRF7404组成,根据控制逻辑电路给出的电源控制信号,分别接通或断开PCI插槽的+5V和3.3V电源(如果需要+12V电源,还要增加一片IRF7404)。
2 PCI板卡热插拔测试的硬件实现
从硬件上讲,对于图1所示的PCI-to-PCI转接卡,要实现外部PCI板卡的热插拔,必须解决两个问题:一是CardBus总线到PCI总线的转换,二是要处理好转接卡上PCI插座的电源问题。
2.1 从CardBus总线到PCI总线的转换
根据PCMCIA的设计规范" title="设计规范">设计规范[1]可知,CardBus总线类似于PCI总线,但CardBus总线是一种点对点总线,与PCI总线有较大差别。
关于二者引脚的定义可以参考PCI设计规范[2]和PC卡设计规范[1]。下面着重叙述二者引脚定义的不同点并给出相应的解决办法:
(1)CardBus总线没有IDSEL信号,而PCI总线和PCI桥芯片必须有IDSEL信号,用来支持对PCI桥芯片配置空间的读和写操作。由于CardBus总线是点对点操作,在它上面只有一个设备,因此可在本转接卡PCI插座的IDSEL引脚通过一个电阻(阻值为4.7~33)接到3.3V电源;
(2)CardBus总线没有SBO#和SDONE#信号,但一般的PCI板卡并不需要这两个信号;
(3)CardBus总线不支持64位总线扩展,这对32位总线的PCI卡不产生影响。本文所述转接卡也不支持64位总线的PCI板卡;
(4)CardBus总线没有JTAG引脚,而通常的PCI板卡并没有利用JTAG功能,因而这一点并不影响本文所述转接卡的适应性;
(5)CardBus总线有CSTSCHG引脚,这是CardBus总线的独有功能,PCI总线并不需要,因而在设计时将它悬空;
(6)CardBus总线有CAUDIO引脚,这也是CardBus总线的独有功能,PCI总线也不需要它,因而在设计时将它悬空;
(7)CardBus总线有CCLKRUN#引脚,PCI总线中没有该引脚,本文在设计中按CardBus接口设计要求将其通过330?赘电阻接地;
(8)CardBus总线只有一个INT#引脚,但对于常见的PCI板卡而言,通常只使用(或不用)一个PCI中断信号INTA#,因而这个限制对大多数PCI板卡不构成限制。
2.2 外部板卡插入的检测和控制逻辑电路的设计
PCI1510有四个控制信号:CCD1#、CCD2#、CVS1和CVS2,用来检测是否有外部板卡的插入,并判别插入板卡的类型。PCI1510是一款PCMCIA接口的接口芯片,对于PCMCIA接口而言,可以在PCMCIA插座上插入三种类型的板卡[1]:16位数据/地址总线的存储卡,32位数据/地址总线的CardBus卡和CardBay卡。由于将CardBus总线当作PCI总线使用,因而当本文所述转接卡的PCI插座上有待测PCI板卡插入时,控制逻辑电路必须给PCI1510提供一个与CardBus板卡插入相似的板卡识别信号。
根据PCI1510的数据手册[3]和PCMCIA卡设计规范[1],当PCI1510检测到CCD2#为低电平且CCD1#接CVS1、CVS2悬空时,PCI1510认为外部总线接口已经插入一个CardBus板卡;而当CCD1#、CCD2#有一个为高电平" title="高电平">高电平时,PCI1510认为外部总线上没有板卡插入。因而本文按如下方式设计电路:CCD1#与CVS1短接,CVS2悬空,CCD2#通过上拉电阻接至可编程逻辑芯片ATF16V8C。PCI-to-PCI转换卡逻辑电路和电源控制电路如图2所示。
在图2所示的电路中,U300和U301为电源开关芯片IRF7404,实际上它们是P沟道场效应管,其输入电源引脚分别接转接卡上的+5V和+3.3V电源,输出引脚则分别接至转接卡PCI插座上的+5V和+3.3V电源引脚。U300和U301的控制信号由可编程逻辑芯片U302(ATF16V8C)的POWER_EN#提供。
U302的输入信号为:CARD_IN、PCI1510提供的电源控制信号VCCD0和VCCD1,输出信号为CCD2#和POWER_EN#。输入输出关系式为:
CCD2#=CARD_IN;
POWER_EN#= !VCCD0+VCCD1;
在转接卡的PCI插座上没有插入PCI板卡时,CON300断开,CARD_IN为高电平,此时,CCD2#也为高电平;PCI1510给出的VCCD0、VCCD1均为高电平,POWER_EN#也为高电平,U300和U301没有电源输出,转接卡的PCI插座上也没有电源,同时插座上的信号线均处于高阻状态;在待测PCI板卡插入后,当操作者合上CON300时,CARD_IN为低电平,CCD2#也变为低电平,PCI1510检测到有板卡插入,给出VCCD0为高电平,VCCD1为低电平,在逻辑电路中,POWER_EN#为低电平,电源电路给PCI插座提供+5V和+3.3V(也可以增加电路提供+12V电源)电源,同时PCI1510激活板卡插座上的信号线,此时,待测PCI板卡开始正常工作。
当测试完毕时,操作者首先断开CON300。此时根据前面的分析可知,转接卡的PCI插座上的电源被切断,信号线处于高阻状态,这时,操作者可以在不关机的情况下拔下PCI板卡。
3 PCI板卡热插拔测试的软件实现
图1所示的 PCI-to-PCI转接卡在电气原理上类似于一款PCI-to-PCMCIA转接卡,常见的操作系统(如Windows XP, Windows 2000, Windows 98等)都支持PCMCIA板卡的热插拔,而且这些常见的操作系统都带有PCI1510的驱动程序。当本文所述PCI-to-PCI转接卡插入桌面计算机后,操作系统能自动装好转接卡的驱动程序。另外,待测PCI板卡插入转接卡的PCI插槽后,操作者合上控制开关,操作系统将检测到外部板卡的插入,并将待测PCI板卡识别成CardBus板卡,这样就可以像测试CardBus板卡一样测试PCI板卡,从而实现了PCI板卡的热插拔测试。
要使本文所述转接卡正常工作,还必须正确配置图1中E2PROM芯片,本文所述转接卡的配置如表1所示。
尽管本文所述PCI-to-PCI转接卡对待测PCI板卡存在着一些限制,即要求待测PCI板卡是32位数据/地址总线,只使用(或不用)一个PCI中断(即INTA#),并且不使用SDO#和SDONE#信号线,不使用PCI总线上的JTAG接口, 但这对于一些常见的PCI板卡而言并不是一个问题,本文所述转接卡仍然具有广泛的适应性和较高的使用价值。
参考文献
[1] PC Card Standard release 8.0,www.PCMCIA.org.2001,4.
[2] 刘显庆,刘仁普.微机总线规范.北京:机械工业出版社,1995.
[3] PCI1510 Data Manual.www.ti.com.2004,12.
《电子技术应用》2007年第2期