王 昊,王 維
(中鐵工程設計咨詢集團有限公司,北京 100055)
列車超速防護系統(Automatic Train Protection,ATP)是既有高鐵、地鐵運行控制系統和處于研發階段的C1 列控系統、下一代列控系統的重要組成部分之一。其主要作用是保持列車間的安全間隔,使列車在符合限制速度的標準下安全、高效運行。目前我國高速鐵路設備的研發已經取得了世界領先的成績,尤其是具有完全自主知識產權的列控系統[1]。
由于ATP 主機與外圍設備通信內容和接口的多樣化,導致其硬件構成比較復雜。一套完整的ATP 主機往往由多塊板卡構成,比如主控板卡、無線通信板卡、采集板卡等;部分安全板卡上有多塊處理器。目前主流的200C、300T 等ATP 主機在軟件調試和測試過程中,需要采用串口或JTAG 等方式對不同的處理器進行編程,以JTAG 接口對FLASH 存儲器編程為例,需要PC 機發送指令或數據到JTAG 兼容芯片的邊界掃描寄存器,然后將寄存器中的指令或數據通過JTAG 專用指令傳送給FLASH,整個過程需要有PC 機上的軟件進行控制[2]。列車在運營階段,如果需要升級車載設備代碼,通常由電務人員進行人工燒錄操作,而且由于各處理器需要燒錄的程序不一樣,繁重的工作量會導致人為原因出現差錯的可能性,并且沒有一種有效的手段去監測燒錄過程中人為因素或通信故障出現的錯誤,會造成安全隱患;同時因為需要電源、仿真器等外圍設備,并且JTAG 口往往都未引出到設備面板外,經常性的拔插操作對板卡硬件的壽命有不良影響。為解決這一問題,提出一種基于嵌入式的多處理器系統程序自動更新和監測方法。
一套完整的ATP 主機比較復雜,一般由多塊板卡構成,包括主控板卡和多塊用于接收和解析BTM、TCR、無線信息模塊等數據的通信板卡。基于ATP 主機的可靠性和復雜度,在研發階段,大部分板卡間的通信方式都設計為串行通信。因此,這些通信板卡圍繞主控板卡構成多層次串行通信關系。本文旨在通過向主控板卡插入存儲有目標程序的U 盤、TF 卡或移動硬盤等便攜式存儲設備,達到ATP 主機自動并有選擇地更新有軟件升級需求的板卡。
ATP 主機包含多塊板卡和可編程芯片,將主控板卡上的處理器定義為一級處理器,與一級處理器直接通信的通信板卡上的處理器定義為二級處理器,后續與二級處理器通信并且與一級處理器無通信接口的處理器定義為三級處理器,依次類推,結構如圖1 所示。受篇幅所限,本文內容僅涉及三級通信結構。

圖1 多級處理器結構Fig.1 Multiprocessor architecture
ATP 系統啟動時,檢查外設接口狀態,若未檢測到外設,則進行軟件自檢,自檢完成后進入工作模式;若有外設接入,則進入更新模式。為防止列車在運行過程中進入更新狀態而出現運營事故,主控板卡在進入工作模式后,關閉USB 中斷或跳過檢測相應外設接口任務。
一級處理器在更新狀態下,向其后級處理器發送等待指令使其后級處理器處于等待狀態,同時發送從外設中獲取目標程序的名稱和版本號。二、三級處理器接收相關信息后,與當前程序進行對比,判斷是否需要更新。若無需更新,則向一級處理器發送相關指令,并對外發出表示無需更新的信號;若需要更新,則向一級處理器發送需求指令并進入更新狀態。一級處理器接收到后級需求指令后,有選擇地獲取外設中的目標程序。二、三級處理器接收和替換相應程序,更新完畢后,向一級處理器發送相關指令,并對外發出更新完畢的信號。一級處理器收到所有后級指令后,各級處理器恢復工作狀態,如圖2 所示。
通過各板卡對外發出提示信號,工作人員可以清楚地知道系統當前的更新情況,防止出現因外設中更新程序名稱或版本號錯誤導致的應更新而未更新的情況。

圖2 程序文件識別流程Fig.2 Program files identification process
處理器上電后將FLASH 中的程序調入到RAM 中運行,由于FLASH 上已經沒有程序運行,因此可以安全地對其進行燒寫,而不會影響系統的程序運行[3]。為保證目標程序的正確性,在程序燒錄過程中,將RAM 作為接收目標程序的緩沖區。在接收符合版本號的程序完畢后,對其進行校驗,校驗無誤后就可以把RAM 緩沖區里的目標程序燒寫到FLAH 中了。FLASH 燒寫完畢后,對其內容進行校驗,以確保FLASH 中的程序無誤。
設備更新過程中不可避免會遇到意外斷電、通信中斷或是人為停止更新等情況[4]。在上述情況發生的前提下,必然會導致FLASH 中的代碼不全,從而導致設備上電重啟后無法正常更新或工作。為防止此類情況發生,可以在FLASH 中開辟一塊空間,存儲庫函數和用于外設接口檢測、執行燒錄的程序等,在每次自動更新的過程中,該區域的代碼不能被修改。以TMS320F2833X 系列DSP 為例,程序是從DSP2833x_CodeStartBranch.asm 文件中定義的codestart 處開始,其指定位置在CMD 文件內定義,如下:
MEMORY
{
PAGE 0 :
BEGIN :origin=0x33FFF6,length=0x000002
...}
SECTIONS
{...
codestart : > BEGIN PAGE = 0
...}
ATP 系統對安全性和可靠性有很高的要求,目前國內外鐵路信號產品的安全計算機主要采用二乘二取二或三取二2 種結構[5]。“二取二”即為在1 套系統上集成兩套CPU 系統,兩套系統嚴格同步,實時比較,只有比較一致時才對外輸出運算結果;“二乘”即為兩套軟硬件完全一致的“二取二”系統工作,分別構成系統的A、B 系,兩系互為熱備[6]。三取二系統中,3 個處理單元獨立運行,兩兩進行數據比較,當某一個單元故障或數據與其他處理單元不一致時,去除該單元,系統降級為二取二模式[7]。
本文以一系二取二為例,一級板卡上的兩個相同一級處理器分別描述為CPU1、CPU2。兩個一級CPU 采集到外設的目標程序文件后,存儲到RAM 中,并進行校驗,此過程僅能確保兩個CPU獲取到的目標程序文件在內容上的正確性,并不能確定一致性。因此,CPU2 以一定的協議向CPU1發送目標數據,CPU1 將從外設采集并通過校驗的數據與CPU2 發送的輸入數據進行比較;如果數據比較后一致,則由CPU1 向后級處理器發送相應的目標程序;若數據交互比較有誤或至少一塊CPU中的更新程序未通過校驗,則一級處理器重新采集外設存儲的文件。
為防止因外設中程序內容的錯誤或交互通道的故障導致重復采集外設數據,可對采集過程進行計數,并根據重復采集原因對外發出相應提示信號,以便工作人員定位故障。更新系統通過多個相同的一級處理器之間的數據交互比較,確保在一級板卡內的目標文件數據是正確的,從而提高目標文件在傳輸過程中的安全性。
上述數據比較方法僅能確保一級處理器接收到目標程序的正確性,而且在二取二或三取二等安全控制系統中,串行通信多采用一對一方式。一般由1 個CPU 進行集中處理,其他CPU 基本無法對輸出的串行信號進行仲裁和監測,信息的接收和發送沒有真正實現N 取N。當1 個CPU 出現故障導致數據輸出異常時,從數據上很難定位異常的CPU,導致很難判斷異常原因,給系統的查錯帶來很大的困難;同時由于缺少其他CPU 的監測,在極端情況下會給系統帶來安全隱患[8]。
為確保向后級傳輸過程的無誤,本文采用雙通道比較方法。在數據后傳的過程中,一級CPU1通過通道1(串行總線)向后級處理器發送目標程序的同時,通過通道2 向CPU2 發送目標文件,如圖3 所示。CPU2 對兩個通道接收到的數據同自身數據進行比較,若數據比較結果不同,則向CPU1 發出數據有誤的信號;CPU1重新向后級處理器和CPU2 發送該數據,若重新發送數據步驟多次重復出現,則對外發出提示信號,此時可定位到通信通道發生故障,如圖4 所示。二級處理器向三級處理器發送更新程序時,也可采用上述方法。
CPU2 在比較雙通道和自身數據時,要嚴格遵循時間戳順序,即保證兩個通道和CPU2的時間戳保持一致,避免出現交互比較不同時間戳的數據而產生對更新效率和程序正確性不利的影響。為保證程序更新的效率和安全性,在更新過程中關閉所有與更新無關的中斷,以防止在程序更新過程中被其他任務打斷或接收到非更新程序的數據。本方法的有益效果在于,通過雙通道的數據比較,確保數據的安全性和同時性,避免目標文件在板卡內進行處理及傳輸時發生的錯誤,保障了從板卡輸出的目標文件是準確的,從而提高目標文件在系統內傳輸過程中的安全性和可靠性。

圖3 安全通信結構Fig.3 Secure communication structure

圖4 程序自動更新和監測流程Fig.4 Automatic program update and monitoring process
本文為解決車載ATP 主機在研發調試、測試、后期維護過程中頻繁或大批量更新程序遇到的人工失誤、數據傳輸故障等問題,提出上述程序自識別、更新、監測方法。該方法能夠自動識別復雜系統中有軟件更新需求的處理器,同時在自動升級過程中,對通信數據和存儲內容進行檢測,從而達到減少軟件升級過程中的人工操作和風險隱患的目的。本文內容不僅局限于鐵路信號設備和串口通信方式的應用,在其他領域的多處理器復雜系統的程序更新均可以此為參考。