《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于FPGA的EtherCAT從站通信鏈路分析與驗證
基于FPGA的EtherCAT從站通信鏈路分析與驗證
2017年電子技術應用第8期
馬保全1,2,,姚旺君1,,2,劉云龍1,,2,,張曉莉1,2,黃 兵1,,2,,趙德政1,2
1.工業(yè)控制系統(tǒng)信息安全技術國家工程實驗室,,北京100083,;2.華北計算機系統(tǒng)工程研究所,北京100083
摘要: EtherCAT是工業(yè)控制領域廣泛應用的現(xiàn)場總線之一,,從站控制器ESC(EtherCAT Slave Controller)是從站模塊實現(xiàn)EtherCAT協(xié)議數據通信的關鍵,,對從站控制芯片實現(xiàn)自主可控是工業(yè)控制系統(tǒng)國產化研發(fā)的重要基礎?;贓therCAT通信協(xié)議及基本通信功能邏輯,,設計了EBUS編碼/解碼、Auto-forwarder,、Loop-back function關鍵通信節(jié)點的FPGA狀態(tài)機,,并通過解析各階段數據狀態(tài)變化,驗證了各節(jié)點通信數據的正確性,。實驗結果表明,,基于上述狀態(tài)機的FPGA實現(xiàn)EtherCAT從站基本通信鏈路是完全可行的。
中圖分類號: TN911.72,;TP273
文獻標識碼: 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.
Analysis and verification of EtherCAT slave controller communication link based on FPGA
Ma Baoquan1,2,,Yao Wangjun1,,2,Liu Yunlong1,,2,,Zhang Xiaoli1,2,,Huang Bing1,,2,,Zhao Dezheng1,2
1.National Engineering Laboratory for Industry Control System Information Security Technology,,Beijing 100083,,China; 2.National Computer System Engineering Research Institute of China,,Beijing 100083,,China
Abstract: EtherCAT is one of the widely used field bus for industrial control field. ESC(EtherCAT Slave Controller) is the critical part for communication protocol implementation, and autonomous and controllable design of ESC chip is the essential basis for domestic development of industrial control system. Based on the EtherCAT communications protocol and the basic communication function logic, the FPGA state machine of the EBUS encoding/decoding, Auto-forwarder, and Loop- back function module are designed, and the data states of each stage are analyzed for verifing the communications data of each stage. The results show that implementation of EtherCAT basic communication link is completely feasible based on the FPGA state machine.
Key words : EtherCAT;fieldbus,;FPGA,;ESC;slave module,;EBUS

0 引言

    EtherCAT是由BECKHOFF提出的在工業(yè)控制領域獲得廣泛應用的現(xiàn)場總線之一,,該總線具備全雙工工作模式,可基于主站(Master)和從站(Slave)連接的模式實現(xiàn)數據傳遞,,且具有低延時,、高安全性的特點。EtherCAT從站控制器ESC(EtherCAT Slave Controller)是從站模塊實現(xiàn)EtherCAT通信協(xié)議的關鍵,,目前國內基于EtherCAT協(xié)議的通信功能基本都采用ET1100/ET1200等從站芯片來實現(xiàn)[1-4],。然而,由于這類芯片除基本通信功能外,,還具備大量其他功能,而此類額外通信機制并不對我國技術人員公開,,造成對此類通信芯片還無法實現(xiàn)完全自主可控,,采用有效的安全機制提升系統(tǒng)安全性更是無從談起。隨著工業(yè)控制領域的信息安全問題日益突出,,此類不可自主可控通信芯片的應用給我國核心控制系統(tǒng)的運行引入一定安全風險,。為了實現(xiàn)對控制系統(tǒng)用通信芯片的完全自主可控,基于FPGA實現(xiàn)EtherCAT通信協(xié)議的自主化開發(fā)顯得非常必要,,同時也是采用自主安全機制提升通信系統(tǒng)安全能力的重要前提,。

    基本通信鏈路是實現(xiàn)收發(fā)EtherCAT協(xié)議數據的核心,因此,,本研究基于EtherCAT協(xié)議特征及數據傳遞機制,,設計關鍵通信節(jié)點的FPGA狀態(tài)機,驗證FPGA實現(xiàn)EtherCAT從站控制器基本通信鏈路功能的可行性,,為完善EtherCAT其他通信功能及安全機制奠定重要基礎,。

1 EtherCAT從站控制器框架

    EtherCAT主站與各從站之間的通信鏈路如圖1所示。通信過程中,,數據幀遍歷所有從站設備,,數據幀通過某一從站時,從站設備根據報文命令分析尋址到本機報文并進行讀/寫數據到指定位置,數據幀到達最后一個從站后,,該從站把處理后的數據幀發(fā)送給主站,。主站收到此上行電報后處理返回數據,一次通信結束[5-6],。

tx1-t1.gif

    EtherCAT從站控制器主要包括數據幀處理單元,、EBUS接口編碼/解碼模塊、Auto-forwarder模塊,、Loop-back function模塊等,。以ET1100/ET1200從站控制器為例,其內部框架如圖2所示,,主要包括MII,、EBUS接口,EtherCAT數據幀處理單元,,現(xiàn)場總線內存管理單元(FMMU,,F(xiàn)liedbus Memory Management Unit),存儲同步管理通道(SM,,SyncManager),,分布時鐘,PDI接口,,ESC地址空間(包括寄存器和用戶數據存儲器),,EEPROM控制,以及狀態(tài)控制,、中斷,、看門狗和物理層管理等部分。

tx1-t2.gif

    其中,,幀處理單元(EtherCAT Processing Unit)分析并處理EtherCAT數據流?,F(xiàn)場總線內存管理單元(FMMU,F(xiàn)liedbus Memory Management Unit)是EtherCAT從站控制IP核中的核心模塊之一,,用于實現(xiàn)主站對從站的邏輯尋址,。存儲同步管理通道(SM,SyncManager)實現(xiàn)主站和本地應用數據交換,。Ethercat幀和PDI接口都必須輪詢處理器來判斷另一端是否完成訪問,。PDI接口模塊是ESC芯片的應用數據接口。

    在FPGA實現(xiàn)EtherCAT從站控制器的過程中,,如果能實現(xiàn)數據鏈路的通路,,數據幀能夠通過EBUS、MII接口傳輸到FPGA中,,F(xiàn)PGA將數據幀進行識別并進行CRC校驗,,解包出EtherCAT的幀格式和協(xié)議命令,,并通過端口連接狀態(tài)將數據幀發(fā)送。那么,,可以說明EtherCAT從站控制器是可以在FPGA中進行自主開發(fā)實現(xiàn),。在以上的數據鏈路中,EBUS接口涉及到EBUS模塊,,EBUS模塊主要對EBUS協(xié)議進行解析,,通過曼徹斯特編碼/解碼接收或發(fā)送數據;FPGA將數據幀進行識別并進行CRC校驗是Auto-Forwarder模塊,;通過Loop-back function模塊將數據幀發(fā)送,。以下分別介紹上述各模塊的實現(xiàn)過程。

2 各模塊實現(xiàn)邏輯

2.1 EBUS編碼/解碼模塊

    對于EBUS實現(xiàn)方式,,EBUS接口的LVDS信號數據率是100 Mb/s,,EBUS接口是利用曼徹斯特編碼/解碼(Manchester encoded)通過LVDS方式實現(xiàn)。

    在實現(xiàn)EBUS部分時,,根據EBUS協(xié)議要求,,需要實現(xiàn)曼徹斯特解碼和曼徹斯特波編碼。其中“0”用“01”表示,,“1”用“10”表示,。EBUS協(xié)議中分為idle標識符、開始幀標識符(SOF),、結束幀標識符(EOF),。Idle標識符為“0”,開始幀標識符為連續(xù)3個時鐘(200 MHz)連續(xù)的1,,結束幀標識符為連續(xù)3個時鐘(200 MHz)連續(xù)的0,。EBUS協(xié)議如圖3所示。

tx1-t3.gif

    曼徹斯特編碼狀態(tài)機如圖4所示,,曼徹斯特編碼的狀態(tài)機共分為8個狀態(tài),分別為初始1狀態(tài)(IDLE_1C),、初始2狀態(tài)(IDLE_2C),、幀開始1狀態(tài)(SOFR_1C)、幀開始2狀態(tài)(SOFR_2C),、編碼1狀態(tài)(ENCO_1C),、編碼2狀態(tài)(ENCO_2C)、結束幀1狀態(tài)(EOFR_1C),、結束幀2狀態(tài)(EOFR_2C),,處理時鐘為200 MHz。

tx1-t4.gif

    各狀態(tài)說明如下:

    IDLE_1C為初始1狀態(tài),,對應發(fā)送EBUS協(xié)議的idle標識符,,發(fā)送的數據為‘0’,。下一時鐘即進入IDLE_2C狀態(tài)。

    IDLE_2C為初始2狀態(tài),,對應發(fā)送EBUS協(xié)議的idle標識符,,發(fā)送的數據為‘1’。當發(fā)送數據有效時進入SOFR_1C狀態(tài),,否則進入IDLE_1C狀態(tài),。

    SOFR_1C為幀開始1狀態(tài),對應的發(fā)送EBUS協(xié)議的開始幀標識符,,下一時鐘進入SOFR_1C狀態(tài),。

    SOFR_2C為幀開始2狀態(tài),對應的發(fā)送EBUS協(xié)議的開始幀標識符,,下一時鐘進入ENCO_1C狀態(tài),。

    ENCO_1C為編碼1狀態(tài),對應發(fā)送幀數據,,下一時鐘進入ENCO_2C,。

    ENCO_2C為編碼2狀態(tài),對應發(fā)送幀數據,,當發(fā)送數據無效時進入EOFR_1C狀態(tài),,否則進入ENCO_1C狀態(tài)。

    EOFR_1C為結束幀1狀態(tài),,對應發(fā)送幀結束標識符,,下一時鐘進入ENCO_2C狀態(tài)。

    EOFR_2C為結束幀2狀態(tài),,對應發(fā)送幀結束標識符,,此時一幀數據發(fā)送完畢,下一時鐘回到IDLE_1C狀態(tài),。

    曼徹斯特解碼狀態(tài)機如圖5所示,,曼徹斯特解碼的狀態(tài)機共分為5個狀態(tài),分別為初始狀態(tài)(IDLE),、幀開始狀態(tài)(SOFR),、編碼1狀態(tài)(ENCO_1C)、編碼2狀態(tài)(ENCO_2C),、結束幀狀態(tài)(EOFR),,處理時鐘為200 MHz。

tx1-t5.gif

    各狀態(tài)說明如下:

    IDLE為初始狀態(tài),,對應接收EBUS協(xié)議的idle標識符,,下一時鐘即進入SODR狀態(tài)。

    SOFR為幀開始狀態(tài),,對應的接收EBUS協(xié)議的開始幀標識符,,當接收到連續(xù)3個‘1’即rx_sof_dv為1時,,下一時鐘進入ENCO_1C狀態(tài),否則進入IDLE狀態(tài),。

    ENCO_1C為編碼1狀態(tài),,對應接收幀數據,下一時鐘進入ENCO_2C,。

    ENCO_2C為編碼2狀態(tài),,對應接收幀數據,當接收到連續(xù)3個‘0’時,,進入EOFR狀態(tài),,否則進入ENCO_1C狀態(tài)。

    EOFR_1C為結束幀狀態(tài),,此時已經接收到完整的EtherCAT幀,,下一時鐘進入IDLE狀態(tài)。

2.2 Auto-forwarder模塊

    Auto-forwarder模塊是MII和EBUS模塊進入IPCORE的第一個處理模塊,,主要實現(xiàn)MII/EBUS數據緩存,、檢測幀導碼、錯誤檢測,、將數據發(fā)送到自動回環(huán)(Loop-back function)和幀處理單元(EtherCAT Processing Unit),。Auto-forwarder模塊實現(xiàn)MII/EBUS數據緩存功能是將EtherCAT幀數據存到FIFO中,并經過IPCORE處理時鐘(25 MHz)數據讀出,,實現(xiàn)幀數據與IPCORE時鐘同步,,再進入到下一模塊處理。檢測幀導碼是在數據幀數據有效后,,通過檢測幀導碼(0x55555555555555555D),從而確定此幀為以太網幀,。數據檢測主要檢測3種錯誤:物理層錯誤(RX錯誤)、數據幀錯誤,、CRC錯誤,。在數據經過FIFO同步后,在以太網幀的條件下,,進行CRC校驗,,如果CRC校驗正確,把幀數據發(fā)送到自動回環(huán)或幀處理單元中,;如果CRC校驗錯誤,,將此幀丟棄,。將數據發(fā)送到自動回環(huán)和幀處理單元是在CRC校驗正確和無其他錯誤的條件下,,將幀數據發(fā)送到自動回環(huán)和幀處理單元中。Auto-forwarder模塊的狀態(tài)機如圖6所示,。

tx1-t6.gif

    Auto-forwarder模塊的狀態(tài)機共分為5個狀態(tài),,分別為初始狀態(tài)(IDLE),、檢測前導碼狀態(tài)(DETECT_PREAM)、檢測前導碼開始狀態(tài)(DETECT_START),、幀開始狀態(tài)(FRAME_START),、幀處理狀態(tài)(FRAME_PROC)。處理時鐘為25 MHz,。各狀態(tài)說明如下:

    IDLE為初始狀態(tài),,當沒有幀數據時,狀態(tài)處于IDLE狀態(tài),。當檢測到幀數據為5時,,進入到DETECT_PREAM狀態(tài)。

    DETECT_PREAM 為檢測前導碼狀態(tài),,幀接收幀導碼5,,當檢測到D時,進入到DETECT_START狀態(tài),。

    DETECT_START為檢測幀導碼開始狀態(tài),,在下一時鐘進入到FRAME_START狀態(tài)。

    FRAME_START為幀開始狀態(tài),,開始接收幀數據,,在下一時鐘進入到FRAME_PROC狀態(tài)。

    FRAME_PROC為幀處理狀態(tài),,正式處理幀數據,,當沒有幀數據時就進入IDLE狀態(tài)。

2.3 Loop-back function模塊

    自動回環(huán)(Loop-back function)是根據端口打開狀態(tài)確定數據幀轉發(fā)狀態(tài),,IP共有4個端口,,如果當前端口處于閉合或未建立連接狀態(tài),則回環(huán)功能轉發(fā)EtherCAT幀到下一個邏輯端后,,端口0(PORT0)的回環(huán)功能會轉發(fā)幀數據到數據幀處理單元,。端口狀態(tài)分別為:自動閉合、手動打開,。不同端口數據幀的處理順序如下:

    (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

    為便于驗證及測試,,本文重點探討雙端口情況下的數據轉發(fā)功能及測試。

3 功能測試

    為了對基于FPGA的通信鏈路進行系統(tǒng)測試,,搭建如圖7所示的測試環(huán)境,。

tx1-t7.gif

    其中,EtherCAT主站是指倍福EtherCAT主站,,可以將指定EtherCAT幀發(fā)送到從站中,;EtherCAT從站(ASIC)是指倍福的以ET1100芯片為核心的EtherCAT從站,ETherCAT主站通過MII信號將EtherCAT幀發(fā)送到EtherCAT從站(ASIC)中,,EtherCAT從站(ASIC)將EtherCAT幀轉換成EBUS信號,,將數據傳輸到EtherCAT測試板中,;EtherCAT測試板是以FPGA為核心的測試板。

    在測試中,,測試板通過EBUS接口,,將數據幀傳輸到FPGA中,F(xiàn)PGA通過EBUS解碼得到數據幀,,數據幀到FPGA將進行識別并進行CRC校驗,,解包出EtherCAT幀格式和協(xié)議命令。通過MII轉發(fā)到PC上,,PC通過wireshark進行抓包驗證數據幀的正確性,。

3.1 解碼狀態(tài)測試

    解碼狀態(tài)測試結果如圖8所示,其中rx_data_interal為EBUS差分轉單端信號,,current_state為狀態(tài)機信號,,rx_dv為數據有效信號,rx_data為接收數據,??梢钥闯觯珽BUS協(xié)議的LVDS信號通過差分轉單端后,,通過狀態(tài)機處理,,得到幀數據。

tx1-t8.gif

3.2 編碼狀態(tài)測試

    編碼狀態(tài)測試結果如圖9所示,,tx_data_interal為單端信號轉EBUS差分信號,,current_state為狀態(tài)機信號,tx_dv為數據有效信號,,tx_data為接收數據,。可以看出,,發(fā)送數據有效后,,通過狀態(tài)機將數據單端轉差分發(fā)送出去。

tx1-t9.gif

3.3 Auto-forwarder數據狀態(tài)

    經過Auto-forwarder狀態(tài)的數據如圖10所示,,其中frame為幀數據,,fifo為幀數據通過數據同步后的數據,state為狀態(tài)機信號,,frame_done為數據幀結束信號,,frame_start為幀開始信號,frame_data_valid為數據幀有效信號,,frame_crc_err為幀錯誤信號,。結果表明,數據幀可以正確識別并進行解析,在幀結束后,,可以看到frame_crc_err有一拍為低。

tx1-t10.gif

3.4 數據幀驗證

    用wireshark抓取的數據結果表明,,數據幀可以由FPGA正確處理,,wireshark抓取報文正確接收到EtherCAT類型的轉發(fā)報文,說明數據鏈路已打通,。

4 結論

    本文通過解析各階段數據結果,,驗證了關鍵通信鏈路上EBUS編碼/解碼、Auto-forwarder,、Loop-back function模塊的FPGA狀態(tài)機的正確性,,說明FPGA實現(xiàn)EtherCAT從站基本通信鏈路是完全可行的,為開發(fā)完善的ESC從站控制器創(chuàng)造了條件,。

參考文獻

[1] 王磊,,李木國,王靜,,等.基于EtherCAT協(xié)議現(xiàn)場級實時以太網控制系統(tǒng)研究[J].計算機工程與設計,, 2011,32(7):2294-2297.

[2] 李木國,,王磊,,王靜,等.基于EtherCAT的工業(yè)以太網數據采集系統(tǒng)[J].計算機工程,,2010,,36(3):237-239.

[3] 單春榮,劉艷強,,郇極.工業(yè)以太網現(xiàn)場總線EtherCAT及驅動程序設計[J].制造業(yè)自動化,,2007,29(11):79-82.

[4] 施大發(fā),,劉建林,,王輝,等.一種高性能EtherCAT實時以太網從站的設計[J].湖南師范大學自然科學學報, 2011,,34(3):37-40.

[5] 馬軍賢,,周侗,楊志家,,等.EtherCAT從站的設計與實現(xiàn)[J].總線與網絡,,2011(8):37-40.

[6] 胡世江.基于ETll00的EtherCAT實時工業(yè)以太網從站設計[J].PLC&FA,2009(11):67-70.



作者信息:

馬保全1,,2,,姚旺君1,2,劉云龍1,,2,,張曉莉1,2,,黃  兵1,,2,趙德政1,,2

(1.工業(yè)控制系統(tǒng)信息安全技術國家工程實驗室,,北京100083;2.華北計算機系統(tǒng)工程研究所,,北京100083)

此內容為AET網站原創(chuàng),,未經授權禁止轉載。