新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > TCP/IP協議在VRS51單片機上的實現

        TCP/IP協議在VRS51單片機上的實現

        作者: 時間:2013-09-10 來源:網絡 收藏


          ICMP(Internet控制報文協議)用來傳遞差錯報文以及其他需要注意的信息。uIP只實現了echo。

          ARP(Address Resolution Protocol)為IP地址到對應的硬件地址之間提供動態映射。ARP協議是把目標IP地址解析為以太網MAC地址,當一個IP包要在以太網上發送時,先查詢ARP表,找出要發送的MAC地址。如果在表里找不到對應的IP地址,就會廣播ARP請求包,以獲取給出IP地址所對應的MAC地址。目的主機收到請求包后發出一個ARP回應包,給出自己的MAC地址和IP地址。ARP表每十秒更新一次。ARP協議是uIP的可選模塊。

          UDP(User Datagram Protocol)協議是一個簡單的、面向數據報的傳輸層協議。UDP協議是uIP可選模塊。

          uIP是一個專為8位和16位設計的小型簡易的TCP/IP協議棧,簡單易用、占用資源少是其設計特點。為了占用較少的資源,uIP只保留了基本的通信功能而把全功能協議棧中那些不常用的功能去掉,其重點是在IP、TCP和ICMP的實現上,而把ARP和UDP作為可選模塊。

          uIP處于網絡通信的中間,其上層協議是應用程序層,其下層硬件或固件稱為網絡設備驅動層。uIP并不僅僅是為以太網設計的,它與媒體無關。

        uIP的設備驅動程序接口

          uIP中需要底層驅動支持的函數有:uip_input( )和uip_periodic( )。uip_input( )函數是用來處理網絡層和設備驅動層之間的傳送數據的,當設備驅動程序從網絡層收到一個數據包時會調用此函數,設備驅動程序會事先把數據包存放在uip_buf[ ]緩沖區里,而把數據長度放到uip_len,然后交給uip_input( )函數處理。當函數返回時,如果uip_len不為0,則表明帶有數據。如果需要ARP支持時,則要考慮更新ARP 表或者發送ARP請求和回應。

          uip_periodic( )用于內部時鐘事件計時,當周期定時激發時,每一個 TCP連接應該調用uip_periodic( )函數。這個函數用于uIP內核對各連接的定時輪循,因此需要一個硬件支持的定時程序周期性地用它輪循各連接,一般用于檢查主機是否有數據要發送,如果需要則構造IP包。

         從本質上來說,uip_input( )和uip_periodic( )在內部是一個函數,即uip_process ( )。UIP的設計者將uip_process(UIP_DATA)定義成uip_input( ),而將uip_process(UIP_TIMER)定義成uip_periodic( ),因此從代碼實現上來說是完全復用的。

        uIP應用程序接口

          uIP在接受到底層傳來的數據包后,如需送上層應用程序處理,就會調UIP_APPCALL( ),同時uIP設置UIP_CONN結構體指針指向當前連接。UIP_CONN記錄一條TCP連接的所有相關信息。為了將用戶的應用程序掛接到uIP中,必須將宏UIP_APPCALL( )定義成實際的應用程序函數名,這樣每當某個uIP事件發生時,內核就會調用該應用程序進行處理。如果要加入應用程序狀態的話,必須將宏UIP_APPSTATE_SIZE定義成應用程序狀態結構體的長度。


        uIP在L3074上的應用和簡單Socket通信

          本硬件平臺是網絡POS機的一部分,它的工作原理是:由掃描槍采集的數據經串口送入網卡內,然后經網絡發送到遠端主機。

          本系統的軟件部分包括網絡設備驅動程序、TCP/IP協議棧實現以及簡單的Socket通信程序。

          CS8900主要包括三個部分:EtherDevInit()函數完成CS8900A網絡芯片的初始化,包括初始化寄存器等,使之進入服務狀態;EtherDevSend()實現把以太網數據包發送到網絡中;EtherDevRecv()完成數據的接受。在CS8900的頭文件中設置了MAC地址以及其他的一些參數。

          網絡設備驅動程序通過兩個全局變量與uIP協議棧進行接口:uip_buf為收發緩沖區,uip_len為數據的長度。EtherDevSend( )函數把uip_buf里的數據發送到網絡中,EtherDevRecv( )函數把接受到的數據存儲到uip_buf緩沖區中,同時修改uip_len的值。

         uIP協議棧承擔網絡通信功能,一方面與底層鏈路層通信實現數據收發,另一方面為上層應用程序提供了簡單的API接口。uIP基本實現了IP、TCP、ARP、UDP以及ICMP(ping)等協議,它包括uip.c、uip_arch.c、uip_arp.c、uip.h、uipopt.h、uip_arch.h、uip_arp.h等文件。uip.c完成主要TCP/IP功能,主要是IP和TCP協議,UDP是可選模塊;uip_arp.c完成地址解析;uip_arch.c完成校驗;uipopt.h是uIP配置文件,它以宏的形式定義便于修改,用戶可根據自己的需要設置本地的物理地址、IP地址、網關地址、收發緩沖區大小、支持的最大連接數以及ARP表大小等選項。
        L3074有3個16-bit的定時器,可以選擇一個為TCP/IP協議中與事件有關的事件定時。uIP中需要定時的事件有:為uip_periodic( )函數的執行提供基準和ARP表更新。uip_periodic( )函數每0.5秒執行一次,ARP表每10秒更新一次。

          添加了必需的模塊,進行了正確的配置后,需要編寫主程序和應用程序初始化包括定時器初始化、串口初始化、網卡芯片初始化、uIP協議棧初始化、用戶應用程序初始化等,主程序初始化完成后,進入不停查詢的狀態,如果有數據到來,則交給uip_input( )進行處理,如果沒有則由uip_periodic( )來處理定時事件。為了將應用程序掛接到uIP中,必須把UIP_APPCALL( )定義為實際的應用 程序函數名,這樣每當某個uIP事件發生時,內核就會調用該應用程序進行處理。本應用程序定義 #define UIP_APPCALL socket_appcall。


        結束語

          本方案成功地把嵌入式TCP/IP協議棧uIP移植到上,實現了網絡通信。該方案是網絡POS機的一部分,目前已經正在運行,且狀態良好。本方案采用的和網絡芯片不但性能良好而且價格低廉,uIP是一個性能優良的免費小型TCP/IP協議棧,因此本系統運行速度快、穩定可靠且價位較低。本方案可廣泛應用于遠程數據采集、傳輸,遠程監控,遠程抄表以及 信息家電等領域。

        51單片機相關文章:51單片機教程


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


        pos機相關文章:pos機原理



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 灵武市| 阆中市| 青阳县| 清丰县| 贵德县| 衡阳县| 德化县| 田阳县| 长岭县| 旺苍县| 牡丹江市| 万荣县| 合江县| 内丘县| 华亭县| 宣武区| 抚松县| 武平县| 宁化县| 东山县| 沛县| 化隆| 万州区| 思南县| 连江县| 辽阳市| 兰坪| 石嘴山市| 昆明市| 龙口市| 明星| 江门市| 石河子市| 蓬莱市| 白河县| 拜泉县| 安远县| 措美县| 马边| 闻喜县| 鸡西市|