徐 軍 張 磊 孫軍峰
應(yīng)用于軌道信號(hào)系統(tǒng)的車載信號(hào)設(shè)備,主要用于采集狀態(tài)數(shù)據(jù)和輸出控制指令,在運(yùn)行過(guò)程中通信數(shù)據(jù)量大,而且通信過(guò)程必須具備極高的安全性和可靠性。
車載信號(hào)設(shè)備開發(fā)過(guò)程中,需要考慮多種提高可靠性的設(shè)計(jì)方案,目前比較通用的方法就是進(jìn)行冗余容錯(cuò)設(shè)計(jì)。本文以某型車載信號(hào)系統(tǒng)預(yù)研為背景,利用雙口RAM接口電路簡(jiǎn)單、數(shù)據(jù)交互量大、傳輸速度高等特點(diǎn),設(shè)計(jì)了一種基于PowerPC和雙口RAM的冗余系統(tǒng),并采用新穎的角色輪換和自檢技術(shù),不僅保證了數(shù)據(jù)傳輸,而且也提高了系統(tǒng)的安全性。
車載信號(hào)系統(tǒng)主要由主處理系統(tǒng)MPS、安全I(xiàn)/O設(shè)備GVIO(General Vital I/O)和外部設(shè)備組成。MPS主要通過(guò)GVIO進(jìn)行數(shù)據(jù)收發(fā),與外部設(shè)備進(jìn)行通信,完成系統(tǒng)的狀態(tài)采集和控制功能。
GVIO作為通信接口模塊,支持多種接口與外部設(shè)備連接:通過(guò)RS-422與聯(lián)鎖設(shè)備連接;通過(guò)CAN接口與LKJ設(shè)備連接;通過(guò)RS-232與GPS信號(hào)連接;通過(guò)網(wǎng)口與無(wú)線傳輸模塊連接,并與軌旁控制系統(tǒng)進(jìn)行通信;通過(guò)安全I(xiàn)O接口進(jìn)行布爾量采集和輸出。
MPS和GVIO組成二取二的冗余系統(tǒng)架構(gòu),MPS由2個(gè)相同的處理模塊MCU1(1#CPU)和 MCU2(2#CPU)組成。MCU1和MCU2具有相關(guān)硬件和軟件,并且進(jìn)行完全相同的邏輯運(yùn)算處理,結(jié)構(gòu)框圖如圖1。
GVIO主要從外部接收數(shù)據(jù),并對(duì)2個(gè)MCU的數(shù)據(jù)進(jìn)行一致性表決,表決通過(guò)后的數(shù)據(jù),作為系統(tǒng)的最終輸出結(jié)果。
在MPS中,MCU1和MCU2包含微處理器MPC8248、RAM、Nor Flash、PCI控制器、雙口RAM;GVIO包含微處理器、RAM、PCI控制器和通信接口 (串口、CAN、以太網(wǎng))。
MCU和GVIO分別與雙口RAM的兩端相連,GVIO系統(tǒng)通過(guò)PCI總線與雙口RAM連接,MCU系統(tǒng)通過(guò)local bus總線與雙口RAM連接,時(shí)鐘模塊分別與MCU系統(tǒng)、GVIO系統(tǒng)通過(guò)時(shí)鐘信號(hào)線相連。
圖1 系統(tǒng)模塊框圖
雙口RAM是雙端口SRAM芯片,本設(shè)計(jì)采用CY7C028V-15AXI,最高15 ns讀寫速度,數(shù)據(jù)容量為64K x 16 bit,雙口RAM具有2套完全獨(dú)立的數(shù)據(jù)線 (D0~D15)、地址線 (A0~A15)和控制信號(hào)線 (片選、讀、寫、中斷、忙等信號(hào) )。CY7C028V-15AXI的邏輯模塊如圖2。
依據(jù)雙口RAM的工作原理,其兩端的CPU共享一個(gè)存儲(chǔ)器空間,允許MCU(MCU1/MCU2)和GVIO同時(shí)訪問(wèn)雙口RAM中相異的數(shù)據(jù)存儲(chǔ)單元,可以快速交換數(shù)據(jù),但是出現(xiàn)以下2種情況時(shí),雙端口存取可能會(huì)出現(xiàn)沖突問(wèn)題:①M(fèi)CU和GVIO同時(shí)向同一地址單元寫入數(shù)據(jù);②MCU和GVIO同時(shí)對(duì)同一個(gè)地址單元進(jìn)行操作,MCU寫入數(shù)據(jù),GVIO讀出數(shù)據(jù),或者M(jìn)CU讀出數(shù)據(jù),GVIO寫入數(shù)據(jù)。
MPS和外部設(shè)備之間傳遞的通信數(shù)據(jù),大部分都是安全相關(guān)數(shù)據(jù),這些數(shù)據(jù)的可靠性極其重要,如果發(fā)生數(shù)據(jù)異常,可能引起難以預(yù)料的結(jié)果。
圖2 雙口RAM邏輯模塊框圖
MPS主要負(fù)責(zé)系統(tǒng)的邏輯處理與控制,GVIO主要負(fù)責(zé)數(shù)據(jù)的接收和發(fā)送,MPS和GVIO通過(guò)雙口RAM進(jìn)行數(shù)據(jù)交互,整個(gè)系統(tǒng)處理流程如下:
1.GVIO通過(guò) RS-232、RS-422、CAN、以太網(wǎng)等接口,接收外部設(shè)備發(fā)送過(guò)來(lái)的數(shù)據(jù),并通過(guò)I/O接口采集相應(yīng)設(shè)備的布爾量數(shù)據(jù)。
2.GVIO將接收到的數(shù)據(jù),各拷貝一份相同的數(shù)據(jù),寫入到雙口RAM中,傳遞給MCU。
3.MCU1/MCU2從雙口RAM讀出數(shù)據(jù),并進(jìn)行邏輯運(yùn)算處理。
4.MCU1/MCU2將處理后的輸出數(shù)據(jù)放入雙口RAM。
5.GVIO分別從雙口RAM讀出MCU1和MCU2寫入的數(shù)據(jù),通過(guò) Safety-Coding-Arbitration進(jìn)行數(shù)據(jù)一致性處理,將處理后的數(shù)據(jù)發(fā)送給對(duì)應(yīng)的外部設(shè)備。
MPS和GVIO進(jìn)行數(shù)據(jù)交換的操作比較頻繁,而且數(shù)據(jù)交互過(guò)程需要滿足安全性、實(shí)時(shí)性和可靠性等要求。因此,MPS和GVIO雙口RAM進(jìn)行數(shù)據(jù)通信時(shí),必須滿足以下3個(gè)條件:①避免MCU和GVIO發(fā)生訪問(wèn)沖突;②提高M(jìn)CU和GVIO數(shù)據(jù)交互速度,不影響設(shè)備的數(shù)據(jù)通信量;③保證交互數(shù)據(jù)的完整性、正確性、可靠性。
為了滿足條件①,避免MCU和GVIO同時(shí)對(duì)雙口RAM的同一個(gè)內(nèi)存單元進(jìn)行訪問(wèn),本設(shè)計(jì)沒(méi)有采用雙口RAM的中斷或者信號(hào)量等機(jī)制,而是采用了一種環(huán)形緩沖收發(fā)機(jī)制,將128KB的雙口RAM劃分為2個(gè)獨(dú)立環(huán)形緩沖區(qū):發(fā)送環(huán)形緩沖區(qū) (63KB)和接收環(huán)形緩沖區(qū) (63KB)。
發(fā)送環(huán)形緩沖區(qū)負(fù)責(zé)將MCU傳遞給GVIO,最終發(fā)送給外部設(shè)備;環(huán)形緩沖區(qū)從GVIO接收到數(shù)據(jù),并傳遞給MCU。環(huán)形緩沖區(qū)如圖3所示。
圖3 環(huán)形緩沖區(qū)示意圖
發(fā)送、接收環(huán)形緩沖區(qū)都再分為寫入、讀出和測(cè)試3個(gè)區(qū)塊,每個(gè)區(qū)塊的大小都為21KB。
MCU與GVIO通過(guò)相同的外部時(shí)鐘中斷來(lái)驅(qū)動(dòng)數(shù)據(jù)處理軟件模塊的運(yùn)行,MCU與GVIO在對(duì)雙口RAM進(jìn)行訪問(wèn)時(shí)可以做到同步、流水線作業(yè)。
在同一個(gè)處理周期內(nèi),發(fā)送或者接收環(huán)形緩沖區(qū)中任何一個(gè)區(qū)塊,都有明確固定的角色,MPU板和HCU板不會(huì)同時(shí)訪問(wèn)操作相同區(qū)塊,只有一個(gè)板卡對(duì)特定區(qū)塊進(jìn)行訪問(wèn),避免了雙口RAM的訪問(wèn)沖突問(wèn)題。
MPS的運(yùn)行周期為600 ms,MPS按照周期進(jìn)行數(shù)據(jù)接收、處理和輸出。其中,用于數(shù)據(jù)處理的時(shí)間為300 ms,MPS接收、發(fā)送數(shù)據(jù)超過(guò)300 ms,也會(huì)影響邏輯處理功能。在接收發(fā)送處理階段,300 ms中的280 ms被分為20個(gè)發(fā)送接收子周期,每一個(gè)子周期的時(shí)間為14 ms。
讀寫雙口RAM的數(shù)據(jù)速率為1 KB/ms,寫入?yún)^(qū)塊或者讀出區(qū)塊,有效交互時(shí)間280 ms內(nèi),可以交互高達(dá)280KB的數(shù)據(jù),可以滿足系統(tǒng)的數(shù)據(jù)通信量。因此,通過(guò)該設(shè)計(jì)可以滿足條件②。
為了滿足條件③,保證在雙口RAM中傳輸數(shù)據(jù)的安全性和可靠性,采取2種安全數(shù)據(jù)處理措施:第一,通過(guò)Safety-Coding-Arbitration原理進(jìn)行數(shù)據(jù)一致性處理;第二,對(duì)雙口RAM進(jìn)行自檢,降低雙口RAM的硬件失效和功能性故障的風(fēng)險(xiǎn)。
3.3.1 數(shù)據(jù)一致性處理
Safety-Coding-Arbitration處理過(guò)程如下。
1.MCU1將要發(fā)送的數(shù)據(jù)Data1的CRCS進(jìn)行掩碼處理 (mData1),MCU2也對(duì)要發(fā)送的數(shù)據(jù)Data2的CRCS進(jìn)行掩碼處理 (mData2)。
2.GVIO從雙口RAM讀出經(jīng)過(guò)掩碼數(shù)據(jù)mData1和mData2,對(duì)mData1和mData2進(jìn)行一致性比較和合并處理。
CRCd=mCRC1⊕mCRC2⊕MASK
3.如果CRCS等于CRCd,則表示從MCU1和MCU2傳輸過(guò)來(lái)的數(shù)據(jù)是一致的,可以進(jìn)行合并后輸出,否則丟棄。
3.3.2 對(duì)雙口RAM自檢
應(yīng)用存儲(chǔ)器檢測(cè)算法對(duì)雙口RAM存儲(chǔ)功能性故障進(jìn)行檢測(cè)和診斷,能夠及時(shí)發(fā)現(xiàn)和定位雙口RAM的功能故障和硬件失效。檢測(cè)步驟如下。
圖4 數(shù)據(jù)交互流程圖
其中,存儲(chǔ)器模塊M,有n個(gè)存儲(chǔ)器陣列單元Ui;表示單元的狀態(tài)處于狀態(tài)值ν,其中ν∈{0,1},∈{0,1},i=1…n;表示單元的寫入狀態(tài)值ν;表示從單元的讀出狀態(tài)的狀態(tài)值為ν;▽D表示單元地址按降序變化;i△Di表示單元地址按升序變化。
以上的多種措施,可以提高雙口RAM數(shù)據(jù)交互的速度,也可以保證數(shù)據(jù)交互的安全性和可靠性。
通過(guò)相應(yīng)的軟件設(shè)計(jì)及周期性步驟,可以實(shí)現(xiàn)冗余系統(tǒng)的安全通信方案,周期性步驟如下。
1.讀出區(qū)塊內(nèi)容是否讀完,如果讀完,將該區(qū)塊設(shè)置的標(biāo)志變換為測(cè)試區(qū)塊,下個(gè)周期對(duì)該區(qū)塊進(jìn)行測(cè)試。
2.寫入?yún)^(qū)塊內(nèi)容是否寫完,如果寫完,將該區(qū)塊設(shè)置的標(biāo)志變換為讀出區(qū)塊,下個(gè)周期對(duì)該區(qū)塊進(jìn)行讀出。
3.測(cè)試區(qū)塊內(nèi)容是否測(cè)試完,如果測(cè)試完,將該區(qū)塊設(shè)置的標(biāo)志變換為寫入?yún)^(qū)塊,下個(gè)周期可以對(duì)該區(qū)塊進(jìn)行寫入。
4.對(duì)測(cè)試區(qū)塊進(jìn)行檢測(cè),是否發(fā)現(xiàn)硬件隨機(jī)失效,若有,在狀態(tài)交互區(qū)中進(jìn)行記錄狀態(tài)和告警信息。
在同一個(gè)周期,MCU和GVIO操作不同的區(qū)塊;通過(guò)周期輪轉(zhuǎn),各個(gè)區(qū)塊進(jìn)行角色輪換,如圖4所示。
分析冗余系統(tǒng)應(yīng)用雙口RAM的性能和安全性要求,提出了多種措施來(lái)保證數(shù)據(jù)交互的實(shí)時(shí)性、安全性和可靠性,并在實(shí)際項(xiàng)目中應(yīng)用,取得了良好的效果。
[1] 姜平,周榮根,肖紅升,等.基于雙口RAM的多機(jī)數(shù)據(jù)通信技術(shù)[J].儀表技術(shù)與傳感器,2005,15:105-107.
[2] 張遵偉,曹寶香,聶勝偉.基于雙口RAM的冗余架構(gòu)同步技術(shù)研究[J].計(jì)算機(jī)工程,2012,38(18):221-224.
[3] 李震.一種基于雙口RAM的環(huán)形數(shù)據(jù)緩存系統(tǒng)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20(1):201-204.