單片機(jī)TCP IP協(xié)議棧實現(xiàn)的原理
對已TCP IP協(xié)議棧,我們已經(jīng)說了很多關(guān)于它的原理相關(guān)的知識了。但是只有原理是不夠的,在這方面我們將要舉出一個實際操作實例為大家講解,那么首先我們來看一下有關(guān)于單片機(jī)TCP/IP就是在單片機(jī)上運行的TCP IP協(xié)議棧。由于嵌入式聯(lián)網(wǎng)設(shè)備越來越多,需要在嵌入式設(shè)備上實現(xiàn)TCP IP協(xié)議棧,但是嵌入式設(shè)備不同于PC機(jī),它們一般采用MCU也就是單片機(jī)而不是CPU作為核心處理器。這就需要在單片機(jī)上實現(xiàn)TCP IP協(xié)議棧。對于高端的32位單片機(jī),由于其性能已經(jīng)接近于低端PC機(jī)CPU(例如奔騰II系列),所以和在PC上實現(xiàn)TCP IP協(xié)議棧沒有多大區(qū)別;這里主要講述低端8位(例如51單片機(jī))、16位單片機(jī)TCP IP協(xié)議棧。
單片機(jī)TCP/IP的特點
在單片機(jī)上實現(xiàn)TCP/IP與在PC機(jī)上實現(xiàn)TCP/IP是有所不同的,它的特點是:
1. 速度慢:12M晶振的51單片機(jī)的最快網(wǎng)絡(luò)傳送速度為25KB/s。其中的關(guān)鍵在于TCP/IP需要對傳送的每個字節(jié)進(jìn)行校驗和計算,以及必要的拷貝。這樣51單片機(jī)的處理速度就不夠了。為了提高單片機(jī)TCP/IP的速度一般的方法是要對協(xié)議棧進(jìn)行精簡。
2. 程序存儲空間和外部RAM空間不大:一般的單片機(jī)的最大程序和數(shù)據(jù)空間為64KB。TCP IP協(xié)議一般需要對發(fā)送的數(shù)據(jù)進(jìn)行緩存,而一個最大的數(shù)據(jù)包就有1500B左右,當(dāng)網(wǎng)絡(luò)速度很大的時候內(nèi)存消耗將很大。對于非嵌入式TCP IP協(xié)議棧,64KB的程序和數(shù)據(jù)空間是不夠的。
3. 單片機(jī)體系結(jié)構(gòu):51單片機(jī)是8位機(jī),所以對于需要完成同一個數(shù)據(jù)操作,32位的PC機(jī)可能只需要10條指令,而51單片機(jī)可能需要幾百條指令。#p#
已有的單片機(jī)TCP IP協(xié)議棧
由于TCP協(xié)議棧的程序流程較為復(fù)雜,因為程序中需要處理對方法送過來的數(shù)據(jù)、發(fā)起的連接,而我方并不知道對方會何時進(jìn)行什么樣的操作,這就使得協(xié)議處理起來較為復(fù)雜。另外一個原因是單片機(jī)TCP IP協(xié)議棧的穩(wěn)定性是以非常重要的問題,一個穩(wěn)定的協(xié)議棧需要在實際應(yīng)用中經(jīng)過長時間的測試,所以編寫一個穩(wěn)定的單片機(jī)TCP IP協(xié)議棧更加困難。為此另外一種選擇就是使用現(xiàn)有的TCP IP協(xié)議棧。
1. eCos單片機(jī)TCP IP協(xié)議棧(http://ecos.sourceware.org/getstart.html):
eCos TCP/IP棧是涉及與eCos操作系統(tǒng)/內(nèi)核一起運行的。eCos(和TCP/IP棧)由大量處理其結(jié)構(gòu)支持。eCos TCP/IP棧當(dāng)前發(fā)布了一個測試版,作為一個單獨的模塊。
2. ZLIP 51單片機(jī)TCP IP協(xié)議棧(http://www.zlmcu.com/ZLIP/zlip_introduction.htm):
ZLIP是專門為51單片機(jī)設(shè)計的嵌入式TCP IP協(xié)議棧,可以在有操作系統(tǒng)和沒有操作系統(tǒng)情況下運行,具有代碼量適中、運行速度快、用戶接口簡單、兼容BSD socket接口的特點。實現(xiàn)了TCP、UDP、ICMP、ARP協(xié)議,ZLWeb實現(xiàn)了HTTP協(xié)議。支持多TCP連接、多UDP連接同時運行,支持在uc/os-II操作系統(tǒng)下多任務(wù)運行數(shù)據(jù)收發(fā)。可以用于51單片機(jī)TCP/IP上網(wǎng)解決方案。
3. uc/ip 單片機(jī)TCP IP協(xié)議棧(http://ucip.sourceforge.net/):
uC/IP(mew-kip)是為為控制其設(shè)計的一個TCP IP協(xié)議棧。代碼基于BSD(很像所有其它棧)但對非常小的覆蓋范圍功能有所減少。它當(dāng)前為Linux和DOS目標(biāo)而建。
4. BSD 單片機(jī)TCP IP協(xié)議棧(http://www.freebsd.org/internet.html):
BSD棧歷史上是其他商業(yè)棧的開始點,大多數(shù)專業(yè)TCP/IP棧(如帶Wind-River VxWorks內(nèi)核的)是BSD棧派生的。這是因為BSD在BSD許可協(xié)議下提供了他們的棧,它們的許用證使你能以修改或未修改的形式結(jié)合它們的代碼而無須向創(chuàng)建者付版稅。與GPL許用證相比,如果你結(jié)合GPL源代碼,后者要求你的GPL中公開你的源代碼。
5. lwIP 單片機(jī)TCP IP協(xié)議棧(http://www.sics.se/~adam/lwip/):
lwIP(輕型)TCP/IP棧是TCP IP協(xié)議棧的一個小型實現(xiàn)。它包括帶IP和ICMP的TCP和UDP傳輸層。還提供一個可選的BSD套結(jié)籽API。為了性能,還包括一個零拷貝API。LwIP協(xié)議棧是為嵌入式系統(tǒng)設(shè)計的并能適合40KB的ROM和幾百字節(jié)的RAM。為了可移植性它用C編寫。
6. uIP 單片機(jī)TCP IP協(xié)議棧(http://www.sics.se/~adam/uip/index.php/Main_Page):
uIP是專門為8位和16單片機(jī)設(shè)計的一個非常小的TCP IP協(xié)議棧。uIP完全用C編寫,以此可以移植到各種不同的結(jié)構(gòu)和操作系統(tǒng)上。一個編譯的??梢杂袔譑B ROM或幾百字節(jié)RAM中運行。uIP還包括一個HTTP服務(wù)器作為服務(wù)內(nèi)容。
7. TinyTCP 單片機(jī)TCP IP協(xié)議棧(http://www.unusualresearch.com/tinytcp/tinytcp.htm):
TinyTCP棧是TCP/IP的一個非常小的簡單的實現(xiàn),它包括一個FTP客戶。TinyTCP是為燒入ROM設(shè)計的并且現(xiàn)在開始對大端結(jié)構(gòu)似乎是有用的(初始目標(biāo)是68000芯片)。TinyTCP也包括一個簡單的以太網(wǎng)驅(qū)動器用于3Com多總線卡。
8. WATTCP 單片機(jī)TCP IP協(xié)議棧(http://www.erickengelke.com/wattcp/):
WATTCP是為嵌入基于DOS的系統(tǒng)而設(shè)計的一個小型TCP/IP棧。它包括一個Real Mode DOS版本和另一個32位擴(kuò)展環(huán)境版本。