<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > TCP/IP協(xié)議在VRS51單片機上的實(shí)現

TCP/IP協(xié)議在VRS51單片機上的實(shí)現

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


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

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

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

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

  uIP處于網(wǎng)絡(luò )通信的中間,其上層協(xié)議是應用程序層,其下層硬件或固件稱(chēng)為網(wǎng)絡(luò )設備驅動(dòng)層。uIP并不僅僅是為以太網(wǎng)設計的,它與媒體無(wú)關(guān)。

uIP的設備驅動(dòng)程序接口

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

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

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

uIP應用程序接口

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


uIP在L3074上的應用和簡(jiǎn)單Socket通信

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

  本系統的軟件部分包括網(wǎng)絡(luò )設備驅動(dòng)程序、TCP/IP協(xié)議棧實(shí)現以及簡(jiǎn)單的Socket通信程序。

  CS8900主要包括三個(gè)部分:EtherDevInit()函數完成CS8900A網(wǎng)絡(luò )芯片的初始化,包括初始化寄存器等,使之進(jìn)入服務(wù)狀態(tài);EtherDevSend()實(shí)現把以太網(wǎng)數據包發(fā)送到網(wǎng)絡(luò )中;EtherDevRecv()完成數據的接受。在CS8900的頭文件中設置了MAC地址以及其他的一些參數。

  網(wǎng)絡(luò )設備驅動(dòng)程序通過(guò)兩個(gè)全局變量與uIP協(xié)議棧進(jìn)行接口:uip_buf為收發(fā)緩沖區,uip_len為數據的長(cháng)度。EtherDevSend( )函數把uip_buf里的數據發(fā)送到網(wǎng)絡(luò )中,EtherDevRecv( )函數把接受到的數據存儲到uip_buf緩沖區中,同時(shí)修改uip_len的值。

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

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


結束語(yǔ)

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

51單片機相關(guān)文章:51單片機教程


tcp/ip相關(guān)文章:tcp/ip是什么


pos機相關(guān)文章:pos機原理



上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: TCPIP協(xié)議 VRS51 單片機

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>