摘 要: EtherCAT是工業(yè)控制領域廣泛應用的現(xiàn)場總線之一,從站控制器ESC(EtherCAT Slave Controller)是從站模塊實現(xiàn)EtherCAT協(xié)議數(shù)據(jù)通信的關鍵,對從站控制芯片實現(xiàn)自主可控是工業(yè)控制系統(tǒng)國產化研發(fā)的重要基礎。基于EtherCAT通信協(xié)議及基本通信功能邏輯,設計了EBUS編碼/解碼、Auto-forwarder、Loop-back function關鍵通信節(jié)點的FPGA狀態(tài)機,并通過解析各階段數(shù)據(jù)狀態(tài)變化,驗證了各節(jié)點通信數(shù)據(jù)的正確性。實驗結果表明,基于上述狀態(tài)機的FPGA實現(xiàn)EtherCAT從站基本通信鏈路是完全可行的。
0 引言
EtherCAT是由BECKHOFF提出的在工業(yè)控制領域獲得廣泛應用的現(xiàn)場總線之一,該總線具備全雙工工作模式,可基于主站(Master)和從站(Slave)連接的模式實現(xiàn)數(shù)據(jù)傳遞,且具有低延時、高安全性的特點。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é)議數(shù)據(jù)的核心,因此,本研究基于EtherCAT協(xié)議特征及數(shù)據(jù)傳遞機制,設計關鍵通信節(jié)點的FPGA狀態(tài)機,驗證FPGA實現(xiàn)EtherCAT從站控制器基本通信鏈路功能的可行性,為完善EtherCAT其他通信功能及安全機制奠定重要基礎。
1 EtherCAT從站控制器框架
EtherCAT主站與各從站之間的通信鏈路如圖1所示。通信過程中,數(shù)據(jù)幀遍歷所有從站設備,數(shù)據(jù)幀通過某一從站時,從站設備根據(jù)報文命令分析尋址到本機報文并進行讀/寫數(shù)據(jù)到指定位置,數(shù)據(jù)幀到達最后一個從站后,該從站把處理后的數(shù)據(jù)幀發(fā)送給主站。主站收到此上行電報后處理返回數(shù)據(jù),一次通信結束[5-6]。
EtherCAT從站控制器主要包括數(shù)據(jù)幀處理單元、EBUS接口編碼/解碼模塊、Auto-forwarder模塊、Loop-back function模塊等。以ET1100/ET1200從站控制器為例,其內部框架如圖2所示,主要包括MII、EBUS接口,EtherCAT數(shù)據(jù)幀處理單元,現(xiàn)場總線內存管理單元(FMMU,F(xiàn)liedbus Memory Management Unit),存儲同步管理通道(SM,SyncManager),分布時鐘,PDI接口,ESC地址空間(包括寄存器和用戶數(shù)據(jù)存儲器),EEPROM控制,以及狀態(tài)控制、中斷、看門狗和物理層管理等部分。
其中,幀處理單元(EtherCAT Processing Unit)分析并處理EtherCAT數(shù)據(jù)流。現(xiàn)場總線內存管理單元(FMMU,F(xiàn)liedbus Memory Management Unit)是EtherCAT從站控制IP核中的核心模塊之一,用于實現(xiàn)主站對從站的邏輯尋址。存儲同步管理通道(SM,SyncManager)實現(xiàn)主站和本地應用數(shù)據(jù)交換。Ethercat幀和PDI接口都必須輪詢處理器來判斷另一端是否完成訪問。PDI接口模塊是ESC芯片的應用數(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標識符、開始幀標識符(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ā)送的數(shù)據(jù)為‘0’。下一時鐘即進入IDLE_2C狀態(tài)。
IDLE_2C為初始2狀態(tài),對應發(fā)送EBUS協(xié)議的idle標識符,發(fā)送的數(shù)據(jù)為‘1’。當發(fā)送數(shù)據(jù)有效時進入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ā)送幀數(shù)據(jù),下一時鐘進入ENCO_2C。
ENCO_2C為編碼2狀態(tài),對應發(fā)送幀數(shù)據(jù),當發(fā)送數(shù)據(jù)無效時進入EOFR_1C狀態(tài),否則進入ENCO_1C狀態(tài)。
EOFR_1C為結束幀1狀態(tài),對應發(fā)送幀結束標識符,下一時鐘進入ENCO_2C狀態(tài)。
EOFR_2C為結束幀2狀態(tài),對應發(fā)送幀結束標識符,此時一幀數(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)、結束幀狀態(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),對應接收幀數(shù)據(jù),下一時鐘進入ENCO_2C。
ENCO_2C為編碼2狀態(tài),對應接收幀數(shù)據(jù),當接收到連續(xù)3個‘0’時,進入EOFR狀態(tài),否則進入ENCO_1C狀態(tài)。
EOFR_1C為結束幀狀態(tài),此時已經(jīng)接收到完整的EtherCAT幀,下一時鐘進入IDLE狀態(tài)。
2.2 Auto-forwarder模塊
Auto-forwarder模塊是MII和EBUS模塊進入IPCORE的第一個處理模塊,主要實現(xiàn)MII/EBUS數(shù)據(jù)緩存、檢測幀導碼、錯誤檢測、將數(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時鐘同步,再進入到下一模塊處理。檢測幀導碼是在數(shù)據(jù)幀數(shù)據(jù)有效后,通過檢測幀導碼(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)、檢測前導碼狀態(tài)(DETECT_PREAM)、檢測前導碼開始狀態(tài)(DETECT_START)、幀開始狀態(tài)(FRAME_START)、幀處理狀態(tài)(FRAME_PROC)。處理時鐘為25 MHz。各狀態(tài)說明如下:
IDLE為初始狀態(tài),當沒有幀數(shù)據(jù)時,狀態(tài)處于IDLE狀態(tài)。當檢測到幀數(shù)據(jù)為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),開始接收幀數(shù)據(jù),在下一時鐘進入到FRAME_PROC狀態(tài)。
FRAME_PROC為幀處理狀態(tài),正式處理幀數(shù)據(jù),當沒有幀數(shù)據(jù)時就進入IDLE狀態(tài)。
2.3 Loop-back function模塊
自動回環(huán)(Loop-back function)是根據(jù)端口打開狀態(tài)確定數(shù)據(jù)幀轉發(fā)狀態(tài),IP共有4個端口,如果當前端口處于閉合或未建立連接狀態(tài),則回環(huán)功能轉發(fā)EtherCAT幀到下一個邏輯端后,端口0(PORT0)的回環(huá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ù)轉發(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信號,將數(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轉發(fā)到PC上,PC通過wireshark進行抓包驗證數(shù)據(jù)幀的正確性。
3.1 解碼狀態(tài)測試
解碼狀態(tài)測試結果如圖8所示,其中rx_data_interal為EBUS差分轉單端信號,current_state為狀態(tài)機信號,rx_dv為數(shù)據(jù)有效信號,rx_data為接收數(shù)據(jù)。可以看出,EBUS協(xié)議的LVDS信號通過差分轉單端后,通過狀態(tài)機處理,得到幀數(shù)據(jù)。
3.2 編碼狀態(tài)測試
編碼狀態(tài)測試結果如圖9所示,tx_data_interal為單端信號轉EBUS差分信號,current_state為狀態(tài)機信號,tx_dv為數(shù)據(jù)有效信號,tx_data為接收數(shù)據(jù)。可以看出,發(fā)送數(shù)據(jù)有效后,通過狀態(tài)機將數(shù)據(jù)單端轉差分發(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ù)幀結束信號,frame_start為幀開始信號,frame_data_valid為數(shù)據(jù)幀有效信號,frame_crc_err為幀錯誤信號。結果表明,數(shù)據(jù)幀可以正確識別并進行解析,在幀結束后,可以看到frame_crc_err有一拍為低。
3.4 數(shù)據(jù)幀驗證
用wireshark抓取的數(shù)據(jù)結果表明,數(shù)據(jù)幀可以由FPGA正確處理,wireshark抓取報文正確接收到EtherCAT類型的轉發(fā)報文,說明數(shù)據(jù)鏈路已打通。
4 結論
本文通過解析各階段數(shù)據(jù)結果,驗證了關鍵通信鏈路上EBUS編碼/解碼、Auto-forwarder、Loop-back function模塊的FPGA狀態(tài)機的正確性,說明FPGA實現(xiàn)EtherCAT從站基本通信鏈路是完全可行的,為開發(fā)完善的ESC從站控制器創(chuàng)造了條件。
評論
查看更多