摘要 熱插拔是Compact PCI總線技術中突出且最吸引用戶的技術,解決了用戶對系統穩定性和冗余性迫切的要求。文中分析了Compact PCI總線系統3種熱插拔技術的原理,以完全熱插拔技術為基礎,設計熱插拔系統,硬件采用熱插拔電源控制器LTC1643L和PCI橋接芯片PCI9030實現硬件功能板卡,軟件使用硬實時操作系統VxWorks。在分析VxWorks操作系統結構以及設備驅動程序結構后,結合PCI9030的設備配置空間的特點,編寫VxWorks下Compact 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#被激活,同時激活熱插拔監控軟件,監控軟件判斷熱插拔類型并經行相關操作。軟件連接過程是軟件層同系統連接或斷離的過程。對于板卡的插入,過程包括分配系統資源,包括IO空間、內存空間、中斷號,加載設備驅動程序并激活應用軟件。根據系統要求的不同,熱插拔系統有3種模型: (1)基本熱插拔模型。最基本的熱插拔方式需要用戶干預,用戶通過控制臺通知操作系統將進行設備卡的插入或拔出。 (2)完全熱插拔模型。完全熱插拔是在基本熱插拔模型的基礎上,在設備卡的插入拔出機構中添加一個微開關裝置,這個開關藏在手柄中,在設備的插入和拔出過程中激活枚舉信號,及ENUM#信號,該信號通過中斷的方式通知操作系統將要插入或拔出一個設備卡,操作系統再執行總線枚舉,資源分配,安裝驅動程序或卸載驅動程序。 (3)高可用性模型。在完全熱插拔模型基礎上對板卡實行了更高程度的控制,不僅是指示板卡的插入或可拔出的狀態。這種模型的軟件能夠控制板卡的硬件連接,這就使得軟件能對發生故障的板卡立即進行總線或電氣上的隔離,并啟用冗余板卡,滿足系統始終處于運行狀態、幾乎沒有故障的高可用性目標。 2 系統的硬件設計 系統在X86系統主機下,設計為一個IO適配卡,通過以上分析可知,具備熱插拔能力的CompactPCI板卡必須具有電源管理模塊,完成對板卡的上電操作及Healthy#信號獲取,目前市場已有Compact PCI熱插拔電源管理的專用芯片,典型的是Liear公司的LTC1643L;其二是板卡上的橋芯片必須支持系統熱插拔,本文采用PLX公司的 I9030,其提供了完善的熱插拔功能。系統的硬件框圖如圖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 All.h文件中添加#define cpci9030.h,然后在sysLib.c中加入include“cpci9030.c”。在cpci9030.c中主要實現以下函數: syscpciInit(),設備資源初始化函數,主要的作用是讀取系統分配給采集卡的地址映射空間,包括內存空間和IO空間,以及設備的中斷號,調用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技術的不斷成熟,熱插拔技術會受到越來越多的重視,并向高可用性熱插拔技術發展,以及雙系統冗余技術的實現,在未來將會改變計算機系統的特性。 |