利用PCI1510實現PCI板卡的熱插拔測試
對于普通的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總線沒有板卡插入識別信號,所以在設計時增加了一個控制開關。當控制開關斷開時,表示沒有待測PCI板卡插入;當有待測PCI板卡插入時,操作者合上控制開關,通知系統已有待測PCI板卡插入,此時控制邏輯電路接收此信號并按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的設計規范[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#有一個為高電平時,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.
評論