文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.179002
中文引用格式: 馬保全,姚旺君,劉云龍,等. 基于FPGA的EtherCAT從站通信鏈路分析與驗證[J].電子技術應用,2017,43(8):95-99.
英文引用格式: Ma Baoquan,Yao Wangjun,Liu Yunlong,et al. Analysis and verification of EtherCAT slave controller communication link based on FPGA[J].Application of Electronic Technique,2017,43(8):95-99.
0 引言
EtherCAT是由BECKHOFF提出的在工業控制領域獲得廣泛應用的現場總線之一,該總線具備全雙工工作模式,可基于主站(Master)和從站(Slave)連接的模式實現數據傳遞,且具有低延時、高安全性的特點。EtherCAT從站控制器ESC(EtherCAT Slave Controller)是從站模塊實現EtherCAT通信協議的關鍵,目前國內基于EtherCAT協議的通信功能基本都采用ET1100/ET1200等從站芯片來實現[1-4]。然而,由于這類芯片除基本通信功能外,還具備大量其他功能,而此類額外通信機制并不對我國技術人員公開,造成對此類通信芯片還無法實現完全自主可控,采用有效的安全機制提升系統安全性更是無從談起。隨著工業控制領域的信息安全問題日益突出,此類不可自主可控通信芯片的應用給我國核心控制系統的運行引入一定安全風險。為了實現對控制系統用通信芯片的完全自主可控,基于FPGA實現EtherCAT通信協議的自主化開發顯得非常必要,同時也是采用自主安全機制提升通信系統安全能力的重要前提。
基本通信鏈路是實現收發EtherCAT協議數據的核心,因此,本研究基于EtherCAT協議特征及數據傳遞機制,設計關鍵通信節點的FPGA狀態機,驗證FPGA實現EtherCAT從站控制器基本通信鏈路功能的可行性,為完善EtherCAT其他通信功能及安全機制奠定重要基礎。
1 EtherCAT從站控制器框架
EtherCAT主站與各從站之間的通信鏈路如圖1所示。通信過程中,數據幀遍歷所有從站設備,數據幀通過某一從站時,從站設備根據報文命令分析尋址到本機報文并進行讀/寫數據到指定位置,數據幀到達最后一個從站后,該從站把處理后的數據幀發送給主站。主站收到此上行電報后處理返回數據,一次通信結束[5-6]。
EtherCAT從站控制器主要包括數據幀處理單元、EBUS接口編碼/解碼模塊、Auto-forwarder模塊、Loop-back function模塊等。以ET1100/ET1200從站控制器為例,其內部框架如圖2所示,主要包括MII、EBUS接口,EtherCAT數據幀處理單元,現場總線內存管理單元(FMMU,Fliedbus Memory Management Unit),存儲同步管理通道(SM,SyncManager),分布時鐘,PDI接口,ESC地址空間(包括寄存器和用戶數據存儲器),EEPROM控制,以及狀態控制、中斷、看門狗和物理層管理等部分。
其中,幀處理單元(EtherCAT Processing Unit)分析并處理EtherCAT數據流?,F場總線內存管理單元(FMMU,Fliedbus Memory Management Unit)是EtherCAT從站控制IP核中的核心模塊之一,用于實現主站對從站的邏輯尋址。存儲同步管理通道(SM,SyncManager)實現主站和本地應用數據交換。Ethercat幀和PDI接口都必須輪詢處理器來判斷另一端是否完成訪問。PDI接口模塊是ESC芯片的應用數據接口。
在FPGA實現EtherCAT從站控制器的過程中,如果能實現數據鏈路的通路,數據幀能夠通過EBUS、MII接口傳輸到FPGA中,FPGA將數據幀進行識別并進行CRC校驗,解包出EtherCAT的幀格式和協議命令,并通過端口連接狀態將數據幀發送。那么,可以說明EtherCAT從站控制器是可以在FPGA中進行自主開發實現。在以上的數據鏈路中,EBUS接口涉及到EBUS模塊,EBUS模塊主要對EBUS協議進行解析,通過曼徹斯特編碼/解碼接收或發送數據;FPGA將數據幀進行識別并進行CRC校驗是Auto-Forwarder模塊;通過Loop-back function模塊將數據幀發送。以下分別介紹上述各模塊的實現過程。
2 各模塊實現邏輯
2.1 EBUS編碼/解碼模塊
對于EBUS實現方式,EBUS接口的LVDS信號數據率是100 Mb/s,EBUS接口是利用曼徹斯特編碼/解碼(Manchester encoded)通過LVDS方式實現。
在實現EBUS部分時,根據EBUS協議要求,需要實現曼徹斯特解碼和曼徹斯特波編碼。其中“0”用“01”表示,“1”用“10”表示。EBUS協議中分為idle標識符、開始幀標識符(SOF)、結束幀標識符(EOF)。Idle標識符為“0”,開始幀標識符為連續3個時鐘(200 MHz)連續的1,結束幀標識符為連續3個時鐘(200 MHz)連續的0。EBUS協議如圖3所示。
曼徹斯特編碼狀態機如圖4所示,曼徹斯特編碼的狀態機共分為8個狀態,分別為初始1狀態(IDLE_1C)、初始2狀態(IDLE_2C)、幀開始1狀態(SOFR_1C)、幀開始2狀態(SOFR_2C)、編碼1狀態(ENCO_1C)、編碼2狀態(ENCO_2C)、結束幀1狀態(EOFR_1C)、結束幀2狀態(EOFR_2C),處理時鐘為200 MHz。
各狀態說明如下:
IDLE_1C為初始1狀態,對應發送EBUS協議的idle標識符,發送的數據為‘0’。下一時鐘即進入IDLE_2C狀態。
IDLE_2C為初始2狀態,對應發送EBUS協議的idle標識符,發送的數據為‘1’。當發送數據有效時進入SOFR_1C狀態,否則進入IDLE_1C狀態。
SOFR_1C為幀開始1狀態,對應的發送EBUS協議的開始幀標識符,下一時鐘進入SOFR_1C狀態。
SOFR_2C為幀開始2狀態,對應的發送EBUS協議的開始幀標識符,下一時鐘進入ENCO_1C狀態。
ENCO_1C為編碼1狀態,對應發送幀數據,下一時鐘進入ENCO_2C。
ENCO_2C為編碼2狀態,對應發送幀數據,當發送數據無效時進入EOFR_1C狀態,否則進入ENCO_1C狀態。
EOFR_1C為結束幀1狀態,對應發送幀結束標識符,下一時鐘進入ENCO_2C狀態。
EOFR_2C為結束幀2狀態,對應發送幀結束標識符,此時一幀數據發送完畢,下一時鐘回到IDLE_1C狀態。
曼徹斯特解碼狀態機如圖5所示,曼徹斯特解碼的狀態機共分為5個狀態,分別為初始狀態(IDLE)、幀開始狀態(SOFR)、編碼1狀態(ENCO_1C)、編碼2狀態(ENCO_2C)、結束幀狀態(EOFR),處理時鐘為200 MHz。
各狀態說明如下:
IDLE為初始狀態,對應接收EBUS協議的idle標識符,下一時鐘即進入SODR狀態。
SOFR為幀開始狀態,對應的接收EBUS協議的開始幀標識符,當接收到連續3個‘1’即rx_sof_dv為1時,下一時鐘進入ENCO_1C狀態,否則進入IDLE狀態。
ENCO_1C為編碼1狀態,對應接收幀數據,下一時鐘進入ENCO_2C。
ENCO_2C為編碼2狀態,對應接收幀數據,當接收到連續3個‘0’時,進入EOFR狀態,否則進入ENCO_1C狀態。
EOFR_1C為結束幀狀態,此時已經接收到完整的EtherCAT幀,下一時鐘進入IDLE狀態。
2.2 Auto-forwarder模塊
Auto-forwarder模塊是MII和EBUS模塊進入IPCORE的第一個處理模塊,主要實現MII/EBUS數據緩存、檢測幀導碼、錯誤檢測、將數據發送到自動回環(Loop-back function)和幀處理單元(EtherCAT Processing Unit)。Auto-forwarder模塊實現MII/EBUS數據緩存功能是將EtherCAT幀數據存到FIFO中,并經過IPCORE處理時鐘(25 MHz)數據讀出,實現幀數據與IPCORE時鐘同步,再進入到下一模塊處理。檢測幀導碼是在數據幀數據有效后,通過檢測幀導碼(0x55555555555555555D),從而確定此幀為以太網幀。數據檢測主要檢測3種錯誤:物理層錯誤(RX錯誤)、數據幀錯誤、CRC錯誤。在數據經過FIFO同步后,在以太網幀的條件下,進行CRC校驗,如果CRC校驗正確,把幀數據發送到自動回環或幀處理單元中;如果CRC校驗錯誤,將此幀丟棄。將數據發送到自動回環和幀處理單元是在CRC校驗正確和無其他錯誤的條件下,將幀數據發送到自動回環和幀處理單元中。Auto-forwarder模塊的狀態機如圖6所示。
Auto-forwarder模塊的狀態機共分為5個狀態,分別為初始狀態(IDLE)、檢測前導碼狀態(DETECT_PREAM)、檢測前導碼開始狀態(DETECT_START)、幀開始狀態(FRAME_START)、幀處理狀態(FRAME_PROC)。處理時鐘為25 MHz。各狀態說明如下:
IDLE為初始狀態,當沒有幀數據時,狀態處于IDLE狀態。當檢測到幀數據為5時,進入到DETECT_PREAM狀態。
DETECT_PREAM 為檢測前導碼狀態,幀接收幀導碼5,當檢測到D時,進入到DETECT_START狀態。
DETECT_START為檢測幀導碼開始狀態,在下一時鐘進入到FRAME_START狀態。
FRAME_START為幀開始狀態,開始接收幀數據,在下一時鐘進入到FRAME_PROC狀態。
FRAME_PROC為幀處理狀態,正式處理幀數據,當沒有幀數據時就進入IDLE狀態。
2.3 Loop-back function模塊
自動回環(Loop-back function)是根據端口打開狀態確定數據幀轉發狀態,IP共有4個端口,如果當前端口處于閉合或未建立連接狀態,則回環功能轉發EtherCAT幀到下一個邏輯端后,端口0(PORT0)的回環功能會轉發幀數據到數據幀處理單元。端口狀態分別為:自動閉合、手動打開。不同端口數據幀的處理順序如下:
(1)0→EtherCAT Processing Unit→0
(2)0→EtherCAT Processing Unit→1 / 1→0
(3)0→EtherCAT Processing Unit→1 / 1→2 / 2→0 (log. ports 0,1, and 2)or0→EtherCATProcessing Unit→3 / 3→1 / 1→0 (log. ports 0,1, and 3)
(4)0→EtherCAT Processing Unit→3 / 3→1 / 1→2 / 2→0
為便于驗證及測試,本文重點探討雙端口情況下的數據轉發功能及測試。
3 功能測試
為了對基于FPGA的通信鏈路進行系統測試,搭建如圖7所示的測試環境。
其中,EtherCAT主站是指倍福EtherCAT主站,可以將指定EtherCAT幀發送到從站中;EtherCAT從站(ASIC)是指倍福的以ET1100芯片為核心的EtherCAT從站,ETherCAT主站通過MII信號將EtherCAT幀發送到EtherCAT從站(ASIC)中,EtherCAT從站(ASIC)將EtherCAT幀轉換成EBUS信號,將數據傳輸到EtherCAT測試板中;EtherCAT測試板是以FPGA為核心的測試板。
在測試中,測試板通過EBUS接口,將數據幀傳輸到FPGA中,FPGA通過EBUS解碼得到數據幀,數據幀到FPGA將進行識別并進行CRC校驗,解包出EtherCAT幀格式和協議命令。通過MII轉發到PC上,PC通過wireshark進行抓包驗證數據幀的正確性。
3.1 解碼狀態測試
解碼狀態測試結果如圖8所示,其中rx_data_interal為EBUS差分轉單端信號,current_state為狀態機信號,rx_dv為數據有效信號,rx_data為接收數據??梢钥闯?,EBUS協議的LVDS信號通過差分轉單端后,通過狀態機處理,得到幀數據。
3.2 編碼狀態測試
編碼狀態測試結果如圖9所示,tx_data_interal為單端信號轉EBUS差分信號,current_state為狀態機信號,tx_dv為數據有效信號,tx_data為接收數據??梢钥闯觯l送數據有效后,通過狀態機將數據單端轉差分發送出去。
3.3 Auto-forwarder數據狀態
經過Auto-forwarder狀態的數據如圖10所示,其中frame為幀數據,fifo為幀數據通過數據同步后的數據,state為狀態機信號,frame_done為數據幀結束信號,frame_start為幀開始信號,frame_data_valid為數據幀有效信號,frame_crc_err為幀錯誤信號。結果表明,數據幀可以正確識別并進行解析,在幀結束后,可以看到frame_crc_err有一拍為低。
3.4 數據幀驗證
用wireshark抓取的數據結果表明,數據幀可以由FPGA正確處理,wireshark抓取報文正確接收到EtherCAT類型的轉發報文,說明數據鏈路已打通。
4 結論
本文通過解析各階段數據結果,驗證了關鍵通信鏈路上EBUS編碼/解碼、Auto-forwarder、Loop-back function模塊的FPGA狀態機的正確性,說明FPGA實現EtherCAT從站基本通信鏈路是完全可行的,為開發完善的ESC從站控制器創造了條件。
參考文獻
[1] 王磊,李木國,王靜,等.基于EtherCAT協議現場級實時以太網控制系統研究[J].計算機工程與設計, 2011,32(7):2294-2297.
[2] 李木國,王磊,王靜,等.基于EtherCAT的工業以太網數據采集系統[J].計算機工程,2010,36(3):237-239.
[3] 單春榮,劉艷強,郇極.工業以太網現場總線EtherCAT及驅動程序設計[J].制造業自動化,2007,29(11):79-82.
[4] 施大發,劉建林,王輝,等.一種高性能EtherCAT實時以太網從站的設計[J].湖南師范大學自然科學學報, 2011,34(3):37-40.
[5] 馬軍賢,周侗,楊志家,等.EtherCAT從站的設計與實現[J].總線與網絡,2011(8):37-40.
[6] 胡世江.基于ETll00的EtherCAT實時工業以太網從站設計[J].PLC&FA,2009(11):67-70.
作者信息:
馬保全1,2,姚旺君1,2,劉云龍1,2,張曉莉1,2,黃 兵1,2,趙德政1,2
(1.工業控制系統信息安全技術國家工程實驗室,北京100083;2.華北計算機系統工程研究所,北京100083)