A. 51單片機接入乙太網的幾種方案
1、MAC+PHY方案
所謂的TCP/IP協議棧是一系列網路協議的統稱,不僅包括我們熟知的TCP協議和IP協議。
還有網路層的ICMP(Internet控制報文)協議、IGMP(Internet組管理)協議、ARP(地址解析)協議,傳輸層的UDP(用戶數據包)協議,應用層的HTTP(超文本傳輸)協議、DNS(域名解析)協議、FTP(文件傳送)協議、SMTP(簡單郵件管理)協議等等。
傳統的乙太網接入方案由MCU+MAC+PHY再加入網路介面實現乙太網的物理連接,通過在主控晶元中植入TCP/IP協議代碼實現通信及上層應用。
應用這種軟體TCP/IP協議棧方式實現的比較成熟方案有ENC28J60,CS8900A,DM9000,當然也有像STM32F107這類(內部自帶MAC)+PHY等方案。
2、硬體協議棧晶元方案
由MCU+硬體協議棧晶元(內含MAC和PHY)直接加網路介面,便可方便的實現單片機聯網,所有的處理TCP/IP協議的工作都是通過這位MCU的「小秘書」——硬體協議棧晶元來完成。
乙太網晶元的內核由傳輸層的TCP、UDP、ICMP、IGMP等協議、網路層的IP、ARP、PPPoE等協議以及鏈路層的MAC構成,再加上物理層的PHY和外圍的寄存器、內存、SPI介面組成了這一整套硬體化的乙太網解決方案。
這套硬體TCP/IP協議棧代替了以往的MCU來處理這些中斷請求,即MCU只需要處理面向用戶的應用層數據即可,傳輸層、網路層、鏈路層及物理層全部由外圍WIZnet的晶元完成。
這套方案從硬體開銷和軟體開發兩個方面來簡化前面所述的五層網路模型,簡化產品開發方案。這樣一來,工程師們就不必再面對繁瑣的通信協議代碼,只需要了解簡單的寄存器功能以及Socket編程便能完成產品開發工作的的網路功能開發部分。
(1)單片機如何創建網路ip擴展閱讀
乙太網協議:
一個標準的乙太網物理傳輸幀由七部分組成。
PR SD DA SA TYPE DATA FCS
同步位 分隔位 目的地址 源地址 類型欄位 數據段 幀校驗序列 7 1 6 6 2 46~1500 4
除了數據段的長度不定外,其他部分的長度固定不變。數據段為46~1500位元組。乙太網規定整個傳輸包的最大長度不能超過1514位元組(14位元組為DA、SA、TYPE),最小不能小於60位元組。
除去DA、SA、TYPE14位元組,還必須傳輸46位元組的數據,當數據段的數據不足46位元組時需填充,填充字元的個數不包括在長度欄位里;超過1500位元組時,需拆成多個幀傳送。
事實上,發送數據時,PR、SD、FCS及填充欄位這幾個數據段由乙太網控制器自動產生;而接收數據時,PR、SD被跳過,控制器一旦檢測到有效的前序欄位(即PR、SD),就認為接收數據開始。
B. 單片機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協議棧。
C. 單片機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進行控制或者數據採集即可。
D. 51單片機實現TCP/IP
51 + 嵌入式乙太網晶元.OK 了
到這里有你想要的:
http://www.bocon.com.cn/index.php?option=com_content&task=view&id=317&Itemid=670&gclid=CP70rIKr2aECFQMXewodwVLpHA
但價格有點貴.
普通51做不了 TCP/IP, 在下面找一款大 RAM(1K以上) 的搞定
http://www.mcu-memory.com/
不用寫 TCP/IP協議棧,只要會配置晶元就行了.主要工作集中到應用的開發.
如果你的時間多,或者資金不多的情況下,就用回你一開始說的方法.這時你只能還得要花一大半時間在移植協議棧方面(當然網上有移植好的,但還要時間消化).協議棧就用uIP 或 LwIP
E. 單片機TCP/IP
為什麼不用ARM,移植操作系統來做,會方便很多,可以實現更多功能。
51的話不是十分了解,我的理解:
1.選用有UART及Ethernet埠的開發版,應該都有附Ethernet Driver Demo code的。
2.TCP/IP的部份要自己去找原始碼,一般開發版不會附這個;所以你至少要看看相關的RFC,然後找個小一點的TCP/IP source code來移植。
3.把TCP/IP stack跟Ethenet的送收介面連接起來。(配置IP會不會不易實現?)
4。在TCP/IP上再實現你要遠端控制的功能。一般來說,UDP會比較簡單,但是你要有重送的機制,就看你是要用TCP還是UDP了。
兄台估計硬體比較牛!
F. 單片機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需要底層為其提供定時中斷、網卡中斷處理的入口。底層需要做相應的處理。
G. 單片機如何製作網路伺服器外網可訪問的
如果你本地可以打開的話,剩下的就簡單了。
外網訪問只需要把路由器設置下,將一個埠映射到你單片機使用的Ip上,之後別人輸入你們的公網Ip就可以直接打開你的網頁。不過外網只能通過公網Ip訪問。
H. 51單片機可以和電腦那樣設ip地址嗎
像你下面說的,要使用ip那麼肯定得使用網口通訊才行啊,你51單片機恐怕是沒有集成乙太網控制器的所以必須添加專門的晶元才行。添加晶元後你設置的IP就是你那個晶元的IP而且那個晶元與51單片機通訊肯定不是使用的網口通訊因為51根本沒有這方面硬體,有可能使用串口啊,並口啊等等其他通訊方式,那個晶元的作用只是將你51單片機的某種通訊方式轉換成網口的通訊方式
I. 如何給單片機賦IP地址
首先需要實現網路協議。單片機內存小,運行慢,能否支持區域網絡都是問題