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