<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 手機(jī)與無(wú)線通信 > 設(shè)計(jì)應(yīng)用 > 基于TCP/IP的浮標(biāo)網(wǎng)絡(luò)通信系統(tǒng)設(shè)計(jì)

          基于TCP/IP的浮標(biāo)網(wǎng)絡(luò)通信系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2010-04-30 來(lái)源:網(wǎng)絡(luò) 收藏

          引言

          水聲信道匹配基礎(chǔ)研究是建立在水聲學(xué)、海洋物理聲學(xué)以及現(xiàn)代信號(hào)處理技術(shù)基礎(chǔ)上的新興研究領(lǐng)域。為滿足研究需要而構(gòu)建的局部海域水聲信道測(cè)量平臺(tái)(圖 1),能夠?qū)崿F(xiàn)環(huán)境信息和信道參量的系統(tǒng)采集和實(shí)時(shí)傳遞,對(duì)信道寬容匹配方法的可行性進(jìn)行檢驗(yàn)。

          浮標(biāo)系統(tǒng)以它的靈活、高效、自身干擾小等特點(diǎn),在水聲信道研究中發(fā)揮著其它設(shè)備不可替代的作用?,F(xiàn)有的浮標(biāo)系統(tǒng)大多采用直接序列擴(kuò)頻電臺(tái)直接進(jìn)行水面通訊,這種方式往往不使用網(wǎng)絡(luò)協(xié)議或使用自定義的網(wǎng)絡(luò)協(xié)議。而采用無(wú)線網(wǎng)橋進(jìn)行水面通訊,以TCP/IP作為網(wǎng)絡(luò)協(xié)議,將大大增強(qiáng)浮標(biāo)系統(tǒng)網(wǎng)絡(luò)化。同時(shí)由于TCP/IP協(xié)議是目前最為成熟的網(wǎng)絡(luò)協(xié)議之一,浮標(biāo)網(wǎng)絡(luò)的穩(wěn)定性、可擴(kuò)展性都得以提高,甚至通過(guò)互聯(lián)網(wǎng)直接控制浮標(biāo)系統(tǒng)也成為可能。因此,本文基于TCP/IP網(wǎng)絡(luò)協(xié)議設(shè)計(jì)并實(shí)現(xiàn)了浮標(biāo)網(wǎng)絡(luò)通信系統(tǒng)。

          1、浮標(biāo)網(wǎng)絡(luò)通訊系統(tǒng)設(shè)計(jì)

          1.1 基于TCP/IP網(wǎng)絡(luò)協(xié)議的浮標(biāo)通訊系統(tǒng)

          水聲信道匹配基礎(chǔ)研究所使用的浮標(biāo)具有水下傳感器單元、信號(hào)處理單元及水面通訊單元。其中水面通訊單元負(fù)責(zé)浮標(biāo)與岸基控制站、測(cè)量船及其它浮標(biāo)的信息交換,要求具備網(wǎng)絡(luò)通訊功能。

          浮標(biāo)網(wǎng)絡(luò)通訊系統(tǒng)由無(wú)線網(wǎng)橋、TCP/IP協(xié)議控制單元及微控制器(MCU)組成,如圖 2所示。無(wú)線網(wǎng)橋采用較為成熟網(wǎng)橋產(chǎn)品,如BreezeNET無(wú)線網(wǎng)橋,其功能是通過(guò)無(wú)線網(wǎng)路傳輸TCP/IP數(shù)據(jù)包。MCU負(fù)責(zé)對(duì)TCP/IP協(xié)議棧的進(jìn)行設(shè)置,并寫入待發(fā)數(shù)據(jù)及讀出接收數(shù)據(jù)。

          TCP/IP協(xié)議棧的實(shí)現(xiàn)是浮標(biāo)網(wǎng)絡(luò)通訊系統(tǒng)的核心部分。其實(shí)現(xiàn)方式可以采用軟件實(shí)現(xiàn),但該方法一般要求處理速度較高的MCU,而且占用大量代碼空間,同時(shí)編程需要對(duì)整個(gè)TCP/IP 協(xié)議的機(jī)制和細(xì)節(jié)十分熟悉,開發(fā)難度大。而硬件實(shí)現(xiàn)方式則把MCU從繁重的網(wǎng)絡(luò)協(xié)議運(yùn)行工作中解放出來(lái),從而提高了系統(tǒng)效率。

          數(shù)據(jù)或指令由無(wú)線網(wǎng)橋發(fā)送或接收。它通過(guò)RJ45接口經(jīng)變壓器與10Base-T通用以太網(wǎng)接口控制器RTL8201相連。RTL8201通過(guò)MII標(biāo)準(zhǔn)接口與W3100A交換數(shù)據(jù)。RTL8201從W3100A處接收以太幀,然后進(jìn)行曼徹斯特編碼,發(fā)送以太網(wǎng)幀時(shí),先在幀前端加上幀起始標(biāo)志。當(dāng)*到網(wǎng)絡(luò)中有以太網(wǎng)幀存在時(shí),RTL8201接收模塊首先用鎖相環(huán)電路實(shí)現(xiàn)與物理信號(hào)同步,然后對(duì)物理信號(hào)采樣接收并送給曼徹斯特解碼功能塊,最后得到W3100A能識(shí)別的歸“0”碼(已把幀前導(dǎo)碼分離),并將其通過(guò)MII接口送入網(wǎng)絡(luò)接口層模塊。發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)由MCU數(shù)據(jù)接口寫入W3100A的發(fā)送緩沖區(qū),通過(guò)控制各個(gè)協(xié)議層的相關(guān)控制寄存器,數(shù)據(jù)在TCP層中添加上各個(gè)控制標(biāo)志等,封裝成為TCP段,實(shí)現(xiàn)面向連接的可靠傳輸;TCP段接著交給IP層進(jìn)行打包,IP層的一個(gè)重要功能是實(shí)現(xiàn)對(duì)TCP段的分片,以達(dá)到IP數(shù)據(jù)報(bào)能夠最大效率利用以太網(wǎng)幀的數(shù)據(jù)區(qū)的目的。完整的IP數(shù)據(jù)報(bào)繼續(xù)傳給網(wǎng)絡(luò)接口層,LLC子層使用物理層提供的不可靠的比特鏈路,實(shí)現(xiàn)可靠的分組傳輸服務(wù),MAC子層為數(shù)據(jù)分組添加目的節(jié)點(diǎn)的物理地址,MAC實(shí)現(xiàn)不可靠的分組傳輸。經(jīng)過(guò)網(wǎng)絡(luò)接口層后,最終封裝成幀格式,然后再經(jīng)過(guò)MII接口送入RTL8201,在RTL8201里進(jìn)行曼徹斯特編碼并添加前導(dǎo)信號(hào)等。當(dāng)RTL8201*到物理鏈路空閑時(shí),立即通過(guò)RJ45接口把數(shù)據(jù)幀發(fā)送到以太網(wǎng)上。接收數(shù)據(jù)時(shí)則進(jìn)行相反的操作,收發(fā)器接收以太網(wǎng)上的物理信號(hào)把前導(dǎo)碼分離出來(lái)并進(jìn)行曼徹斯特解碼,把結(jié)果傳送給網(wǎng)絡(luò)接口層,網(wǎng)絡(luò)接口層MAC子層檢查幀的物理目的地址是否與自己的相同,以決定是否交給LLC子層,LLC用差錯(cuò)檢測(cè)位判斷分組是否正確。正確的分組被送入IP層,在IP層中檢測(cè)錯(cuò)誤、拆封并進(jìn)行分片重組后送給TCP層,TCP層實(shí)現(xiàn)面向連接的可靠傳輸,所以TCP層將進(jìn)行嚴(yán)格的差錯(cuò)控制,再?gòu)腡CP段中取出數(shù)據(jù),然后通過(guò)數(shù)據(jù)接口傳送回MCU。物理幀經(jīng)過(guò)各個(gè)協(xié)議層進(jìn)行解包,最終把數(shù)據(jù)傳回MCU,但在各層解包時(shí)如果IP地址或數(shù)據(jù)出錯(cuò)等,數(shù)據(jù)包將被丟棄,并要求重傳。如果處理的報(bào)文是ICMP、UDP 或ARP等時(shí),其大致流程是一樣的,不同報(bào)文的區(qū)別會(huì)在相應(yīng)的包頭指示出來(lái),供協(xié)議識(shí)別。

          1.2 TCP/IP協(xié)議棧W3100A簡(jiǎn)介

          W3100A是一種TCP/IP協(xié)議棧芯片,它包含了TCP、IP Ver.4、UDP、ICMP、ARP等Internet協(xié)議和DLC、MAC以太網(wǎng)協(xié)議。其功能框圖如圖 3所示。W3100A芯片由4部分組成:微控器接口單元、網(wǎng)絡(luò)協(xié)議引擎、雙口RAM及網(wǎng)絡(luò)物理層介質(zhì)開關(guān)接口MII(Media Independent Interface)單元。W3100A支持全雙工20Mbps的數(shù)據(jù)通信,并可同時(shí)支持4個(gè)獨(dú)立的網(wǎng)絡(luò)連接;提供16KB的數(shù)據(jù)緩沖雙口SRAM;采用0.35μm的CMOS工藝,64引腳LQFP封裝;采用3.3V電源電壓,其I/O接口兼容了5V的數(shù)字邏輯電平,可非常方便地與MCU和DSP接口連接。

          2、電路設(shè)計(jì)

          該系統(tǒng)的主要電路由微控制器MSP430F169、網(wǎng)絡(luò)協(xié)議棧W3100A、以太網(wǎng)接口控制器RTL8201及網(wǎng)絡(luò)接口構(gòu)成。W3100A與MSP430F169的連接可采用I2C接口模式或直接總線模式。采用I2C接口模式的優(yōu)點(diǎn)是電路簡(jiǎn)潔,占用端口資源少。但I(xiàn)2C接口的傳輸速度會(huì)受到一定限制,所以當(dāng)要求更高傳輸速度時(shí),可采用直接總線接口方式,如圖 4所示。W3100A提供MII接口與RTL8201相連,其中引腳RX_CLK、RXDV、RXD[0:3]以及COL用于數(shù)據(jù)的接收,而TX_CLK、TXE、TXD[0:3]用于數(shù)據(jù)的發(fā)送。

          在接口的實(shí)現(xiàn)中,以太網(wǎng)變壓器是不可缺少的。在差分發(fā)送引腳(TX+/TX-)上,需要一個(gè)專用于10BASE-T 操作的脈沖變壓器,將要發(fā)送的數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上。網(wǎng)絡(luò)傳來(lái)的數(shù)據(jù)也經(jīng)過(guò)變壓器,由差分接收引腳(RX+/RX-)接收。以太網(wǎng)變壓器的作用主要是將外部線路與RTL8201隔開,防止干擾和燒壞元器件,實(shí)現(xiàn)帶電的插拔功能。本設(shè)計(jì)采用了PULES的J0011型變壓器,其內(nèi)部結(jié)構(gòu)如圖 5所示。該變壓器集成了RJ-45接頭,在簡(jiǎn)化了連線的同時(shí)也提高了高頻信號(hào)傳輸?shù)目煽啃浴?/P>

          同時(shí)在設(shè)計(jì)復(fù)位電路時(shí)應(yīng)注意,由于W3100A的復(fù)位引腳為高電平有效,而MSP430F169和RTL8021的復(fù)位引腳為低電平有效,所以在設(shè)計(jì)復(fù)位電路時(shí)要求同時(shí)產(chǎn)生高、低兩路復(fù)位信號(hào),如圖 6所示。

          3、軟件設(shè)計(jì)

          3.1 MSP430總線讀寫

          W3100A有專門的微控制器接口與MCU相連,其總線操作類似于MCU對(duì)外部存儲(chǔ)器的讀寫。但MSP430微控制器沒(méi)有專門的外部擴(kuò)展總線接口,所以這里采用通用端口模擬外部擴(kuò)展總線端口。對(duì)于W3100A的訪問(wèn)要依照其讀寫時(shí)序進(jìn)行操作,如圖 7、圖 8所示,可將讀寫程序作為函數(shù)在主程序中調(diào)用。

          下面列舉了部分讀總線程序:


          寫總線過(guò)程與讀總線類似,不同的是將P4端口設(shè)為輸出狀態(tài),并操作寫有效(/WE)。要注意的是/WE恢復(fù)到高電平時(shí)的上升沿觸發(fā)數(shù)據(jù)寫入。

          3.2 網(wǎng)絡(luò)傳輸控制

          通過(guò)Wiznet公司為W3100A專門提供的Socket API函數(shù),可使網(wǎng)絡(luò)通訊的軟件設(shè)計(jì)更加方便。首先初始化W3100A的網(wǎng)絡(luò)設(shè)置,即在相應(yīng)的寄存器中設(shè)置默認(rèn)網(wǎng)關(guān)、子網(wǎng)掩碼、本機(jī)物理地址和IP地址,然后建立Socket連接以實(shí)現(xiàn)通訊。整個(gè)過(guò)程與Windows Socket編程十分類似。

          建立TCP連接的流程如圖 9所示。首先完成芯片的TCP/IP初始化,設(shè)置相應(yīng)通道如0通道的協(xié)議選擇寄存器C0_SPOR為0X01;選擇TCP協(xié)議,執(zhí)行通道0命令寄存器C0_CR中的sock_init命令位, 同時(shí)將C0_TW_PR、C0_TR_PR及C0_TA_PR置成同一值;然后執(zhí)行C0_CR的connect和listen命令位,此時(shí)TCP連接就建立起來(lái)。

          W3100A內(nèi)部的16KB的雙口RAM作為數(shù)據(jù)發(fā)送和接收緩沖。其中0x4000~0x5FFF的地址空間是發(fā)送數(shù)據(jù)緩沖區(qū),0x6000~0x7FFF的地址空間是接收數(shù)據(jù)緩沖區(qū)。MCU程序?qū)⒁l(fā)送的數(shù)據(jù)寫入發(fā)送緩沖區(qū),并從接收緩沖區(qū)讀出收到的數(shù)據(jù)。當(dāng)成批的數(shù)據(jù)發(fā)送時(shí),一定要先查詢1次發(fā)送數(shù)據(jù)指針,從而計(jì)算出可以利用的發(fā)送緩沖區(qū)的大小。圖 10示意了TCP數(shù)據(jù)發(fā)送的程序流程。數(shù)據(jù)接收的過(guò)程與發(fā)送過(guò)程類似,在此不再贅述。

          4、測(cè)試及分析

          功能測(cè)試的關(guān)鍵在于對(duì)系統(tǒng)的可用性及穩(wěn)定性進(jìn)行實(shí)驗(yàn)。為此,建立了一個(gè)簡(jiǎn)化通訊網(wǎng)絡(luò),采用PC機(jī)作為通訊網(wǎng)絡(luò)的一個(gè)終端,浮標(biāo)作為另一終端。通過(guò)測(cè)試兩者間的通訊情況來(lái)實(shí)驗(yàn)本系統(tǒng)功能。

          首先,測(cè)試網(wǎng)絡(luò)連接情況。作為必要的IP實(shí)驗(yàn),由PC機(jī)將PING命令發(fā)送給浮標(biāo),PC機(jī)顯示結(jié)果如圖 11所示。

          在局域網(wǎng)暢通的情況下,理論上0字節(jié)的PING請(qǐng)求平均響應(yīng)時(shí)間為1ms,實(shí)驗(yàn)結(jié)果驗(yàn)證了網(wǎng)絡(luò)連接的正常。

          通過(guò)大量轉(zhuǎn)發(fā)數(shù)據(jù)的方法測(cè)試系統(tǒng)穩(wěn)定性。由PC機(jī)發(fā)送數(shù)據(jù)至浮標(biāo),浮標(biāo)將數(shù)據(jù)直接轉(zhuǎn)發(fā)回PC機(jī),PC機(jī)比較發(fā)出數(shù)據(jù)與接收數(shù)據(jù),以判斷誤碼情況。室溫條件下,通訊距離100米,進(jìn)行三組各持續(xù)10小時(shí)的收發(fā)實(shí)驗(yàn),無(wú)丟包現(xiàn)象,誤碼率10-9,符合設(shè)計(jì)要求。要指出的是,由于海況及通訊距離的不同,系統(tǒng)的傳輸誤碼率將有所不同,但在多數(shù)情況下該系統(tǒng)作為指令收發(fā)的通道是完全可靠的。

          5、結(jié)論

          TCP/IP協(xié)議在浮標(biāo)系統(tǒng)中的應(yīng)用極大的增強(qiáng)了浮標(biāo)網(wǎng)絡(luò)的穩(wěn)定性及可擴(kuò)展性。本設(shè)計(jì)采用MSP430微控制器及網(wǎng)絡(luò)協(xié)議棧W3100A很好地實(shí)現(xiàn)了浮標(biāo)系統(tǒng)的低功耗網(wǎng)絡(luò)通訊系統(tǒng),為水聲信道匹配基礎(chǔ)研究提供了理想的網(wǎng)絡(luò)通訊保障。同時(shí)本設(shè)計(jì)也可以嵌入到其它設(shè)備中,如野外測(cè)量?jī)x器、車載系統(tǒng)等,為更多的嵌入式系統(tǒng)提供網(wǎng)絡(luò)化服務(wù),具有非常廣闊的應(yīng)有前景。



          關(guān)鍵詞: TCP/IP

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();