周 鑫,田曄非
(1.重慶電子工程職業(yè)學(xué)院通信工程學(xué)院,重慶 401331;2重慶大學(xué)電氣工程學(xué)院,重慶 400044)
隨著嵌入式網(wǎng)絡(luò)技術(shù)的發(fā)展,嵌入式以太網(wǎng)在工業(yè)制造、智能監(jiān)控、測試系統(tǒng)等采用嵌入式芯片的各類系統(tǒng)中廣泛應(yīng)用,特別在工業(yè)領(lǐng)域中,數(shù)字化水平逐步提高,嵌入式設(shè)備均需要接入統(tǒng)一的現(xiàn)場網(wǎng)絡(luò),供DCS、MES等集中控制、管理軟件使用[1]。工業(yè)嵌入式設(shè)備分布在廠區(qū)各地,網(wǎng)絡(luò)傳輸距離過遠(yuǎn),傳統(tǒng)的嵌入式以太網(wǎng)采用網(wǎng)線連接,網(wǎng)線為雙絞線傳輸結(jié)構(gòu),當(dāng)長度過長時(shí)受電阻和電容的影響會(huì)導(dǎo)致網(wǎng)絡(luò)信號(hào)衰減和畸變,因此影響信號(hào)的傳輸穩(wěn)定性,規(guī)定單POE傳輸網(wǎng)段距離不能超過100 m,而不能滿足超遠(yuǎn)距離傳輸需求。使用搭建網(wǎng)絡(luò)中繼器的方式不但增加成本,而且對(duì)安裝調(diào)試,調(diào)試維修帶來困難,中繼器的設(shè)置也會(huì)產(chǎn)生一定傳輸延遲,降低傳輸效率[2]。
光纖以太網(wǎng)是目前應(yīng)用非常廣泛的技術(shù),是指利用在光纖上運(yùn)行以太網(wǎng)LAN數(shù)據(jù)包接入網(wǎng)絡(luò),在改變網(wǎng)絡(luò)傳輸媒介的基礎(chǔ)上,使以太網(wǎng)網(wǎng)絡(luò)可以進(jìn)行超長距離的傳輸[3],在嵌入式設(shè)備基礎(chǔ)上實(shí)現(xiàn)光纖以太網(wǎng)傳輸能夠很好地適用于工業(yè)應(yīng)用的超長距離網(wǎng)絡(luò)傳輸需求。本文將通過STM32F407芯片和DM9161EP芯片實(shí)現(xiàn)光纖以太網(wǎng)傳輸?shù)臄?shù)據(jù)傳輸,滿足嵌入式設(shè)備超長距離傳輸需求[3]。
目前工業(yè)應(yīng)用使用最廣泛的嵌入式芯片為STM32F407芯片,它支持32位高性能指令集,最高可達(dá)168 MHz頻率,內(nèi)置高速存儲(chǔ)器,有豐富的I/O接口和外設(shè)資源,其芯片內(nèi)部集成了MAC(media access control)控制器,支持IEEE-802.3和IEEE-802.3u規(guī)范控制PHY(Physical Layer)物理層,對(duì)外提供MII與RMII總線接口與PHY連接,從而實(shí)現(xiàn)數(shù)據(jù)傳輸[4]。
DM9161EP是用于100Base-FX以太網(wǎng)的物理層收發(fā)器芯片,其完全符合IEEE-802.3和IEEE-802.3u規(guī)范,支持光纖上實(shí)現(xiàn)100 Mbit/s以太網(wǎng)標(biāo)準(zhǔn)。其可以通過可變電壓的MII或RMII總線接口連接到MAC層。在對(duì)媒介側(cè)提供了數(shù)據(jù)接口,可以與光纖收發(fā)器相連接,實(shí)現(xiàn)光纖傳輸[6]。
STM32F407芯片通過標(biāo)準(zhǔn)的RMII硬件接口與DM9161EP相連進(jìn)行數(shù)據(jù)交互操作,可以減少I/O口的占用,節(jié)約芯片引腳資源,RMII總線需要50 MHz的晶體振蕩器振為STM32F407的MAC及DM9161EP提供同步時(shí)鐘,為節(jié)約成本,可直接采用STM32F407輸出50 MHz時(shí)鐘信號(hào)作為同步時(shí)鐘。DM9161EP與光纖收發(fā)器通過Rx/Tx± 4個(gè)信號(hào)線與光纖收發(fā)器連接,通過光纖收發(fā)器發(fā)送至網(wǎng)絡(luò)終端,光纖收發(fā)器為5 V 供電,其信號(hào)為0~5 V,而DM9161EP芯片信號(hào)為0~3.3 V ,因此需要加入電平轉(zhuǎn)換實(shí)現(xiàn)信號(hào)的互轉(zhuǎn),使得信號(hào)正確匹配。光纖收發(fā)器將電信號(hào)報(bào)文利用光纖傳輸至網(wǎng)絡(luò)終端,從而完成數(shù)據(jù)傳輸。系統(tǒng)需求電源為5 V和3.3 V,圖1為系統(tǒng)整體框圖。
圖1 系統(tǒng)整體框圖
根據(jù)系統(tǒng)設(shè)計(jì)架構(gòu),首先需要進(jìn)行系統(tǒng)電源電路設(shè)計(jì)。在本系統(tǒng)中STM32F407芯片、DM9161芯片工作在DC 3.3 V電壓,而光纖收發(fā)器工作在DC 5 V電壓,為了此系統(tǒng)可以正常工作,必須給系統(tǒng)統(tǒng)一供電。外部供電設(shè)計(jì)為DC 5 V輸入,因此必須設(shè)計(jì)DC 5 V-3.3 V的電源電路,在系統(tǒng)電源設(shè)計(jì)中應(yīng)用了電壓轉(zhuǎn)換芯片AP1510設(shè)計(jì)降壓型DC/DC變換器,實(shí)現(xiàn)電壓轉(zhuǎn)換。通過R1、R2、R3電阻將芯片輸出配置為3.3 V,為系統(tǒng)提供所需的DC 5 V與DC 3.3 V工作電壓。系統(tǒng)電源電路如圖2所示。
圖2 系統(tǒng)電源電路
本設(shè)計(jì)是基于STMF407、DM9161EP和光纖收發(fā)器HFBR-501X的光纖以太網(wǎng)通訊模塊設(shè)計(jì)。圖3為系統(tǒng)硬件電路圖,其中,STM32F407芯片通過站管理接口(SMI)訪問PHY芯片,SMI通過時(shí)鐘線MDC與數(shù)據(jù)線MDIO向PHY發(fā)送控制數(shù)據(jù)或者接收狀態(tài)信息。系統(tǒng)通過RMII接口進(jìn)行MAC層與PHY層的數(shù)據(jù)傳輸,RMII是精簡介質(zhì)獨(dú)立接口,是一種專用于MAC與PHY相連接的通用總線,包括7個(gè)數(shù)據(jù)和控制信號(hào)的引腳[7],RMII總線信號(hào)為:TXD0、TXD1、TX_EN、RXD0、RXD1、CRS_DV、REF_CLK 7路,其中TXD0、TXD1為一組數(shù)據(jù)發(fā)送信號(hào);TX_EN為發(fā)送使能信號(hào);RXD0、RXD1為一組數(shù)據(jù)接收信號(hào);CRS_DV為數(shù)據(jù)接收有效信號(hào);REF_CLK為連續(xù)時(shí)鐘信號(hào),該信號(hào)提供數(shù)據(jù)發(fā)送與接收時(shí)的參考時(shí)序,在RMII中當(dāng)傳輸速度在10 Mbit/s時(shí)應(yīng)為5 MHz,當(dāng)傳輸速度在100 Mbit/s時(shí)應(yīng)為50 MHz,為了節(jié)約資源采用STM32F407的MCO輸出50 MHz頻率信號(hào)作為時(shí)鐘源,提供參考時(shí)序,將其直接與對(duì)應(yīng)信號(hào)進(jìn)行直連。INT信號(hào)為PHY芯片的初始化信號(hào),用于系統(tǒng)初始化時(shí)對(duì)PHY的操作。RESET信號(hào)為PHY芯片的重置信號(hào),用于芯片重置,由STM32F407控制。在STM32F407與DM9161EP的接線中,MDIO、INT與RESET信號(hào)為低電平有效,因此連接上拉電阻對(duì)其進(jìn)行信號(hào)拉高。
DM9161EP芯片需要通過上電時(shí)相關(guān)配置引腳的電平狀態(tài)來進(jìn)行芯片初始化配置,其物理通信地址通過26~29引腳,以及25引腳來確定的,本系統(tǒng)在RMII模式下只連接了28、29引腳(RXD0、RXD1),其余為懸空配置,在上電時(shí)引腳都為高電平,因此本系統(tǒng)PHY芯片物理地址為0x00。因?yàn)閷?duì)媒一側(cè)連接光纖收發(fā)器,所以需要使PHY芯片工作在100Base-FX模式下,芯片的工作模式配置引腳為11~13引腳(OP0、OP1、OP2),并將電平狀態(tài)分別配置為高、低、低。
圖3 硬件電路圖
DM9161EP芯片通過RX+、RX-、TX+、TX-線實(shí)現(xiàn)與光線收發(fā)器HFBR-510X的數(shù)據(jù)收發(fā),通過45引腳連接SD信號(hào),用于檢測信號(hào)是否有效。因?yàn)镈M9161EP芯片引腳電平范圍為0~3.3 V,而光線收發(fā)器HFBR-510X引腳電平范圍為0~5 V,采用直連方式會(huì)造成數(shù)據(jù)錯(cuò)亂,甚至硬件損壞的不良后果,因此加入電平轉(zhuǎn)換模塊,如圖4所示,利用電阻分壓對(duì)RX+、RX-、TX+、TX-以及NC-SD信號(hào)進(jìn)行電平轉(zhuǎn)換,以保證電平匹配,讓PHY芯片RM9161EP與光纖收發(fā)器HFBR-510X數(shù)據(jù)收發(fā)正常。
圖4 電平轉(zhuǎn)換電路
2.3.1 DM9161EP驅(qū)動(dòng)
DM9161EP芯片的驅(qū)動(dòng)是實(shí)現(xiàn)設(shè)備聯(lián)網(wǎng)的基礎(chǔ),芯片驅(qū)動(dòng)就是STM32F407通過MAC控制器控制PHY芯片,訪問與控制DM9161EP芯片內(nèi)存儲(chǔ)器,如控制寄存器,PHY寄存器、以太網(wǎng)緩沖器[7],最終實(shí)現(xiàn)STM32F407可以發(fā)送與獲取以太網(wǎng)數(shù)據(jù)包。DM9161EP驅(qū)動(dòng)包括初始化、數(shù)據(jù)包發(fā)送與接收。
DM9161EP初始化是對(duì)MAC與PHY進(jìn)行初始化配置。首先STM32F407對(duì)RMII端口GPIO進(jìn)行配置,并且控制MCO輸出50 MHz頻率信號(hào),設(shè)置完成后就可以對(duì)DM9161EP進(jìn)行訪問,對(duì)DM9161EP進(jìn)行參數(shù)配置,設(shè)置PHY地址0x00,工作模式為RMII、100 Mbit/s全雙工,最后配置本地MAC地址,同時(shí)設(shè)置MAC濾波,使能接收和發(fā)送,設(shè)置網(wǎng)絡(luò)中斷,網(wǎng)絡(luò)中斷用于檢測是否接收到從硬件傳輸至本地的以太網(wǎng)數(shù)據(jù)包,使用中斷的方式比輪詢方式具有更高的效率。
STM32F407會(huì)把從DM9161EP芯片中接收/發(fā)送的數(shù)據(jù)信息存儲(chǔ)在一個(gè)高速接收/發(fā)送FIFO中,數(shù)據(jù)包通過DMA進(jìn)行接收/發(fā)送FIFO與內(nèi)存緩沖區(qū)之間的以太網(wǎng)數(shù)據(jù)傳輸,DMA通過DMA描述符進(jìn)行控制,接收與發(fā)送描述符被存儲(chǔ)在2個(gè)不同的描述符列表中,本系統(tǒng)選用鏈表結(jié)構(gòu)方式進(jìn)行連接,DMA描述符列表中的最后一個(gè)描述符指向第一個(gè),形成鏈?zhǔn)浇Y(jié)構(gòu)。這2個(gè)列表的基址分別寫入在STM32F407芯片的ETH_DMARDLAR寄存器與ETH_DMATDLAR寄存器中[10]。如圖5所示為采用鏈表結(jié)構(gòu),DMA常規(guī)描述符Control與Status為描述符控制和狀態(tài)描述;Buffer Count為描述指向緩沖區(qū)Buffer的長度;BufferAddress用于保存該描述符指向的內(nèi)存緩沖區(qū)地址;Next Descriptor保存下一個(gè)描述符的地址,當(dāng)列表最后一個(gè)描述符則保存列表首位描述符的地址。
圖5 輸入或輸出DMA描述符與內(nèi)存緩沖區(qū)關(guān)系
根據(jù)DMA描述符特性,DM9161EP_Rx_Packet()函數(shù)為以太網(wǎng)接收數(shù)據(jù)函數(shù),將以太網(wǎng)接收的數(shù)據(jù)打包成一個(gè)結(jié)構(gòu)體返回,該結(jié)構(gòu)體包含有指向DMA描述符的指針,通過該指針獲取以太網(wǎng)數(shù)據(jù)包所在的位置,通過描述符列表獲取完整的數(shù)據(jù)并保存至緩沖區(qū)內(nèi)。DM9161EP_Tx_Packet()函數(shù)為以太網(wǎng)發(fā)送數(shù)據(jù)函數(shù),其實(shí)現(xiàn)過程與接收函數(shù)類似,將緩沖區(qū)數(shù)據(jù)傳入DMA描述符,完成后使能發(fā)送標(biāo)志位,從而將數(shù)據(jù)打包發(fā)送至以太網(wǎng)。
2.3.2 TCP/IP協(xié)議實(shí)現(xiàn)
本系統(tǒng)采用以太網(wǎng)傳輸,還需要實(shí)現(xiàn)TCP/IP協(xié)議,完整的TCP/IP協(xié)議族功能繁多,代碼量也較為巨大,不能很好地適用于資源有限的嵌入式設(shè)備中。LWIP是一個(gè)開源的輕量級(jí)TCP/IP協(xié)議棧,該協(xié)議棧采用C語言編寫,能夠方便地移植至嵌入式設(shè)備中,其減少了內(nèi)存的占用,因此被廣泛地應(yīng)用在嵌入式設(shè)備中使用。本文選用LWIP來實(shí)現(xiàn)TCP/IP協(xié)議。LWIP采用分層方式,把TCP/IP協(xié)議中每一個(gè)協(xié)議作為單獨(dú)的模塊,并且提供了該模塊的訪問接口。圖6為LWIP模型與接口,應(yīng)用層為應(yīng)用程序,采用標(biāo)準(zhǔn)的netconn接口函數(shù)或應(yīng)用層消息郵箱方式與上層進(jìn)行交互,這樣應(yīng)用程序能夠直接調(diào)用使用TCP/IP;對(duì)于下層網(wǎng)絡(luò)驅(qū)動(dòng)接口函數(shù)采用標(biāo)準(zhǔn)化函數(shù)接口,需要根據(jù)硬件驅(qū)動(dòng)不同實(shí)現(xiàn)函數(shù)編寫,其中包括low_level_input()底層輸入函數(shù)接口與low_level_output()底層輸出函數(shù)接口[11]。
圖6 LWIP模型與接口
根據(jù)DM9161EP驅(qū)動(dòng),low_level_output()將需要發(fā)送的LWIP協(xié)議棧Pbuf緩沖區(qū)中的數(shù)據(jù)拷貝至DMA發(fā)送數(shù)據(jù)緩沖區(qū)中,并使用驅(qū)動(dòng)發(fā)送至以太網(wǎng)。low_level_input()函數(shù)是在DM9161EP中提取接收到的以太網(wǎng)數(shù)據(jù)包,即DMA接收緩沖區(qū)中數(shù)據(jù)拷貝至LWIP協(xié)議棧Pbuf緩沖區(qū)中,將這個(gè)Pbuf返回,給LWIP進(jìn)行以太網(wǎng)報(bào)文的分析處理。至此完成了LWIP在STM32F407系統(tǒng)中的移植。
根據(jù)設(shè)計(jì)的嵌入式光纖以太網(wǎng)系統(tǒng)進(jìn)行制作,圖7所示為樣品板卡實(shí)物圖,軟件中設(shè)置樣品板卡IP地址為192.168.1.103,通過多模光纖線連接至遠(yuǎn)端管理計(jì)算機(jī),計(jì)算機(jī)IP設(shè)置為與樣品板卡IP在同一網(wǎng)段,采用windows的ping指令進(jìn)行ARP協(xié)議測試,可以檢測通訊是否正常,通訊延時(shí)及丟包率情況,圖8為計(jì)算機(jī)ping通樣品板卡IP結(jié)果,說明本設(shè)計(jì)網(wǎng)絡(luò)功能正常。
圖7 樣品板卡實(shí)物圖
圖8 計(jì)算機(jī)ping通樣品板卡IP
網(wǎng)絡(luò)測試正常后,進(jìn)行光纖傳輸距離及性能的簡單測試,測試方式為在不同傳輸長度時(shí)采用計(jì)算機(jī)ping指令發(fā)送10個(gè)數(shù)據(jù)包,并觀察記錄其丟包情況,延時(shí)時(shí)間情況,實(shí)驗(yàn)數(shù)據(jù)如表1所示,可見在700 m內(nèi)網(wǎng)絡(luò)傳輸穩(wěn)定,沒有出現(xiàn)丟包,網(wǎng)絡(luò)延時(shí)較低,當(dāng)高于700 m傳輸距離時(shí),收光纖收發(fā)器功率及光纖接收傳感器敏感度限制,光信號(hào)開始出現(xiàn)衰減,延時(shí)與丟包率逐漸上升,在高于850 m傳輸時(shí)出現(xiàn)了大量的丟包現(xiàn)象。實(shí)驗(yàn)表明本系統(tǒng)光纖傳輸距離在0~700 m網(wǎng)絡(luò)連接快速穩(wěn)定,傳輸距離遠(yuǎn)遠(yuǎn)高于傳統(tǒng)網(wǎng)線傳輸?shù)臉O限距離,充分說明本設(shè)計(jì)可以大幅度提高嵌入式以太網(wǎng)的超長距離傳輸。實(shí)驗(yàn)數(shù)據(jù)如表1所示。
表1 實(shí)驗(yàn)數(shù)據(jù)
本文提出一種長距離的嵌入式以太網(wǎng)傳輸系統(tǒng),其創(chuàng)新之處在于利用STM32F407與DM9161EP支持的IEEE-802.3u規(guī)范進(jìn)行了光纖以太網(wǎng)的設(shè)計(jì),將傳輸介質(zhì)從電傳播的網(wǎng)線變更為光傳播的光纖,利用光纖的傳輸特性實(shí)現(xiàn)了超遠(yuǎn)距離的直連以太網(wǎng)傳輸。相對(duì)比其他嵌入式以太網(wǎng)傳輸,本設(shè)計(jì)具有快速穩(wěn)定的超遠(yuǎn)距離傳輸能力,在0~700 m直連傳輸范圍內(nèi)表現(xiàn)穩(wěn)定,無需在中段架設(shè)如中繼器等信號(hào)增強(qiáng)設(shè)備,讓嵌入式網(wǎng)絡(luò)設(shè)備具備了超遠(yuǎn)距離傳輸能力,可很好地應(yīng)用于需要遠(yuǎn)距離傳輸?shù)膽?yīng)用系統(tǒng)中。本系統(tǒng)設(shè)計(jì)連接方式采用標(biāo)準(zhǔn)接口,能很方便地移植至其他嵌入式控制器,可以靈活地運(yùn)用在工業(yè)制造、智能監(jiān)控、測試系統(tǒng)等需要超長距離監(jiān)控的領(lǐng)域。