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