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