1. 單片機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需要底層為其提供定時中斷、網卡中斷處理的入口。底層需要做相應的處理。
2. 單片機TCP/IP開發板的使用
下面介紹如何使用TCP/IP開發板來進行項目開發。
3. 1 開發板套件
為了建立單片機TCP/IP開發環境,需要一套開發套件,一般包含有:①開發板。②開發板光碟。③USB線。④對連網線。⑤普通網線。⑥串口線。其中TCP/IP協議棧相關資料在②開發板光碟上,③USB線一般用於從PC機USB埠獲得電。網線用於和PC機通信,⑥串口線用於和PC機串口通信。
3. 2 開發板部件
一個開發板本身是一個單片機系統,包含有CPU、RAM、電源模塊、網路模塊。網路模塊有很多選擇,這里以RTL8019AS為例來說明。對於外部介面,最主要的是:⑨網線介面和⑩串口,它們是開發板和PC連接的介面。
3. 3 建立開發環境
建立單片機TCP/IP開發環境的步驟有如下幾步:
1. 連線:連線是將開發板與PC機的串口連接,給開發板上電,然後將開發板連接到和PC在同一個網段中。
2. 安裝軟體:需要安裝開發板的編譯環境。對於51單片機,一般選用KeilC51作為編譯器。設置IP地址,由於必須要求PC機和開發板處於同一個網段,所以需要將PC機的IP地址設置為開發板IP地址的同一個網段的IP地址(有時候也需要設置為特定的IP地址)。
3. 測試連接:一般可以通過PING命令,例如ping 192.168.0.2 –t來測試開發板和PC機的網路是否處於連通狀態。
3. 3 開發基於開發板的新程序
這里介紹如何在不修改開發板硬體的基礎上,開發自己的單片機TCP/IP程序。開發新程序就是在開發板提供的TCP/IP協議棧的基礎上開發應用層的協議。由於TCP層和IP層都已經提供,所以用戶不用考慮其中的運行機制。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. 3 開發基於新硬體的程序
通過「開發基於開發板的新程序」一節的介紹後,開發基於新硬體的程序就相對容易了。這只要根據相應的硬體調整通過單片機的控制埠例如P1進行控制或者數據採集即可。
3. 單片機既然已經採用TCP連接了,可以直接發送數據,為什麼還要使用http post這種方式發送數據
TCP屬於是傳輸層(有關OSI七層協議,可參考網頁鏈接)的協議!而HTTP協議是一種應用層協議!基於TCP的一種協議。HTTP 超文本傳送協議(Hypertext Transfer Protocol )是應用層協議,定義的是傳輸數據的內容的規范。
4. 單片機TCP/IP協議棧都有哪些
TCP/IP協議,或稱為TCP/IP協議棧,或互聯網協議系列。
TCP/IP協議棧
(按TCP/IP參考模型劃分)
應用層 FTP SMTP HTTP ...
傳輸層 TCP UDP
網路層 IP ICMP ARP
鏈路層 乙太網 令牌環 FDDI ...
包含了一系列構成互聯網基礎的網路協議。
這些協議最早發源於美國國防部的DARPA互聯網項目。
TCP/IP字面上代表了兩個協議:TCP傳輸控制協議和IP互聯網協議。
時間回放到1983年1月1日,在這天,互聯網的前身Arpanet中,TCP/IP協議取代了舊的網路核心協議NCP(Network Core Protocol),從而成為今天的互聯網的基石。最早的的TCP/IP由Vinton Cerf和Robert Kahn兩位開發,慢慢地通過競爭戰勝了其它一些網路協議的方案,比如國際標准化組織ISO的OSI模型。TCP/IP的蓬勃發展發生在上世紀的90年代中期。當時一些重要而可靠的工具的出世,例如頁面描述語言HTML和瀏覽器Mosaic,導致了互聯網應用的飛束發展。
隨著互聯網的發展,目前流行的IPv4協議(IP Version 4,IP版本四)已經接近它的功能上限。IPv4最致命的兩個缺陷在於:
地址只有32位,IP地址空間有限;
不支持服務等級(Quality of Service, Qos)的想法,無法管理帶寬和優先順序,故而不能很好的支持現今越來越多的實時的語音和視頻應用。因此IPv6 (IP Version 6, IP版本六) 浮出海面,用以取代IPv4。
TCP/IP成功的另一個因素在與對為數眾多的低層協議的支持。這些低層協議對應與OSI模型 中的第一層(物理層)和第二層(數據鏈路層)。每層的所有協議幾乎都有一半數量的支持TCP/IP,例如: 乙太網(Ethernet),令牌環(Token Ring),光纖數據分布介面(FDDI),端對端協議( PPP),X.25,幀中繼(Frame Relay),ATM,Sonet, SDH等。
TCP/IP協議棧組成
整個通信網路的任務,可以劃分成不同的功能塊,即抽象成所謂的 」 層」 。用於互聯網的協議可以比照TCP/IP參考模型進行分類。TCP/IP協議棧起始於第三層協議IP(互聯網協議) 。所有這些協議都在相應的RFC文檔中討論及標准化。重要的協議在相應的RFC文檔中均標記了狀態: 「必須「 (required) ,「推薦「 (recommended) ,「可選「 (elective) 。其它的協議還可能有「 試驗「(experimental) 或「 歷史「(historic) 的狀態。
必須協議
所有的TCP/IP應用都必須實現IP和ICMP。對於一個路由器(router) 而言,有這兩個協議就可以運作了,雖然從應用的角度來看,這樣一個路由器 意義不大。實際的路由器一般還需要運行許多「推薦「使用的協議,以及一些其它的協議。
在幾乎所有連接到互聯網上的計算機上都存在的IPv4 協議出生在1981年,今天的版本和最早的版本並沒有多少改變。升級版IPv6 的工作始於1995年,目的在與取代IPv4。ICMP 協議主要用於收集有關網路的信息查找錯誤等工作。
推薦協議
每一個應用層(TCP/IP參考模型 的最高層) 一般都會使用到兩個傳輸層協議之一: 面向連接的TCP傳輸控制協議和無連接的包傳輸的UDP用戶數據報文協議 。 其它的一些推薦協議有:
TELNET (Teletype over the Network, 網路電傳) ,通過一個終端(terminal)登陸到網路(運行在TCP協議上)。
FTP (File Transfer Protocol, 文件傳輸協議) ,由名知義(運行在TCP協議上) 。
SMTP (Simple Mail Transfer Protocol,簡單郵件傳輸協議) ,用來發送電子郵件(運行在TCP協議上) 。
DNS (Domain Name Service,域名服務) ,用於完成地址查找,郵件轉發等工作(運行在TCP和UDP協議上) 。
ECHO (Echo Protocol, 回繞協議) ,用於查錯及測量應答時間(運行在TCP和UDP協議上) 。
NTP (Network Time Protocol,網路時間協議) ,用於網路同步(運行在UDP協議上) 。
SNMP (Simple Network Management Protocol, 簡單網路管理協議) ,用於網路信息的收集和網路管理。
BOOTP (Boot Protocol,啟動協議) ,應用於無盤設備(運行在UDP協議上)。
可選協議
最常用的一些有
支撐萬維網WWW的超文本傳輸協議HTTP,
動態配置IP地址的DHCP(Dynamic Host Configuration Protocol,動態主機配置協議),
收郵件用的POP3 (Post Office Protocol, version 3, 郵局協議) ,
用於加密安全登陸用的SSH (Secure Shell,用於替代安全性差的TELNET) ,
用於動態解析乙太網硬體地址的ARP (Address Resolution Protocol,地址解析協議) 。
範例: 不同計算機運行的不同協議
一個簡單的路由器上可能會實現ARP, IP, ICMP, UDP, SNMP, RIP。
WWW用戶端使用ARP, IP, ICMP, UDP, TCP, DNS, HTTP, FTP。
一台用戶電腦上還會運行如TELNET, SMTP, POP3, SNMP, ECHO, DHCP, SSH, NTP。
無盤設備可能會在固件比如ROM中實現了ARP, IP, ICMP, UDP, BOOT, TFTP (均為面向數據報的協議,實現起來相對簡單)。
5. 單片機TCP/IP開發板的用途
目前單片機上網技術是一個熱門技術,很多高校學生選擇與此相關的畢業設計,同時高校也有與此相關的項目。為了快速實現單片機TCP/IP,可以通過使用單片機TCP/IP開發板來實現。一般一個單片機TCP/IP開發板需要包含如下的內容:
1. 單片機TCP/IP協議棧:用戶可以根據協議棧提供的用戶介面來實現TCP的發起連接、接受連接、發送數據、接收數據、關閉連接等操作。最好是該協議棧能夠兼容BSD socket介面。
2. 硬體電路板及其相關連接線:用此硬體可以建立嵌入式TCP/IP實驗環境。
3. 硬體原理圖:這可以方便用戶將相關硬體集成到自己的電路板中。
4. 配套開發工具:在嵌入式TCP/IP實驗環境中必須要有PC機端的軟體,用以和開發板進行通信。
6. 單片機TCP/IP的介紹
單片機TCP/IP就是在單片機上運行的TCP/IP協議棧。由於嵌入式聯網設備越來越多,需要在嵌入式設備上實現TCP/IP協議棧,但是嵌入式設備不同於PC機,它們一般採用MCU也就是單片機而不是CPU作為核心處理器。這就需要在單片機上實現TCP/IP協議棧。對於高端的32位單片機,由於其性能已經接近於低端PC機CPU(例如奔騰II系列),所以和在PC上實現TCP/IP協議棧沒有多大區別;這里主要講述低端8位(例如51單片機)、16位單片機TCP/IP協議棧。
7. 上位機與單片機網口TCP通信連接失敗怎麼辦
不知道你的單片機網口採用的是什麼方案。ping能通說明底層協議棧應該沒有太大問題,TCP連接不通你得跟蹤一下單片機這邊有沒有收到請求,如果沒有是在哪裡跳出的;從上位機端也可以抓一下包看看是不是握手過程沒有完成。
8. 單片機TCP/IP的單片機TCP/IP的特點
在單片機上實現TCP/IP與在PC機上實現TCP/IP是有所不同的,參考《TCP/IP在51單片機上的實現特點和方法》我們可以了解到,它的特點是:
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單片機可能需要幾百條指令。