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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于TCP/IP協(xié)議的嵌入式網(wǎng)絡打印服務器的實現(xiàn)

          基于TCP/IP協(xié)議的嵌入式網(wǎng)絡打印服務器的實現(xiàn)

          作者: 時間:2006-07-06 來源:21ic.com 收藏

          摘  要:運用Internet技術,設計了一個基于TCP/IP協(xié)議的網(wǎng)絡打印服務器,給出了系統(tǒng)中TCP/IP協(xié)議的剪裁方案,分析了系統(tǒng)軟硬件的設計思路,最后通過測試程序驗證了其可行性。

          本文引用地址:http://www.ex-cimer.com/article/14377.htm

          關鍵詞: 以太網(wǎng) TCP/IP協(xié)議 網(wǎng)絡打印

          隨著信息技術的發(fā)展和網(wǎng)絡時代的到來,基于TCP/IP協(xié)議的嵌入式Internet技術越來越受到人們的關注。目前,大多數(shù)嵌入式設備仍處于孤立應用階段[1],為了實現(xiàn)多個MCU之間的信息共享和交流,通常利用CAN、RS232和RS485等總線組網(wǎng)。但是這些網(wǎng)絡的有效半徑較短,并且孤立于Internet網(wǎng)絡以外,如果能把嵌入式設備直接接入Internet,就可以用方便、低廉的方式實現(xiàn)信息的共享。因此,研究和應用嵌入式Internet技術具有非常重要的意義。

          傳統(tǒng)的網(wǎng)絡打印有兩種方法:一種是采用“網(wǎng)絡共享方式”,另一種是使用專用網(wǎng)絡打印機。專用網(wǎng)絡打印機成本很高,普通用戶難以承受。若采用“網(wǎng)絡共享方式”打印,網(wǎng)內(nèi)必須有一臺計算機來充當打印服務器,若這臺計算機出現(xiàn)故障或關機,網(wǎng)內(nèi)的其它計算機就無法打印,使用起來很不方便。嵌入式網(wǎng)絡打印服務器解決了這個問題,使普通打印機不再是依附于主機的一外設,而成為網(wǎng)絡中一個孤立的設備,使用起來更加靈活方便。本文在研究嵌入式Internet技術的基礎上,設計了基于TCP/IP協(xié)議的嵌入式網(wǎng)絡打印服務器,普通打印機通過此嵌入式打印服務器可直接接在Hub上,升級為一臺“網(wǎng)絡打印機”??蛻舳丝稍诰钟蚓W(wǎng)內(nèi)部實現(xiàn)網(wǎng)絡打印,遠端客戶可通過網(wǎng)關實現(xiàn)遠程打印。其具體結(jié)構(gòu)如圖1所示。

          1 系統(tǒng)總體結(jié)構(gòu)

          1.1 硬件電路

          嵌入式打印服務器的硬件電路如圖2所示。該電路主要包括以下四部分:①微處理器;②以太網(wǎng)控制器;③打印機接口電路;④串口通訊電路。

          嵌入式打印服務器需要處理復雜的TCP/IP協(xié)議和以太網(wǎng)驅(qū)動程序,程序代碼較長,但系統(tǒng)要求快速地處理以太網(wǎng)幀,順利完成數(shù)據(jù)收發(fā)任務?;谝陨峡紤],微處理器采用臺灣Winbond公司的W77E58,此芯片內(nèi)核與51系列兼容,內(nèi)含32K FLASH ROM,指令的執(zhí)行速度很快,是普通51系列的3~4倍,時鐘頻率最高可設置為40MHz。此芯片內(nèi)含三個16位的定時/計數(shù)器,兩個全雙工串行口,一個軟件可編程的看門狗定時器。采用軟件看門狗技術,可用來提高本系統(tǒng)的抗干擾能力,防止程序跑飛。

          網(wǎng)卡接口芯片采用性價比較高的全雙工的RTL8019AS。此芯片為10M ISA以太網(wǎng)控制器芯片,為100個引腳PQFP封裝,內(nèi)部集成有16MB SRAM,與NE2000兼容,16位數(shù)據(jù)總線,可配置為8位DMA方式進行數(shù)據(jù)傳輸,與8位接口方便[2]。

          圖2 嵌入式網(wǎng)絡打印服務器總體設計框圖

          另外,系統(tǒng)還擴展一片62256 RAM和一片24C02 E2PROM。RAM的作用有兩個:一是用來緩存從網(wǎng)卡芯片接收下來的數(shù)據(jù)幀,二是用作打印數(shù)據(jù)的緩沖和串口通訊數(shù)據(jù)的緩沖,以提高數(shù)據(jù)的吞吐率。24C02為串行E2PROM,其容量為2KB,可通過I2C總線與通信,其接口非常簡單,只需要通過SCL和SDA兩條線與單片機相連即可。其作用是用來存儲上位機通過RS232串口下載下來的一些重要參數(shù),如主機的IP地址、子網(wǎng)俺碼、網(wǎng)關IP地址等。這里采用MAX232作為RS232的電平轉(zhuǎn)換芯片,完成TTL電平到RS232電平的轉(zhuǎn)換,實現(xiàn)上位PC機與單片機之間的通訊。

          1.2 軟件設計

          軟硬件開發(fā)工具分別選用Keil C51編譯器和偉福6000仿真器。程序主要包括以下四部分:①以太網(wǎng)驅(qū)動程序;②TCP/IP協(xié)議解析程序;③打印機接口程序;④串口通訊中斷服務程序。圖3為主程序流程圖。

          1.2.1 以太網(wǎng)驅(qū)動程序

          首先對RTL8019AS進行復位操作。復位操作有兩種方法:冷復位和熱復位。

          (1) 冷復位

          將W77E58的T0引腳接RTL8019AS的復位端RSTDRV進行復位操作,高電平有效。復位過程將執(zhí)行一些基本操作,至少需要1μs的時間,推薦等待更久的時間如100ms之后才對它操作,以確保芯片完全復位。
          (2) 熱復位

          直接將RST8019AS的復位端RSTDRV與單片機的RESET引腳相連,單片機復位的時候,RST8019AS也復位。RST8019AS中地址為18H~1FH的寄存器端口均為復位端口。對以上端口俺數(shù)地址讀或得寫入任何數(shù),都會使網(wǎng)卡芯片復位。

          復位以后對RST8019AS芯片中某些寄存器進行配置,確定其工作方式。配置好后,就可以開始接收或發(fā)送數(shù)據(jù)了。

          接收數(shù)據(jù)包時,采用查詢方式將查詢程序放在一個大循環(huán)中,反復查詢是否有新數(shù)據(jù)包到達,若有則接收下來。編程時應該特別注意的是:RST8019AS接收到的數(shù)據(jù)包的幀格式與以太網(wǎng)幀格式并不一致[3],RST8019AS自動填加了接收狀態(tài)、下一頁指針、以太網(wǎng)幀長度三個字段(四個字節(jié)),其結(jié)構(gòu)如表1所示。所以編程時需要按照此格式才能正確地接收數(shù)據(jù)。

          表1 RTL8019AS接收到的數(shù)據(jù)包的幀格式

          接收狀態(tài)下一頁指針以太網(wǎng)幀
          長度
          目的MAC
          地址
          源MAC
          地址
          類型數(shù)據(jù)域填充校驗
          8bit8bit16bit48bit48bit16bit<=1500byteData<46byte 補032bit


          1.2.2 TCP/IP協(xié)議解析程序

          TCP/IP協(xié)議族實際上是許多相關協(xié)議的組合,分為不同的層次,每一層分別具有不同的通信功能。TCP/IP協(xié)議通常被認為是一個四層的協(xié)議系統(tǒng),包括鏈路層、網(wǎng)絡層、傳輸層和應用層[4]。在設計中,根據(jù)網(wǎng)絡打印服務器的具體要求,對TCP協(xié)議進行了適當?shù)牟眉?,僅實現(xiàn)了圖4所示的四個協(xié)議:ARP、IP、ICMP、TCP。

          (1) 鏈路層協(xié)議

          以太網(wǎng)上數(shù)據(jù)包的傳輸是采用網(wǎng)絡的MAC地址來進行識別的,這就要求系統(tǒng)能夠?qū)崿F(xiàn)IP地址到MAC地址的轉(zhuǎn)換,即ARP(地址解析)協(xié)議。

          (2) 網(wǎng)絡層協(xié)議

          網(wǎng)絡層主要負責按網(wǎng)絡標準形式封裝數(shù)據(jù)包,然后進行IP路由選擇。網(wǎng)絡層協(xié)議包括IP(網(wǎng)際協(xié)議)、ICMP(控制報文協(xié)議)和IGMP(組管理協(xié)議)。IP協(xié)議使網(wǎng)絡之間的通信成為可能,如果嵌入式Internet需要跨越不同的網(wǎng)絡進行通信,就必須實現(xiàn)IP協(xié)議,所以IP協(xié)議需要完整實現(xiàn)。IP包最大為65K,可以分段傳輸,但在中根本無法容納如此大的數(shù)據(jù)包,因此不支持分段傳輸。單片機一般采用發(fā)送小數(shù)據(jù)包的方式,以避免分段傳輸。

          ICMP協(xié)議主要用于傳遞差錯報文以及其它需要注意的信息。ICMP中規(guī)定了多種協(xié)議類型和代碼,如果完全實現(xiàn)要浪費不少的系統(tǒng)資源,對于普通的嵌入式Internet應用而言,能夠測試網(wǎng)絡的連接情況即可,因此只需實現(xiàn)ICMP中類型號為0、代碼為0的Ping應答協(xié)議即可。

          (3) 傳輸層協(xié)議

          傳輸層主要為兩臺主機上的應用程序提供端到端的通信。傳輸層有兩種不同的傳輸協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)包協(xié)議)。TCP是一種面向連接的協(xié)議,它能提供高可靠性服務。通過使用序列號和確認信息,TCP協(xié)議能夠向發(fā)送方提供到達接收方的數(shù)據(jù)包的傳送信息。UDP協(xié)議沒有保證可靠性的機制,其數(shù)據(jù)傳輸率高,可以實現(xiàn)全速發(fā)送數(shù)據(jù)包,但是容易丟包、失序。這里因為是打印服務,對數(shù)據(jù)的可靠性要求很高。所以必須采用TCP協(xié)議。

          1.2.3 打印機接口程序

          打印機接口有SPP、EPP和ECP三種標準[5],其中EPP和ECP的數(shù)據(jù)傳輸速度較快。SPP為標準的并行接口標準,目前任何打印機都支持此接口標準,考慮到兼容性的問題,這里采用了SPP接口標準。此接口程序比較簡單,編程時可以采用查詢方式不斷檢測打印機的工作狀態(tài)(BUSY信號),若不忙則輸出數(shù)據(jù),發(fā)出數(shù)據(jù)選通脈沖(STROBE),通知打印機取數(shù)據(jù)打印。

          1.2.4 串口通訊程序

          串口通訊程序是主要用來完成程序的調(diào)試以及嵌入式打印服務器的IP地址、網(wǎng)關和子網(wǎng)俺碼等參數(shù)的修改。圖5為參數(shù)設置界面。

          2 測試結(jié)果

          在此使用VB6.0編寫相應的測試程序。實驗證明,此測試程序可以動態(tài)地修改嵌入式打印服務器的IP地址等參數(shù),能夠順利PING通,往返時間小于10ms,可以完成數(shù)據(jù)的打印任務。

          為了程序調(diào)試方便,還編寫了串口通訊程序,測試結(jié)果和數(shù)據(jù)可通過串口顯示出來,也可以將輸出數(shù)據(jù)保存到硬盤中仔細分析研究。圖6為使用串口通訊程序截獲的打印輸出數(shù)據(jù)。

          為了進一步研究,使用Etherdetect Packet Sinffer軟件截獲了打印過程中通過網(wǎng)絡傳輸?shù)腡CP數(shù)據(jù),如圖7所示。其中的52 54 4c 30 2e 2f為嵌入式打印服務器的MAC地址,192.137.8.178為其IP地址。

          本文介紹了嵌入式網(wǎng)絡打印服務器的設計與實現(xiàn),分析了其硬件結(jié)構(gòu)和軟件設計方法。網(wǎng)絡打印服務器只是嵌入式以太網(wǎng)技術的一個具體應用,實際上嵌入式以太網(wǎng)技術還可以在遠程控制、數(shù)據(jù)采集、視頻監(jiān)控等諸多領域大顯身手,其應用前景相當廣泛。當然,以太網(wǎng)技術也存在一些缺陷,例如其數(shù)據(jù)包的傳輸時延不定、受網(wǎng)絡性能的影響較大等,現(xiàn)階段還很應用到實時控制領域,這些問題需要在以后的研究中重要解決。

          tcp/ip相關文章:tcp/ip是什么




          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();