潘忠英
(山西工程職業(yè)學(xué)院,計算機(jī)工程系,山西 太原 030009)
工業(yè)智能化推進(jìn)過程中,在采集不同設(shè)備的數(shù)據(jù)進(jìn)行傳輸時,為了提高傳輸速率、降低功耗,需選定合適的總線進(jìn)行信息交互。不同的總線進(jìn)行信息交互時,由于數(shù)據(jù)傳輸格式存在較大的差異,無法直接通訊,因此需要對傳輸數(shù)據(jù)進(jìn)行格式轉(zhuǎn)化。綜控機(jī)與其他設(shè)備互聯(lián)時,一般采用計算機(jī)上特定有限的接口作為通訊方式,CAN 口通訊簡單、糾錯力度大、抗干擾能力強(qiáng)。當(dāng)設(shè)備連接復(fù)雜度程度較高時,綜控機(jī)需要擴(kuò)展性更高的接口來實(shí)現(xiàn)通訊。以太網(wǎng)傳輸速率快,能夠解決通訊節(jié)點(diǎn)增加導(dǎo)致的速率及功耗問題。目前對于CAN總線與以太網(wǎng)之間的通訊設(shè)計,一般采用ARM 芯片作為CPU 進(jìn)行軟件設(shè)計。但考慮到FPGA 芯片具有開發(fā)周期短,編程靈活且成本低的特點(diǎn),系統(tǒng)選用FPGA芯片作為時序控制核心,實(shí)現(xiàn)各個總線的底層協(xié)議以及不同協(xié)議之間的數(shù)據(jù)轉(zhuǎn)換交互。
以太網(wǎng)與CAN 總線信息交互的總體設(shè)計框圖如圖1所示。
圖1 系統(tǒng)總體設(shè)計框圖
系統(tǒng)采用復(fù)旦微電子生產(chǎn)的國產(chǎn)FPGA 芯片作為邏輯控制核心,型號為FMK50。軟件設(shè)計由以太網(wǎng)收發(fā)模塊、CAN 收發(fā)模塊、數(shù)據(jù)轉(zhuǎn)換模塊等構(gòu)成。系統(tǒng)上電后,由綜控機(jī)通過網(wǎng)口發(fā)送數(shù)據(jù)包給FPGA,F(xiàn)PGA 通過以太網(wǎng)控制模塊不斷查詢線上是否有新的數(shù)據(jù),為匹配數(shù)據(jù)傳輸速率,采用緩存模塊對接收到的以太網(wǎng)數(shù)據(jù)報文進(jìn)行暫存。FPGA 采用數(shù)據(jù)轉(zhuǎn)換模塊對UDP 報文進(jìn)行數(shù)據(jù)提取,并按照CAN 總線通訊協(xié)議對數(shù)據(jù)重新進(jìn)行打包封裝,發(fā)送給CAN控制器模塊實(shí)現(xiàn)數(shù)據(jù)的發(fā)送。為驗(yàn)證設(shè)計的正確性,對數(shù)據(jù)的雙向傳輸均進(jìn)行測試。通過比較發(fā)送端與接收端的數(shù)據(jù)及數(shù)據(jù)長度,表明數(shù)據(jù)雙向傳輸均正確。
系統(tǒng)采用以太網(wǎng)物理層芯片RTL8211EG 進(jìn)行網(wǎng)口數(shù)據(jù)的收發(fā),該芯片傳輸數(shù)據(jù)的速率最快可達(dá)到1000Mb/s。FPGA 與該芯片在硬件上通過專用接口GMII 進(jìn)行連接,具體硬件電路圖如圖2 所示。從圖2中可以看出,當(dāng)FPGA 發(fā)送數(shù)據(jù)給RTL8211EG 芯片時,F(xiàn)PGA作為主設(shè)備,依照時序手冊提供數(shù)據(jù)TXD和時鐘GTXC給從設(shè)備RTL8211EG。軟件設(shè)計上FPGA主頻為50MHz,通過時鐘管理模塊DCM 倍頻出125MHz 作為GTXC,數(shù)據(jù)傳輸時按照時鐘節(jié)拍對數(shù)據(jù)字節(jié)進(jìn)行采樣。
圖2 以太網(wǎng)模塊電路圖
系統(tǒng)采用CAN 控制器SJA1000,配合獨(dú)立CAN收發(fā)器實(shí)現(xiàn)CAN總線通訊。FPGA輸入8MHz的時鐘到CAN控制器芯片的XTAL引腳,與內(nèi)部振蕩電路相連。由于CAN 總線由差分電平CANH 和CANL 組成,CAN 控制器輸出的數(shù)據(jù)不能直接與之通信,因此需要CAN 收發(fā)器來對數(shù)據(jù)進(jìn)行電平轉(zhuǎn)換,實(shí)現(xiàn)數(shù)據(jù)正常穩(wěn)定的傳輸。由于FPGA 與CAN 控制器芯片的工作電壓不同,兩者在進(jìn)行通訊時需要進(jìn)行電壓的匹配。CAN 模塊電路設(shè)計圖如圖3所示,圖中CAN 控制器芯片的RX1 引腳與CAN 收發(fā)器的Vref 引腳互連,降低數(shù)據(jù)在CAN控制器與CAN收發(fā)器之間的傳輸延時。
圖3 CAN模塊電路圖
軟件方案設(shè)計上以國產(chǎn)FPGA 芯片F(xiàn)MK50 作為控制芯片,并在開發(fā)環(huán)境Vivado 和Procise 中對軟件進(jìn)一步開發(fā)。
3.1.1 CAN初始化模塊設(shè)計
FPGA 與CAN 控制器進(jìn)行信息交互前,需要對其芯片內(nèi)部的相關(guān)寄存器進(jìn)行配置,由于FPGA 對CAN控制器的配置只能在復(fù)位模式下進(jìn)行,因此系統(tǒng)上電后,軟件設(shè)計上自動運(yùn)行CAN 初始化模塊,完成對CAN 控制器的寄存器配置后退出復(fù)位模式,進(jìn)入正常工作模式后即可執(zhí)行讀寫操作。該模塊初始化流程如圖4所示。
圖4 CAN模塊初始化流程
3.1.2 CAN接收模塊設(shè)計
CAN 模塊上電完成初始化后,可根據(jù)外部中斷標(biāo)志的沿觸發(fā)的方式來讀取CAN 控制器存中緩器內(nèi)的數(shù)據(jù)。FPAG 主要通過8 路數(shù)據(jù)/地址線AD0-AD7、地址使能線ALE、片選信號/CS、讀使能信號/RD、寫使能信號/WR 來讀取CAN 控制器中接收緩沖器內(nèi)的13 個字節(jié)數(shù)據(jù),F(xiàn)PGA讀周期時序圖如圖5所示。
圖5 讀周期時序圖
上位機(jī)通過網(wǎng)口發(fā)送數(shù)據(jù)至物理層芯片RTL8211,F(xiàn)PGA 內(nèi)的以太網(wǎng)控制模塊通過GMII 總線和該芯片進(jìn)行信息交互,信息傳輸格式遵循UDP 協(xié)議,具體通信圖如圖6 所示。以太網(wǎng)模塊主要由四部分結(jié)構(gòu)組成,包括負(fù)責(zé)讀取物理層芯片內(nèi)接收FIFO中數(shù)據(jù)的接收單元、發(fā)送數(shù)據(jù)至物理層芯片發(fā)送FIFO 的發(fā)送單元、為匹配數(shù)據(jù)傳輸速率而進(jìn)行數(shù)據(jù)緩存的緩存單元以及對報文中的數(shù)據(jù)進(jìn)行校驗(yàn)的CRC校驗(yàn)單元。
圖6 以太網(wǎng)模塊和上位機(jī)通信圖
UDP 協(xié)議作為網(wǎng)口通訊最常用的協(xié)議之一,建立通訊方式簡單、傳輸過程可靠。UDP 發(fā)送的數(shù)據(jù)報中包含通訊雙方的端口號,因此數(shù)據(jù)傳輸在總線上可依據(jù)指定MAC 地址實(shí)現(xiàn)正確接收與發(fā)送。同時該協(xié)議包含CRC 校驗(yàn),若傳輸過程中數(shù)據(jù)受其他因素影響發(fā)生錯誤,通過CRC 模塊驗(yàn)證,錯誤信息可被檢測出并丟棄該包數(shù)據(jù)。UDP 數(shù)據(jù)包共分為兩部分,為數(shù)據(jù)包頭部和數(shù)據(jù)。其中,數(shù)據(jù)包頭部分由通訊雙方MAC地址、數(shù)據(jù)報長度以及校驗(yàn)和構(gòu)成。UDP 報文的主要部分如圖7所示。
圖7 UDP報文構(gòu)成
CAN 控制器SJA1000 與FPGA 通過8 通道并行數(shù)據(jù)/地址線AD0-AD7 進(jìn)行交互,當(dāng)?shù)刂肥鼓苄盘朅LS有效時,總線上輸出的數(shù)據(jù)表示地址;當(dāng)寫使能線/WR的電平為低時,總線上的信息為數(shù)據(jù)。為驗(yàn)證CAN模塊軟件設(shè)計的正確性,編寫測試模塊,對收發(fā)模塊中的邏輯設(shè)計進(jìn)行相應(yīng)的仿真測試。當(dāng)CAN 接收模塊檢測到外部中斷信號的下降沿時,按照讀時序讀取SJA1000 中的接收緩沖器的13 個字節(jié),接收完后需要釋放接收緩沖器以臨時清除中斷位,否則將不會響應(yīng)后續(xù)中斷信號。接收模塊的軟件仿真如圖8所示。
圖8 CAN模塊數(shù)據(jù)接收仿真測試圖
為驗(yàn)證以太網(wǎng)模塊的正確通信,采用chipscope 對以太網(wǎng)模塊數(shù)據(jù)傳輸進(jìn)行在線監(jiān)測,如圖9所示,以太網(wǎng)發(fā)送模塊對輸出數(shù)據(jù)進(jìn)行封裝,發(fā)送數(shù)據(jù)時首先發(fā)送7 個字節(jié)的前導(dǎo)碼0x55 以及1個字節(jié)的幀開始符0xD5、然后6 字節(jié)目的MAC 地址28-D2-44-DC-6E-FE、6 個字節(jié)源MAC 地址00-0A-35-01-FE-C0以及2字節(jié)IP包類型,然后發(fā)送數(shù)據(jù)報及校驗(yàn)和。
圖9 chipscope監(jiān)測圖
上位機(jī)利用網(wǎng)口數(shù)據(jù)抓取工具Wireshark 對線上數(shù)據(jù)進(jìn)行實(shí)時監(jiān)測,通過該方法可驗(yàn)證上位機(jī)與設(shè)備通訊連接正確,且通過觀察數(shù)據(jù)驗(yàn)證收發(fā)地址及收發(fā)個數(shù)均正確。從圖10 中可以看出,Wireshark 識別到源MAC地址為00-0a-35-01-fe-c0。
圖10 網(wǎng)口監(jiān)測圖
為驗(yàn)證CAN 模塊與以太網(wǎng)模塊之間的正確通信,通過雙向發(fā)送不同字節(jié)長度的數(shù)據(jù),上位機(jī)完成數(shù)據(jù)的存儲,通過對比數(shù)據(jù)長度來作為本次測試的依據(jù)。軟件設(shè)計中CAN 總線傳輸速率為800Kbps,當(dāng)以太網(wǎng)傳輸波特率設(shè)置為10Mbps 時,CAN 總線上的數(shù)據(jù)總能被以太網(wǎng)收到并發(fā)送。為匹配兩模塊的傳輸速率,不出現(xiàn)丟包的現(xiàn)象,以太網(wǎng)發(fā)送數(shù)據(jù)頻率同樣采用800Kbps 進(jìn)行數(shù)據(jù)通信。如表1 所示,分別為CAN 模塊收發(fā)的數(shù)據(jù)長度以及以太網(wǎng)模塊收發(fā)的數(shù)據(jù)長度對比,由表可知兩模塊之間可以實(shí)現(xiàn)正確通信。
表1 CAN模塊收發(fā)的數(shù)據(jù)長度以及以太網(wǎng)模塊收發(fā)的數(shù)據(jù)長度對比
系統(tǒng)利用FPGA 強(qiáng)大的可編程能力,通過對CAN總線以及UDP 數(shù)據(jù)格式的拆解、提取、封裝實(shí)現(xiàn)CAN總線與以太網(wǎng)之間的通信。由于兩類總線應(yīng)用領(lǐng)域的不同,且數(shù)據(jù)傳輸速率存在較大差距,為實(shí)現(xiàn)兩者之間的正確通信,需對數(shù)據(jù)傳輸速率進(jìn)行匹配。通過實(shí)際測試,降低以太網(wǎng)數(shù)據(jù)傳輸頻率可達(dá)到正常通信,且不發(fā)生丟包現(xiàn)象。采用FPGA 芯片使得產(chǎn)品開發(fā)周期縮短,并能高效的實(shí)現(xiàn)總線間通信。系統(tǒng)滿足設(shè)計需求,對不同總線間通信具有一定參考意義。