基于DS80C410串口至以太網(wǎng)接口轉(zhuǎn)換器的實現(xiàn)
摘要:介紹了一種基于高性能51內(nèi)核網(wǎng)絡(luò)微控制器的串口至以太網(wǎng)接口轉(zhuǎn)換器的設(shè)計方案,采用網(wǎng)絡(luò)單片機(jī)DS80C410,利用集成的MAC通過以太網(wǎng)收發(fā)器與以太網(wǎng)相連,借助TINI SDK軟件開發(fā)包通過Java編程實現(xiàn)串口和以太網(wǎng)之間的數(shù)據(jù)通訊。串口至以太網(wǎng)接口轉(zhuǎn)換器使得帶有RS232/422/485通訊接口的設(shè)備和以太網(wǎng)服務(wù)器進(jìn)行數(shù)據(jù)流傳輸,通過以太網(wǎng)服務(wù)器對串口設(shè)備進(jìn)行實時監(jiān)控。
關(guān)鍵詞:串口;以太網(wǎng);DS80C410;LXT972ALC;Java
1 引言
互聯(lián)網(wǎng)硬件和軟件的迅猛發(fā)展,使得各種電氣設(shè)備、儀器儀表以及生產(chǎn)過程中的數(shù)據(jù)采集與控制設(shè)備逐漸走向網(wǎng)絡(luò)化。計算機(jī)技術(shù)、測控技術(shù)、網(wǎng)絡(luò)與通訊技術(shù)不斷發(fā)展與融合是一個必然的趨勢。目前以太網(wǎng)已經(jīng)廣泛應(yīng)用于計算機(jī)網(wǎng)絡(luò),成為互聯(lián)網(wǎng)鏈接不可缺少的部分,另外以太網(wǎng)一般都基于TCP/IP協(xié)議,使得整個網(wǎng)絡(luò)只有一種互聯(lián)通訊協(xié)議,滿足控制系統(tǒng)各個層次的要求,而且易于和Internet實現(xiàn)無縫連接?,F(xiàn)今大多數(shù)現(xiàn)場設(shè)備通過串口與外界通訊,甚至串口是它們與外界通訊的唯一通道,串口設(shè)備的廣泛使用以及對設(shè)備上網(wǎng)能力的不斷需求,使得如何實現(xiàn)串口到以太網(wǎng)的轉(zhuǎn)換顯得尤為重要。DS80C410利用集成的MAC通過物理層器件與以太網(wǎng)相連,借助TINI SDK軟件開發(fā)包可以輕松實現(xiàn)串口至以太網(wǎng)的接口轉(zhuǎn)換。
2 系統(tǒng)硬件
2.1 DS80C410簡介
DS80C410是與8051兼容的高度集成的網(wǎng)絡(luò)微控制器。它內(nèi)置一個10/100bps的以太網(wǎng)MAC,3個串行端口,1個CAN2.0B控制器,一個1-Wire控制器和64個I/O口,具有64K字節(jié)內(nèi)部SRAM,用于存儲用戶應(yīng)用和網(wǎng)絡(luò)堆棧。為了便于訪問網(wǎng)絡(luò),在ROM中提供了一個完整的、可被應(yīng)用訪問的TCP / IP 協(xié)議棧, 支持IPv4 和IPv6, 可執(zhí)行UDP, TCP, DHCP, ICMP和IGMP,協(xié)議棧支持32個TCP連接而且可以通過以太網(wǎng)MAC以5Mbps的速度發(fā)送數(shù)據(jù)。最高達(dá)75MHz的系統(tǒng)時鐘頻率使最短指令周期僅有54ns。為了加快微控制器和內(nèi)存之間的數(shù)據(jù)傳輸, ROM包含固件用DHCP連接TFTP來實現(xiàn)以太網(wǎng)的網(wǎng)絡(luò)啟動。
DS80C410內(nèi)部集成了10/1000Mbps的以太網(wǎng)控制器(MAC),它支持使用以太網(wǎng)/IEEE802.3協(xié)議的物理設(shè)備。它通過一個介質(zhì)無關(guān)接口(MII)提供了接收、發(fā)送和流控制機(jī)制。MII包含了一個串行管理總線,它可以用來設(shè)置外部物理設(shè)備。MII可以設(shè)置為半雙工和全雙工模式,速率可以是10Mbps和100Mbps,也可以設(shè)置成支持1OMbps的ENDEC操作模式。以太網(wǎng)控制模塊如圖1所示:
緩沖控制單元(BCU):是所有DS80C410以太網(wǎng)操作的中央控制器,通過一系列特殊功能寄存器控制CPU與以太網(wǎng)控制模塊的讀/寫操作。
命令/狀態(tài)寄存器(CSR):旨在控制與檢測以太網(wǎng)操作過程。
介質(zhì)無關(guān)接口(MII):包括兩個基本模塊,即MII I/O模塊和MII管理模塊。MII I/O模塊提供獨(dú)立的發(fā)送和接收數(shù)據(jù)路徑和物理層網(wǎng)絡(luò)狀態(tài)信號輸入,MII管理模塊執(zhí)行2線串行通訊總線便于訪問物理層寄存器。
地址檢測模塊(Address Check):監(jiān)控所有輸入數(shù)據(jù)包的目的地址,根據(jù)CPU配置的過濾標(biāo)準(zhǔn)決定是轉(zhuǎn)發(fā)還是丟棄。地址檢測結(jié)果和幀類型信號位一起由BCU存入數(shù)據(jù)包接收狀態(tài)字中。
發(fā)送/接收緩沖寄存器(Tx/Rx):DS80C410用8KB內(nèi)部SRAM作為發(fā)送/接收數(shù)據(jù)包的緩沖寄存器,CPU可用MOVX指令訪問數(shù)據(jù)存儲器,BCU也可以訪問SRAM,在需要存儲或找回以太網(wǎng)數(shù)據(jù)包信息時可自動讀/寫緩沖寄存器。
電源管理模塊(Power Management):可以通過CPU設(shè)定為休眠模式,在不處理以太網(wǎng)通信時以便節(jié)省電源[1]。
2.2 LXT972ALC簡介
LXT972ALC是一個遵守快速以太網(wǎng)協(xié)議的接口收發(fā)芯片,支持10/100MAC的標(biāo)準(zhǔn)MII,它是物理層設(shè)備,完成參考模型中以IEEE802.3標(biāo)準(zhǔn)定義的物理編碼子層、物理媒體附加層和物理媒體獨(dú)立子層的功能。LXT972ALC設(shè)備實現(xiàn)了標(biāo)準(zhǔn)IEEE802.3定義的MII提供了從MAC到LXT972ALC數(shù)據(jù)傳輸?shù)莫?dú)立通道。每一個通道都有各自的時鐘、數(shù)據(jù)總線和控制信號[3]。MAC每一次發(fā)送都使用先導(dǎo)模式,當(dāng)LXT972ALC檢測到先導(dǎo)符時,它發(fā)送一個幀開始符,然后進(jìn)行編碼和發(fā)送數(shù)據(jù)包的剩余部分,包含包數(shù)據(jù)和CRC。當(dāng)包結(jié)束時,LXT972ALC發(fā)送包結(jié)束分解符,然后轉(zhuǎn)為發(fā)送空閑標(biāo)識符。
2.3 轉(zhuǎn)換器的硬件連接
基于DS80C410串口至以太網(wǎng)接口轉(zhuǎn)換器的硬件連接如圖2所示。
串口采用MAX202實現(xiàn)TTL電平到RS232電平的轉(zhuǎn)換,通過RS232標(biāo)準(zhǔn)接口(DB9)接入外部串口設(shè)備。以太網(wǎng)收發(fā)器的輸出經(jīng)過網(wǎng)絡(luò)變壓器的隔離接入RJ45通過5類雙絞線電纜連接10/100BASE-T以太網(wǎng)。
3 軟件部分
DS80C410 MCU內(nèi)部64KB的ROM程序中包含完全符合工業(yè)標(biāo)準(zhǔn)的完整的TCP/IP IPv4/v6 協(xié)議棧,搶占式調(diào)度程序和可以裝載應(yīng)用程序的網(wǎng)絡(luò)引導(dǎo)程序、串口引導(dǎo)裝載程序。系統(tǒng)啟動時,ROM對單片機(jī)的串口0進(jìn)行初始化,微控制器通過串口0和開發(fā)主機(jī)通信,向Flash寫入程序。應(yīng)用程序使用Java來開發(fā),借助軟件開發(fā)工具包TINI SDK在開發(fā)主機(jī)上完成,TINI SDK將DS80C410中的硬件部分虛擬成Java的類,通過調(diào)用相關(guān)的方法實現(xiàn)對硬件的操作。TINI SDK提供了Java程序的運(yùn)行環(huán)境,在主機(jī)上開發(fā)Java應(yīng)用程序經(jīng)過轉(zhuǎn)換,即可在目標(biāo)系統(tǒng)上運(yùn)行。以串口設(shè)備到以太網(wǎng)服務(wù)器數(shù)據(jù)流傳輸程序為例,包括串口到以太網(wǎng)主線程、維持線程,串口發(fā)送、串口接收子線程。各流程圖分別如圖3 、4、5、6所示:
串口到以太網(wǎng)的主程序包括串口參數(shù)、流控制模式的設(shè)定,串口輸入輸出流的初始化,流量計數(shù)器的設(shè)定和初始化,接收超時、接收門限的設(shè)定(接收門限為緩沖容量長度,接收超時設(shè)為100ms),連接網(wǎng)絡(luò)服務(wù)器,創(chuàng)建并啟動串口接收和發(fā)送子線程,啟動維持線程。維持線程用于周期(周期為1分鐘)更新和統(tǒng)計接收和發(fā)送的數(shù)據(jù)流量。串口接收以太網(wǎng)數(shù)據(jù)是通過網(wǎng)絡(luò)接口從網(wǎng)絡(luò)結(jié)點(diǎn)上獲取數(shù)據(jù)并送至以太網(wǎng)緩沖區(qū),再通過串口將數(shù)據(jù)流發(fā)送到串口設(shè)備。串口向以太網(wǎng)發(fā)送數(shù)據(jù)是把有效數(shù)據(jù)讀到串口接收緩沖區(qū),通過向網(wǎng)絡(luò)緩沖區(qū)寫數(shù)據(jù)把串口數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)結(jié)點(diǎn)(或服務(wù)器),并且對這兩個進(jìn)程進(jìn)行監(jiān)視,并確認(rèn)是否出現(xiàn)異常(網(wǎng)絡(luò)連接關(guān)斷或流量計數(shù)器異常)。
Java編程要點(diǎn):申明串口到以太網(wǎng)擴(kuò)展線程類,申明內(nèi)部串口類及相應(yīng)的輸入輸出流對象,內(nèi)部網(wǎng)絡(luò)接口類及相應(yīng)的輸入輸出流對象。輸入流對象就是可以從其獲得連續(xù)字節(jié)的對象,輸出流對象就是可向其輸入一系列字節(jié)的對象。在串口接收子線程中,將網(wǎng)絡(luò)數(shù)據(jù)寫到串口是通過調(diào)用串口輸出流的寫方法,將以太網(wǎng)緩沖器中接收到的數(shù)據(jù)發(fā)送到串口,具體為:spout.write(ethbuf,0,count) ,spout為串口輸出流對象,write()為寫方法作用是將數(shù)組ethbuf中count個字節(jié)寫入串口輸出流中,參數(shù)ethbuf為長度為1024的數(shù)組,參數(shù)0表示從數(shù)組的0處開始發(fā)送,參數(shù)count為以太網(wǎng)緩沖器中接收到的數(shù)據(jù)長度。類似的,在串口發(fā)送子線程中,將串口數(shù)據(jù)發(fā)到網(wǎng)絡(luò)服務(wù)器是通過網(wǎng)絡(luò)輸出流的寫方法,將串口輸入緩沖器中的數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)服務(wù)器,具體為:sout.write(serbuf,0,count),sout為網(wǎng)絡(luò)接口輸出流對象,參數(shù)count為串口接收緩沖區(qū)中接收到的數(shù)據(jù)長度,其余同上不再細(xì)說。
4 結(jié)論
本文作者創(chuàng)新點(diǎn):采用嵌入式以太網(wǎng)控制器,節(jié)省了外圍器件,硬件電路設(shè)計相對簡單,系統(tǒng)開發(fā)周期較短,開發(fā)成本相對較低;數(shù)據(jù)通信采用面向?qū)ο蟮腏ava語言,采用多線程技術(shù),提高CPU工作效率;設(shè)計網(wǎng)絡(luò)化的測量和控制裝置?;贒S80C410串口至以太網(wǎng)接口轉(zhuǎn)換器可以實現(xiàn)串口設(shè)備和以太網(wǎng)服務(wù)器的數(shù)據(jù)流傳輸,通過以太網(wǎng)服務(wù)器對串口設(shè)備進(jìn)行監(jiān)控。串口設(shè)備和以太網(wǎng)的連接有助于提高數(shù)據(jù)傳輸效率,克服串行通訊本身傳輸速度慢,傳輸距離短的限制。目前廣泛用于廠站自動化的大量國內(nèi)外保護(hù)測量設(shè)備都只有RS232/422/485通訊接口,串口設(shè)備通過外部轉(zhuǎn)換增加上網(wǎng)能力可能更符合實際要求,這就使得串口到以太網(wǎng)轉(zhuǎn)換器的實現(xiàn)具有現(xiàn)實性和應(yīng)用可能性。