利用PCI1510實(shí)現(xiàn)PCI板卡的熱插拔測試
對于普通的PCI板卡,無論是總線的硬件結(jié)構(gòu)還是操作系統(tǒng)(如Windows序列操作系統(tǒng))都不支持熱插拔。在批量生產(chǎn)PCI板卡時(shí),必須在關(guān)機(jī)的情況下插拔PCI板卡,然后開機(jī)測試,因此測試工作十分費(fèi)時(shí)費(fèi)力。本文介紹利用TI公司的PCI1510制作一個(gè)PCI-to-PCI轉(zhuǎn)接卡,從硬件和軟件兩個(gè)方面實(shí)現(xiàn)PCI板卡的熱插拔。
1 系統(tǒng)總體結(jié)構(gòu)
利用PCI1510制作的PCI-to-PCI轉(zhuǎn)接卡的總體結(jié)構(gòu)框圖如圖1所示。在電氣原理上類似于一款PCI總線到CardBus總線的接口電路板,但在物理形式上,CardBus總線并沒有使用PCMCIA插座,而是使用PCI插座。由于PCI板卡的電源要求同PCMCIA板卡的電源要求相差很大,這款PCI-to-PCI板卡的電源處理方法同一般PCMCIA接口板的電源處理方法有較大的差別。
需要說明的是,一般PCMCIA接口板卡插入PCMCIA插槽后,系統(tǒng)能自動(dòng)識別板卡是否插入,但本文所設(shè)計(jì)的PCI-to-PCI轉(zhuǎn)接板卡,由于PCI總線沒有板卡插入識別信號,所以在設(shè)計(jì)時(shí)增加了一個(gè)控制開關(guān)。當(dāng)控制開關(guān)斷開時(shí),表示沒有待測PCI板卡插入;當(dāng)有待測PCI板卡插入時(shí),操作者合上控制開關(guān),通知系統(tǒng)已有待測PCI板卡插入,此時(shí)控制邏輯電路接收此信號并按PCI1510所要求的方式給出板卡插入識別信號。
圖1中的PCI-to-PCI轉(zhuǎn)接卡主要由以下幾個(gè)部分組成:總線轉(zhuǎn)換電路,主要由PCI1510及其配置電路24C02組成;控制邏輯電路,由ATF16V8C實(shí)現(xiàn),其作用是根據(jù)操作者手動(dòng)給出的開關(guān)信號向PCI1510給出相應(yīng)的板卡插入和拔出信號,同時(shí)給出電源開關(guān)電路的控制信號;電源開關(guān)電路,由兩片IRF7404組成,根據(jù)控制邏輯電路給出的電源控制信號,分別接通或斷開PCI插槽的+5V和3.3V電源(如果需要+12V電源,還要增加一片IRF7404)。
2 PCI板卡熱插拔測試的硬件實(shí)現(xiàn)
從硬件上講,對于圖1所示的PCI-to-PCI轉(zhuǎn)接卡,要實(shí)現(xiàn)外部PCI板卡的熱插拔,必須解決兩個(gè)問題:一是CardBus總線到PCI總線的轉(zhuǎn)換,二是要處理好轉(zhuǎn)接卡上PCI插座的電源問題。
2.1 從CardBus總線到PCI總線的轉(zhuǎn)換
根據(jù)PCMCIA的設(shè)計(jì)規(guī)范[1]可知,CardBus總線類似于PCI總線,但CardBus總線是一種點(diǎn)對點(diǎn)總線,與PCI總線有較大差別。
關(guān)于二者引腳的定義可以參考PCI設(shè)計(jì)規(guī)范[2]和PC卡設(shè)計(jì)規(guī)范[1]。下面著重?cái)⑹龆咭_定義的不同點(diǎn)并給出相應(yīng)的解決辦法:
(1)CardBus總線沒有IDSEL信號,而PCI總線和PCI橋芯片必須有IDSEL信號,用來支持對PCI橋芯片配置空間的讀和寫操作。由于CardBus總線是點(diǎn)對點(diǎn)操作,在它上面只有一個(gè)設(shè)備,因此可在本轉(zhuǎn)接卡PCI插座的IDSEL引腳通過一個(gè)電阻(阻值為4.7~33)接到3.3V電源;
(2)CardBus總線沒有SBO#和SDONE#信號,但一般的PCI板卡并不需要這兩個(gè)信號;
(3)CardBus總線不支持64位總線擴(kuò)展,這對32位總線的PCI卡不產(chǎn)生影響。本文所述轉(zhuǎn)接卡也不支持64位總線的PCI板卡;
(4)CardBus總線沒有JTAG引腳,而通常的PCI板卡并沒有利用JTAG功能,因而這一點(diǎn)并不影響本文所述轉(zhuǎn)接卡的適應(yīng)性;
(5)CardBus總線有CSTSCHG引腳,這是CardBus總線的獨(dú)有功能,PCI總線并不需要,因而在設(shè)計(jì)時(shí)將它懸空;
(6)CardBus總線有CAUDIO引腳,這也是CardBus總線的獨(dú)有功能,PCI總線也不需要它,因而在設(shè)計(jì)時(shí)將它懸空;
(7)CardBus總線有CCLKRUN#引腳,PCI總線中沒有該引腳,本文在設(shè)計(jì)中按CardBus接口設(shè)計(jì)要求將其通過330?贅電阻接地;
(8)CardBus總線只有一個(gè)INT#引腳,但對于常見的PCI板卡而言,通常只使用(或不用)一個(gè)PCI中斷信號INTA#,因而這個(gè)限制對大多數(shù)PCI板卡不構(gòu)成限制。
2.2 外部板卡插入的檢測和控制邏輯電路的設(shè)計(jì)
PCI1510有四個(gè)控制信號:CCD1#、CCD2#、CVS1和CVS2,用來檢測是否有外部板卡的插入,并判別插入板卡的類型。PCI1510是一款PCMCIA接口的接口芯片,對于PCMCIA接口而言,可以在PCMCIA插座上插入三種類型的板卡[1]:16位數(shù)據(jù)/地址總線的存儲卡,32位數(shù)據(jù)/地址總線的CardBus卡和CardBay卡。由于將CardBus總線當(dāng)作PCI總線使用,因而當(dāng)本文所述轉(zhuǎn)接卡的PCI插座上有待測PCI板卡插入時(shí),控制邏輯電路必須給PCI1510提供一個(gè)與CardBus板卡插入相似的板卡識別信號。
根據(jù)PCI1510的數(shù)據(jù)手冊[3]和PCMCIA卡設(shè)計(jì)規(guī)范[1],當(dāng)PCI1510檢測到CCD2#為低電平且CCD1#接CVS1、CVS2懸空時(shí),PCI1510認(rèn)為外部總線接口已經(jīng)插入一個(gè)CardBus板卡;而當(dāng)CCD1#、CCD2#有一個(gè)為高電平時(shí),PCI1510認(rèn)為外部總線上沒有板卡插入。因而本文按如下方式設(shè)計(jì)電路:CCD1#與CVS1短接,CVS2懸空,CCD2#通過上拉電阻接至可編程邏輯芯片ATF16V8C。PCI-to-PCI轉(zhuǎn)換卡邏輯電路和電源控制電路如圖2所示。
在圖2所示的電路中,U300和U301為電源開關(guān)芯片IRF7404,實(shí)際上它們是P溝道場效應(yīng)管,其輸入電源引腳分別接轉(zhuǎn)接卡上的+5V和+3.3V電源,輸出引腳則分別接至轉(zhuǎn)接卡PCI插座上的+5V和+3.3V電源引腳。U300和U301的控制信號由可編程邏輯芯片U302(ATF16V8C)的POWER_EN#提供。
U302的輸入信號為:CARD_IN、PCI1510提供的電源控制信號VCCD0和VCCD1,輸出信號為CCD2#和POWER_EN#。輸入輸出關(guān)系式為:
CCD2#=CARD_IN;
POWER_EN#= !VCCD0+VCCD1;
在轉(zhuǎn)接卡的PCI插座上沒有插入PCI板卡時(shí),CON300斷開,CARD_IN為高電平,此時(shí),CCD2#也為高電平;PCI1510給出的VCCD0、VCCD1均為高電平,POWER_EN#也為高電平,U300和U301沒有電源輸出,轉(zhuǎn)接卡的PCI插座上也沒有電源,同時(shí)插座上的信號線均處于高阻狀態(tài);在待測PCI板卡插入后,當(dāng)操作者合上CON300時(shí),CARD_IN為低電平,CCD2#也變?yōu)榈碗娖?,PCI1510檢測到有板卡插入,給出VCCD0為高電平,VCCD1為低電平,在邏輯電路中,POWER_EN#為低電平,電源電路給PCI插座提供+5V和+3.3V(也可以增加電路提供+12V電源)電源,同時(shí)PCI1510激活板卡插座上的信號線,此時(shí),待測PCI板卡開始正常工作。
當(dāng)測試完畢時(shí),操作者首先斷開CON300。此時(shí)根據(jù)前面的分析可知,轉(zhuǎn)接卡的PCI插座上的電源被切斷,信號線處于高阻狀態(tài),這時(shí),操作者可以在不關(guān)機(jī)的情況下拔下PCI板卡。
3 PCI板卡熱插拔測試的軟件實(shí)現(xiàn)
圖1所示的 PCI-to-PCI轉(zhuǎn)接卡在電氣原理上類似于一款PCI-to-PCMCIA轉(zhuǎn)接卡,常見的操作系統(tǒng)(如Windows XP, Windows 2000, Windows 98等)都支持PCMCIA板卡的熱插拔,而且這些常見的操作系統(tǒng)都帶有PCI1510的驅(qū)動(dòng)程序。當(dāng)本文所述PCI-to-PCI轉(zhuǎn)接卡插入桌面計(jì)算機(jī)后,操作系統(tǒng)能自動(dòng)裝好轉(zhuǎn)接卡的驅(qū)動(dòng)程序。另外,待測PCI板卡插入轉(zhuǎn)接卡的PCI插槽后,操作者合上控制開關(guān),操作系統(tǒng)將檢測到外部板卡的插入,并將待測PCI板卡識別成CardBus板卡,這樣就可以像測試CardBus板卡一樣測試PCI板卡,從而實(shí)現(xiàn)了PCI板卡的熱插拔測試。
要使本文所述轉(zhuǎn)接卡正常工作,還必須正確配置圖1中E2PROM芯片,本文所述轉(zhuǎn)接卡的配置如表1所示。
盡管本文所述PCI-to-PCI轉(zhuǎn)接卡對待測PCI板卡存在著一些限制,即要求待測PCI板卡是32位數(shù)據(jù)/地址總線,只使用(或不用)一個(gè)PCI中斷(即INTA#),并且不使用SDO#和SDONE#信號線,不使用PCI總線上的JTAG接口, 但這對于一些常見的PCI板卡而言并不是一個(gè)問題,本文所述轉(zhuǎn)接卡仍然具有廣泛的適應(yīng)性和較高的使用價(jià)值。
參考文獻(xiàn)
[1] PC Card Standard release 8.0,www.PCMCIA.org.2001,4.
[2] 劉顯慶,劉仁普.微機(jī)總線規(guī)范.北京:機(jī)械工業(yè)出版社,1995.
[3] PCI1510 Data Manual.www.ti.com.2004,12.