文獻標識碼: 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提出的在工業(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],。
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)控制,、中斷,、看門狗和物理層管理等部分。
其中,,幀處理單元(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所示。
曼徹斯特編碼狀態(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。
各狀態(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。
各狀態(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所示,。
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)境,。
其中,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)機處理,,得到幀數據。
3.2 編碼狀態(tài)測試
編碼狀態(tài)測試結果如圖9所示,,tx_data_interal為單端信號轉EBUS差分信號,,current_state為狀態(tài)機信號,tx_dv為數據有效信號,,tx_data為接收數據,。可以看出,,發(fā)送數據有效后,,通過狀態(tài)機將數據單端轉差分發(fā)送出去。
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有一拍為低。
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)