劉 貞
(北京全路通信信號研究設計院有限公司,北京 100073)
近年來,以太網作為一種高效、便捷的通信方式逐漸應用于鐵路信號設備通信領域。通過架設封閉物理網絡并配合安全通信協議,可以構建相對安全的數據通信網絡。
鐵路信號系統設備復雜多樣,涉及不同廠家、不同歷史年代的產品,故數據通信總線接口種類繁多,如CAN總線、RS-485/422總線、profibus總線等。當不同總線類的設備需要互聯互通時,就需要總線接口轉換裝置,一般稱之為接口適配器或網關[1]。本文介紹一種基于嵌入式系統的以太網轉CAN總線設計方案,盡管目前此類設備較多且早已上市,但直接應用信號系統還有諸多不足,主要原因可歸結為以下幾類[2]。
1)通信參數配置繁瑣,不便于工程施工。
2)沒有監測功能,系統無法獲知其實時工作狀態,無法記錄上下行原始數據,不便于故障分析處理。
3)通信端口不具備防雷功能,遠距離連接時需要加額外的防雷保護器。
因此,有必要開發一種面向信號系統應用的以太網轉CAN設備,克服上述缺點。
以太網轉CAN網關屬于數據轉發類設備,安全等級要求為SIL0級,即非安全類設備,需要在設計時重點考慮其數據轉發效率和施工便捷性,但安全性也不容忽視。
系統采用單CPU架構,處理器選用AMCC公司的P o w e r P C405E P,其運算速度達到608?DMIPS,足以保證雙向數據轉發的運算要求[3]。如圖1所示,網關包含3路獨立CAN通信接口和2路獨立以太網接口,另外還提供CF卡接口通道,方便更新應用程序和網絡通信配置數據。

PPC405EP片內集成了EMAC/MDIO模塊,直接外擴Intel?LXT971?PHY芯片,即可快速地實現OSI模型中數據鏈路層和物理層的功能。LXT971是快速以太網物理層自適應收發器,支持IEEE?802.3標準,提供MII接口,能夠與PPC405EP中的EMAC/MDIO模塊無縫連接。支持10/100?Mbit/s全雙工數據傳輸。
CAN總線接口芯片采用PHILIPS公司的SJA1000,該芯片具有64?Byte先進先出FIFO,支持CAN2.0B協議,位速率可達1Mbit/s。由于其總線為數據、地址復用模式,需要單獨的ALE信號,而PowerPC405EP的外部總線為數據、地址分離的Motorola模式,故要采用一些中間轉換環節以使兩種總線相互匹配。
如圖2所示,利用CPU的R/W、A27和CS3控制信號的邏輯組合可以產生ALE信號,A27為低電平時ALE端可產生高電平鎖存地址信號。SJA1000的TX和RX信號經過光電隔離后,由TJA1050T轉換為符合CAN電氣標準的差分信號[4]。

3.1.1 驅動程序層次結構
以太網轉CAN網關采用嵌入式Linux操作系統,SJA1000作為非常規新增外設,需要撰寫新的設備驅動程序供OS系統內核調用。
如圖3所示,網關應用程序運行在OS最頂層;設備驅動程序運行在OS最底層,可直接操作外設芯片SJA1000的內部寄存器。設備驅動程序向OS內核注冊成功后,應用程序通過open、read和write操作指令調用設備驅動程序,最終實現對SJA1000的寄存器級操作,完成CAN通信功能。

3.1.2 SJA1000驅動程序軟件工作流程
在本系統中將SJA1000定義為字符型設備,其驅動流程主要有以下步驟。
1)設備注冊及初始化。
2)接收應用程序需要發送的CAN數據幀,并傳送至CAN控制器SJA1000。
3)響應CAN總線接收中斷,讀取CAN接收數據幀并通知應用程序。
4)CAN控制器出錯處理。
驅動程序將上述功能封裝在open、close、write、ioctl等函數中以便應用程序調用,運行流程如圖4所示。Linux操作系統上電之后開始啟動應用程序,在其調用open()函數時,執行SJA1000的初始化工作,諸如設定波特率、驗收濾波器、輸出方式等相關參數。而ioctl()函數則負責向系統注冊CAN接收中斷處理服務函數。
當CAN控制器接收到來自其他設備的數據幀時,SJA1000的中斷引腳會輸出低電平向PPC申請接收中斷,內核的中斷處理程序會將接收數據讀出并寫入接收緩存,同時通知應用程序,由其通過read()函數將緩存讀出。
CAN數據發送采用主動模式,由應用程序調用write()函數將數據直接寫入SJA1000發送緩沖寄存器,通過查詢狀態寄存器以確認該幀是否成功發送。

另外,由于應用場所不同,總線所處電磁環境及干擾水平也會有差異,總線由于受干擾而產生錯誤不可避免,驅動程序中會有專門的錯誤中斷處理程序,在CAN控制器報告總線錯誤時及時處理,故障嚴重時要立即復位總線。
3.2.1 CF卡總線地址分配
CF卡通過CPLD譯碼,直接掛接在PowerPC的EBC總線,工作在Memory模式,占用片選CS4。CF卡內部的8個控制寄存器通過CPU地址線A31~A29、OE及WBE0組合譯碼后進行讀寫訪問。CPU訪問CF卡控制寄存器的基地址為0xF0500000,詳細地址分配如表1所示。

表1 CPU訪問CF卡控制寄存器地址分配列表
3.2.2 CF卡讀寫操作
CF卡內部數據以扇區為單元進行存儲,每個扇區為512?Byte,對其讀寫操作必須以扇區為單位。CF卡內部集成ATA控制器,對外提供8個功能寄存器,CPU對內部扇區的訪問都要通過讀寫上述功能寄存器。
如圖5所示,寫一個扇區的流程如下。

1)寄存器寫入扇區地址。
2)向命令寄存器寫入命令字“0x30”。
3)讀取狀態寄存器值為“0x58”,以表明其準備好。
4)向數據寄存器連續寫入512?Byte,扇區內偏移地址會自動加1。
5)檢查狀態寄存器是否為“0x50”,確保寫入扇區成功。
CF卡的讀操作和寫操作類似,在此不再贅述。
3.2.3 FAT32文件系統
為了便于應用軟件升級更新、通信參數快速配置,將Linux?kernel、文件系統、應用程序和配置文件以FAT32格式存儲于CF卡中,這就需要uboot在引導系統啟動時可以直接讀取CF卡中的數據,并支持FAT32文件系統。
FAT文件系統源于DOS系統,早期用于對大容量磁盤驅動器的數據管理,按照柱面、磁頭、扇區對存儲區進行尋址操作。CF卡沒有柱面和磁頭的概念,內部僅以扇區的方式管理。
FAT32對數據按簇管理,每個文件占用整數倍個簇空間,MBR中記錄著當前分區的起始扇區、結束扇區、文件系統類型、FAT表個數、每簇占用扇區數等參數。讀取FAT32格式的文件數據時,需要初始化上述變量,通過查詢文件名找到文件存放的簇地址,讀完一簇后獲得下一簇的地址,直至所有數據讀取完畢[5]。
作為以太網轉CAN的網關設備,應用程序的主要任務就是實現數據的雙向轉發,Linux系統提供的多任務調度機制,將總任務按照功能類別劃分為多個線程,可以獲得相對最簡軟件架構。不同線程間呈現較低的耦合度,為軟件升級和多人合作開發提供最大便利。為此,本系統任務線程主要包括以下幾種。
1)以太網、CAN通信參數初始化線程。該線程主要完成Socket參數的初始化工作,配置當前設備的IP、發送及接收端口;同時配置每個CAN通道的波特率、屏蔽碼、驗收濾波器等參數。配置成功后該線程主動掛起,直至有其他線程將其喚醒并重新執行配置初始化操作。
2)下行數據轉發,即以太網通道數據接收、CAN通道發送線程。該線程循環監聽接收以太網端口,當收到有效UDP數據包后,根據通信協議將其拆分為CAN數據幀,寫入相應CAN通道的發送緩沖區,觸發CAN發送流程。應用程序僅負責將所要發送的數據一次性填入發送隊列,在驅動層通過查詢和中斷配合的方式,依次完成逐幀發送。
3)上行數據轉發,即CAN通道數據接收、以太網通道數據發送線程。當CAN通道有數據接收時,驅動層中斷處理程序將SJA1000接收緩存中的數據讀入內存中并通知應用程序,應用程序響應后將多個CAN幀序列按協議組成大包數據,以UDP包的形式發送至以太網通道。
4)監測數據發送進程。根據設定周期間隔,系統將設備當前運行狀態發送至監測機,同時將上下行的原始數據打包后同步發至監測機。
在信號系統中,控制中心指令數據和設備狀態數據都以固定周期循環發送,以太網轉CAN網關僅負責透明轉發。
對于上行數據(CAN接收,以太網發送),無論對端設備是否存在或以太網通道建立與否,數據以UDP包形式單次發送后立即釋放發送緩沖區,陳舊歷史數據不會殘留至內存,亦不會再次被發送。
但對于下行數據(以太網接收、CAN發送),由于CAN總線錯誤或過于繁忙,某一幀堵在隊列內長時間無法發送,直到總線恢復健康或其他節點釋放總線,該隊列內的幀才會被逐一發送。這勢必會造成不可預知的安全隱患,因此,必須將過期數據及時清除。具體實現方法:設備接收到以太網數據包后記錄一個本地時間戳,該數據包內的數據通過CAN總線發送時檢查當前時間和該包接收時刻的時間差是否在允許范圍內,超過閾值則直接丟棄。
根據鐵路信號系統應用的特點,設計了一種以太網轉CAN接口的方案,較既有成熟產品增加了CF卡數據配置功能,提供獨立的監測數據發送以太網專用通道。針對信號系統對傳輸指令數據時效性的要求,對過期數據及時清除,防止陳舊的歷史數據被錯誤轉發而造成安全隱患。經前期實驗室驗證表明,該方案通用性強、便于維護,具有良好地用戶體驗,在信號控制系統中應該具有良好的應用前景。
[1] 王永翔, 王立德.多播交換式CAN總線與以太網互聯網關設計[J].電子測量與儀器學報,2007,21(3):83-87.
[2] 李加升, 李寧, 曾哲.基于CAN總線與以太網的嵌入式網關設計[J].現代電子技術,2009, 32(14):69-77.
[3] 葉梅, 趙京偉, 初元萍.嵌入式Linux系統在PowerPC上的實現[J].核電子學與探測技術,2006, 26(5):614-617.
[4] Philips Semiconductors.SJA1000 Stand-alone CAN controller.2000.
[5] Microsoft Corporation.Microsoft Extensible Firmware Initiative FAT32 File System Specification.