cPCI臺熱切換原理和實現(xiàn)
摘要:描述了cPCI平臺實現(xiàn)熱切換的動作機制,引入一種方法將cPCI設(shè)備熱插拔動作轉(zhuǎn)為獨享中斷,用LED指示處理進程,并給出依此方法實現(xiàn)無控制臺進行全熱切換的軟硬件設(shè)計方案。
關(guān)鍵詞:cPCI 熱切換 即插即用 設(shè)備驅(qū)動中斷服務(wù)程序
cPCI(即Compact PCI)是PICMIG制定的、更加堅固耐用的PCI版本,廣泛應(yīng)用于工業(yè)和嵌入式控制系統(tǒng)中。它在電氣、邏輯和軟件功能方面與PCI完全兼容。除機械特性不一致外,cPCI與PCI最大的差別在于cPCI具有支持熱切換(HotSwap)的能力。隨著電子產(chǎn)品成本的下降和市場對工業(yè)產(chǎn)品尤其是電信應(yīng)用產(chǎn)品可靠性要求的提高,基于cPCI平臺的設(shè)計逐漸成為電信設(shè)備廠商的首選。
1 cPCI熱切換原理
1.1 熱切換基礎(chǔ)
cPCI標(biāo)準(zhǔn)定義的機械、電氣特性是實現(xiàn)熱切換的基礎(chǔ)。它采用的連接器符合IEC917和IEC1074-101標(biāo)準(zhǔn),其插針引腳分別有最長、中長、最短三種長度。當(dāng)插入一個卡到插槽時,首先最長的引腳(電源和地)被連接,卡邏輯將所有PCI信號引腳預(yù)設(shè)到一個固定電平1V;接著是中長度引腳的PCI信號連接,這些信號的電平已經(jīng)固定且尚未開始,不會對系統(tǒng)造成干擾;最后才輪到最短的此腳,即BD_SEL#信號連接,告知卡邏輯可以開始工作??ò纬龅捻樞蛘孟喾?,BD_SEL#首先斷開,PCI信號被調(diào)整到一固定電平,最后才斷開電源和地信號。在電路方面,cPCI增加一個ENUM#信號,即系統(tǒng)枚舉信號。當(dāng)一個cPCI設(shè)備卡被插入或拔出時,ENUM#被激活。
除cPCI本身的特性以外,要實現(xiàn)熱切換,具有支持即插即用(PnP)的操作系統(tǒng)也是必要條件之一,只有支持PnP才能實現(xiàn)設(shè)備驅(qū)動程序的動態(tài)安裝和卸載。
1.2 三種層次熱切換
1.2.1 基本熱切換
最基本的熱切換方式需要用戶干預(yù)。用戶通過控制臺通知OS(操作系統(tǒng))即將進行設(shè)備卡插入或拔出。當(dāng)插入一個卡時,其詳細流程如下:
(a)通過系統(tǒng)界面,用戶通知OS即將在一個槽中插入一個卡;
(b)用戶插入卡,對卡完成上電初始化;
(c)用戶通知系統(tǒng),卡已經(jīng)插入,要求OS重新枚舉總線;
(d)OS執(zhí)行總線枚舉,確定新卡需要的資源;
(e)OS對卡的PCI配置寄存器編程,向其分配資源;
(f)OS裝入適當(dāng)?shù)脑O(shè)備驅(qū)動程序,并調(diào)用其初始化代碼;
(g)設(shè)備驅(qū)動程序初始化完成,卡開始工作。
當(dāng)拔出一個卡時,流程類似,需要用戶預(yù)先通知OS將要拔出設(shè)備卡,OS卸載設(shè)備驅(qū)動程序并回收設(shè)備資源后,才能拔出設(shè)備。
1.2.2 全熱切換
全熱切換是在基本熱切換的基礎(chǔ)上,在卡的插入/拔出機構(gòu)中添加一個微開關(guān)裝置。這個開關(guān)藏在手柄中。當(dāng)cPCI卡被插入或拔出時,在卡開始或??üぷ髦?,微開關(guān)首先改變狀態(tài),產(chǎn)生ENUM#信號,該信號通過某種途徑通知OS將要插入或拔出一個卡,OS再執(zhí)行總線枚舉、安裝驅(qū)動程序或卸載驅(qū)動程序等動作。
1.2.3 高可用性熱切換
高可用性熱切換是在全熱切換的基礎(chǔ)上建立的。它要求在系統(tǒng)卡和每個設(shè)備卡之間實現(xiàn)點對點的RST#和信號隔離。這使OS可以自動隔離一個壞卡,然后將一個替代卡(已經(jīng)安裝)啟動,接著壞卡繼續(xù)工作。所以它通常也稱作無縫切換或無間斷切換,是一種冗余設(shè)計方案。
三種熱切換的自動化層次不同,實現(xiàn)的復(fù)雜程度也各有不同。下面介紹一種支持全熱切換的cPCI平臺的HotSwap子系統(tǒng)實現(xiàn)方案,對其硬件電路和軟件設(shè)計分別進行介紹。
2 cPCI熱切換子系統(tǒng)硬件實現(xiàn)
2.1 橋接芯片
在硬件電路上需要一兼容cPCI規(guī)范的PCI-to-PCI的橋接芯片,以便熱插拔卡時實現(xiàn)引腳控制邏輯和支持全熱切換功能。以PLX PCI6150為例,它提供一個HotSwap寄存器,記錄設(shè)備插拔狀態(tài),其定義如表1所示。
表1 HotSwap寄存器定義
bit15~8 | 7 | 6 | 5,4 | 3 | 2 | 1 | 0 |
保留 | INS | EXT | PI | LOO | PIE | EIM | DHA |
DHA:Device Hiding Arm,設(shè)備隱藏處理,在設(shè)備卡剛插入尚未正常工作前或被驅(qū)動程序停止之間可隱藏后級總線設(shè)備。
EIM:Enable or Disable ENUM#,使能或禁止ENUM#輸出。
PIF:Pending Insert or Extrace act,暫時掛起插入或者拔出動作。
LOO:LEN On or Off,LED指示控制,與芯片的LED引腳相對應(yīng)。
PI:Programming Interface,可編程接口,軟件觸發(fā)插入/拔出等動作。
EXT:Extraction State,拔出狀態(tài)位,當(dāng)微開關(guān)斷開時,此狀態(tài)位為1。
INS:Insertion State,插入狀態(tài)位,在PCI6150上電復(fù)位成功后,此狀態(tài)位為1。
2.2 硬件電路邏輯
系統(tǒng)卡電路在邏輯上就是一普遍PC主機板,它與熱切換相關(guān)的部分集中在對來自cPCI連接器的ENUM#信號的處理。在設(shè)計時,將它接在系統(tǒng)板Super I/O芯片Winbond W83627HF的IRQIN0引腳,以擴展中斷輸入的ISA中斷方式實現(xiàn)。這樣設(shè)計的好處是:可避免與其它PCI設(shè)備共享中斷,而獨點一個中斷以保證中斷的響應(yīng)速度;該引腳輸入是可編程的,可根據(jù)系統(tǒng)的中斷使用情況分配任意空閑中斷;而且該中斷可以不掛靠任何物理設(shè)備而獨立存在,這樣驅(qū)動程序也就可以設(shè)計成一靜態(tài)服務(wù)程序,靜態(tài)服務(wù)程序安裝/卸載比物理設(shè)備驅(qū)動程序要簡單得多。ENUM#是低電平有效,而IRQIN0輸入是邊沿觸方式,需要一邏輯電路進行轉(zhuǎn)換。系統(tǒng)卡邏輯框圖如圖1所示。
設(shè)備卡電路中與熱切換相關(guān)的部分是微開關(guān)電路和狀態(tài)LED驅(qū)動,PCI6150的ENUM#信號直接與cPCI連接器的同名信號相連。EUNM#信號還和LED信號一起被用來驅(qū)動一雙色LED,ENUM#信號為低時,LED被驅(qū)動為紅色閃爍;ENUME信號為高、LOO信號為高時LED被驅(qū)動為紅色,LOO信號為低時LED信號被驅(qū)動為綠色。設(shè)備卡邏輯電路如圖2所示。
整個系統(tǒng)電路的邏輯工作是:當(dāng)設(shè)備卡插入時,PCI6150上電初始化,芯片邏輯置HotSwap寄存器INS狀態(tài)位,觸發(fā)ENUM#信號為低,LED閃爍紅色,ENUM#經(jīng)cPCI底板到達系統(tǒng)卡,經(jīng)電平/邊沿轉(zhuǎn)換,生成中斷請求有效信號IRQIN0,處理器響應(yīng)中斷,進入中斷服務(wù)程序,ENUM#信號被撤除,設(shè)備驅(qū)動程序成功安裝后置LOO位,狀態(tài)指示為紅色,設(shè)備開始工作。當(dāng)要拔出設(shè)備卡時,EJECT微開關(guān)先被斷開,PCI5160置HotSwap寄存器EXT位,激活ENUM#信號,狀態(tài)LED為閃爍紅色,處理器響應(yīng)中斷,ENUM#被撤除,通知OS卸載設(shè)備驅(qū)動程序,之后熱交換軟件清LOO位,狀態(tài)LED指示藍色,設(shè)備可以安全拔出。整個過程無需用戶與操作系統(tǒng)交互,根據(jù)LED的顯示即可判斷卡的工作狀態(tài),安全順利實現(xiàn)熱切換。
3 cPCI熱切換子程序軟件實現(xiàn)
軟件系統(tǒng)的目標(biāo)是實現(xiàn)中斷的響應(yīng)處理,與操作系統(tǒng)交互,以正確及時地安裝或卸載對應(yīng)的設(shè)備驅(qū)動程序,確保整個軟件系統(tǒng)安全運行。
3.1 軟件分層設(shè)計
本系統(tǒng)軟件分成三層:最底層為設(shè)備驅(qū)動程序hotswap.sys,它執(zhí)行與硬件相關(guān)的操作,如響應(yīng)熱切換過程中產(chǎn)生的中斷事件、對Hotswap寄存器的操作,包括控制LED指示、清除INS/EXT狀態(tài)位、隱藏設(shè)備等;中間層為熱切換處理程序,一個由HSMonitor.exe創(chuàng)建的建立線程,一方面接收來自驅(qū)動程序的通知,另一方面通知OS重新枚舉cPCI總線或卸載某一設(shè)備驅(qū)動程序;最上層為一圖形界面應(yīng)用程序HSMonitor.exe,為用戶提供可見的設(shè)備插拔動態(tài)信息。軟件結(jié)構(gòu)如圖3所示。
3.2 軟件流程
ENUM#信號有效時,首先設(shè)備驅(qū)動程序hotSwap.sys的中斷服務(wù)程序被執(zhí)行,中斷服務(wù)程序掃描整個cPCI總線,讀取PIC6150的熱切換寄存器,清除相應(yīng)狀態(tài),并根據(jù)設(shè)備的INS/EXT狀態(tài)位建立設(shè)備變更清單,通知熱切換處理線程。熱切換線程讀取設(shè)備變更清單,如果有剛插入的設(shè)備,則通知OS重新枚舉cPCI總線,如果有待拔出的設(shè)備,則利用設(shè)備槽信息(總線號/設(shè)備號)換算成PnP DevNode地址,通知OS移除該DevNode。OS在移除一個DevNode后或枚舉總線時發(fā)現(xiàn)了新設(shè)備則發(fā)消息到應(yīng)用程序HSMonitor.exe,該應(yīng)用程序被設(shè)計成每次開機時自運行且注冊為該消息的接收者。HSMonitor.exe獲取剛被處理過的DevNode及處理結(jié)果。包括設(shè)備驅(qū)動加載成功、設(shè)備被成功移除等,以日志形式顯示到控制臺,供用戶查詢。
cPCI平臺產(chǎn)品因為其可靠性和堅固性逐漸被國內(nèi)電信設(shè)備三商采用,本設(shè)計中的cPCI平臺產(chǎn)品被廣泛應(yīng)用于語音呼叫中心和自動應(yīng)答系統(tǒng),其基于cPCI的全熱切換設(shè)計保證了系統(tǒng)的不間斷運行,極大地提高了系統(tǒng)可靠性。本產(chǎn)品近一年的市場應(yīng)用表明,該設(shè)計方案成本低廉,容易實現(xiàn),用戶使用方便。
評論