單片機TCP/IP是在單片機上運行的TCP/IP協議棧。 由於嵌入式網絡設備越來越多,需要在嵌入式設備上實現TCP/IP協議棧,但嵌入式設備與PC不同,通常采用MCU (即單片機)而不是CPU作為核心處理器這需要在單片機上實現TCP/IP協議棧。 對於高端32位單片機,由於其性能已接近低端PC的CPU (如奔騰ii係列),與在PC上實現TCP/IP協議棧沒有太大區別; 本文主要描述低端的8位(例如,51位)、16位單片機TCP/IP協議棧。
中文名稱
單片機TCP/IP
外語名稱
danpianjiTCP/IP
特長
程序存儲區域和外部RAM區域沒有什麽特征
速度慢
協議棧
eCos單片機TCP/IP協議棧
協議棧
ZLIP51單片機TCP/IP協議棧
單片機TCP/IP單片機TCP/IP的特點
編輯
語音
在單片機上實現TCP/IP和在PC上實現TCP/IP是不同的。 參照《TCP/IP1單片機上的實現特點和方法》,可以看出其特征如下。
1 .速度慢:本文介紹,12M晶振的51單片機最快網絡傳輸速度為25KB/s。 重要的是,TCP/IP需要每個傳輸字節的校驗和計算和所需的副本。 這樣就不夠51單片機的處理速度了。 提高單片機TCP/IP速度的常用方法是簡化協議棧。
2 .程序存儲空間和外部RAM空間不大:一般單片機最大程序和數據空間為64KB。 TCP/IP協議通常需要緩存發送的數據,但最大的數據包為1500B左右,網絡速度較大時內存消耗較大。 非嵌入式TCP/IP協議棧缺少64KB的程序和數據空間。
3 .單片機架構: 51單片機是8位機,如果需要完成相同的數據操作,32位PC機可能隻需要10條指令,而51單片機
單片機TCP/IP現有單片機TCP/IP協議棧
編輯
語音
TCP協議棧的手續流程很複雜,需要處理對方發來的數據和連接,不知道對方什麽時候做什麽操作,導致協議處理變得複雜。 另一個原因是單片機TCP/IP協議棧的穩定性是一個非常重要的問題,穩定的協議棧在實際應用中需要長時間的測試,因此穩定的單片機TCP/IP協議棧為此,另一個選擇是使用現有的TCP/IP協議棧。
1. eCos單片機TCP/IP協議棧: eCos TCP/IP棧涉及與eCos操作係統/內核一起工作。 eCos (和TCP/IP堆棧)通過大量處理其結構得到支持。 eCos TCP/IP堆棧目前作為單獨的模塊發布測試版。
2. ZLIP 51單片機TCP/IP協議棧: ZLIP是專門為51單片機設計的嵌入式TCP/IP協議棧,可以在有操作係統的情況下運行實現了TCP、UDP、ICMP、ARP協議,ZLWeb實現了HTTP協議。 支持同時運行多TCP連接、多UDP連接,支持在uc/os-II操作係統上通過多任務發送和接收數據。 可用於51單片機TCP/IP互聯網解決方案。
3. uc/ip單片機TCP/IP協議棧3360UC/IP(Mew-kip )是一種旨在對其進行控製的TCP/IP協議棧。 代碼基於BSD,但與所有其他堆棧相似。 但是,非常小的覆蓋功能正在減少。 目前為Linux和DOS目標構建。
4. BSD單片機TCP/IP協議棧: BSD棧曆史上是其他業務棧的起點,有很多專門的TCP/IP棧,如帶Wind-River VxWorks內核的這是因為BSD在BSD許可協議下提供了他們的堆棧。 這些許可證允許您以修改或未修改的形式合並代碼,而無需向作者支付特許權使用費。 與GPL許可證相比,合並GPL源代碼時,後者要求GPL公開源代碼。
5. lwIP單片機TCP/IP協議棧: lwIP (輕量級) TCP/IP棧是TCP/IP協議棧的小型實現。 包括具有IP和ICMP的TCP和UDP傳輸層。 還提供了可選的BSD插座API。 為了性能,還包括qkdcg。 LwIP協議棧是為嵌入式係統設計的,適用於40KB的ROM和數百字節的RAM。 為了可移植性,用c寫的。
6. uIP單片機TCP/IP協議棧: uIP是專門為8位和16單片機設計的非常小的TCP/IP協議棧。 uIP完全用c編寫,可以移植到各種結構和操作係統中。 編譯的堆棧可以在幾千字節rom或幾百字節的RAM上運行。 uIP還包括HTTP服務器作為服務內容。
7. TinyTCP單片機TCP/IP協議棧: TinyTCP棧是TCP/IP非常小的簡單實現,包括FTP客戶。 TinyTCP旨在烤ROM,似乎對大端結構很有用(初始目標是68000芯片)。 TinyTCP還包括用於3Com多總線卡的簡單以太網驅動器。
8. WATTCP單片機TCP/I
P協議棧:WATTCP是為嵌入基於DOS的係統而設計的一個小型TCP/IP棧。它包括一個Real Mode DOS版本和另一個32位擴展環境版本。
單片機TCP/IP如何使用單片機TCP/IP協議棧
編輯
語音
用戶在拿到一個單片機TCP/IP協議棧以後該如何處理呢。其中的處理分為兩個部分:上層接口和下層接口。
4. 1 上層接口
用戶使用單片機TCP/IP的目的實際非常明了,就是要實現數據的傳送,即從PC機(或者另一個單片機)上傳送過來的數據能夠在本地單片機上接收,反之亦然。所以如果屏蔽底層的話,單片機TCP/IP協議棧就是一個傳輸數據的手段。所以最後歸結到了使用send()、recv()函數即可。這就是使用單片機TCP/IP協議棧的核心所在。
但是事實上並沒有這麽簡單,因為對於TCP需要有發起連接、接受連接、發送數據、接收數據、關閉連接等操作以配合數據的傳輸。TCP/IP協議棧一般為用戶提供如下的接口:
1. 初始化協議棧和釋放協議棧的函數接口,類似Init(), Release()之類的函數。
2. 提供類似BSD socket的socket, sendto, recvfro, connect, bind, listen, accept, send, recv, closesocket, shutdown, getpeername, getsockname, htonl, htons, ntohl, ntohs, inet_addr,inet_ntoa,ioctlsocket,setsockopt, getsockopt,select等API函數,用戶調用此類函數進行發起連接、接受連接、發送數據、接收數據、關閉連接等操作。
3. 接受連接、接收數據、被動關閉的處理:由於此類操作是上位機發起的,所以TCP/IP協議棧必須提供一套機製來處理此類事件的發生。一般來說有兩種方法:
a) 主動等待:例如使用BSD的recv()函數等待數據的到來。
b) 回調機製:采用類似MFC的OnReceive()函數的回調機製,也即是說在接收到數據的時候會自動調用OnReceive()函數。
那麽用戶如何使用以上的接口來實現遠程控製、遠程數據采集呢?方法很簡單。
例如如果需要實現一個對LED燈的亮和滅的遠程控製應用。首先PC機使用TCP/IP發送工具例如SocketDlgTest程序發送一個字節的“1”到開發板(根據開發板的IP地址發送)。開發板在OnReceive函數中發現收到的是“1”,那麽就通過P1端口將燈打開;反之如果收到的是“0”則將燈熄滅。
如果是實現一個遠程數據采集的應用,例如定時進行溫度采集。首先PC機使用SocketDlgTest程序等待發來數據。開發板每隔一段時間采集一個數據,然後通過send()函數將數據發送給PC機(根據PC機的IP地址發送),這樣PC就接收到了當前的遠程溫度數據。
4. 1 下層接口
下層接口是一個比較複雜的部分,實際上是TCP/IP協議棧和底層硬件的對接問題。如果用戶將TCP/IP協議棧移植到自己的單片機係統上。由於硬件上存在一定的差異,就需要修改底層代碼。這裏需要包括:
1.網卡驅動:如果TCP/IP協議棧已經提供了網卡驅動,並且驅動和用戶使用的網卡芯片一樣,那麽就相對容易一些。這裏隻需要修改網卡的基地址即可。否則需要自己動手寫驅動程序。如果網卡采用RTL8019AS可以參考老古開發網的單片機與TCP/IP網絡。如果網卡采用CS8900,可以參考《嵌入式 TCP/IP 協議單片機技術在網絡通信中的應用》
2.TCP/IP底層接口。一般單片機TCP/IP需要底層為其提供定時中斷、網卡中斷處理的入口。底層需要做相應的處理。