FuIP

FuIP(Fuhome Micro Interface Process)是fuhome未來之家實驗室社區開發的為單片微型計算機開發的TCP/IP協定棧,它是開源的。目前最新版本為3.0 包括 ARP,IP,TCP/UDP,DHCP,ICMP,HTTP協定。

協定棧,移植說明,版本更新,V1.2版本支持與特性:,V1.3 版本,v2.0 更新提示,v2.1 更新日誌,v2.2 更新日誌,v2.3 更新日誌(20150112),v3.0更新日誌(20170106),V3.1版本更新日誌(20180723),

協定棧

FuIP由fuhome(未來之家實驗室)的龍劍奮鬥開發,第一個中文版本的TCP/IP開源協定棧,專用於單片機進行聯網而編寫。其原始碼由C 語言編寫,項目採用keil 4進行調試編譯並完全公開。
FuIP 協定棧去掉了完整的 TCP/IP 中不常用的功能,簡化了通訊流程,但保留了網路通信必須使用的協定,設計重點放在了 IP/TCP/ICMP/UDP/ARP 這些網路層和傳輸層協定上,保證了其代碼的通用性和結構的穩定性。
由於FuIP 協定棧專門為微型單片計算機而設計,充分考慮了8位 16位 32位單片機平台特性,採用最易移植寫法,因此特別適合任何有單片機基礎的網友輕鬆控制家用電器等。
因此還具有如下優越功能:
1) 代碼非常少,其協定棧核心代碼不到 6K,中文注釋詳細,很方便閱讀和移植,採用STC12系列單片機,適合初學者和老鳥。
2) 占用的記憶體數非常少,RAM 占用僅500B(快取占255B),3.0版本RAM自行調整根據需要。
3) 其硬體處理層、協定棧層和套用層共用一個全局快取區,不存在數據的拷貝,且傳送和接收都是依靠這個快取區,極大的節省空間和時間。
4) 支持多個主動連線和被動連線並發。
5) 其原始碼中提供一套實例程式: web 伺服器, web 客戶端,TCP服務端,客戶端,UDP服務端,UDP客戶端。通用性強,移植起來基本不用修改就可以通過。
6) 對數據的處理採用輪循機制,不需要作業系統的支持。
由於FuIP 對資源的需求少和移植容易,已經有網友移植於 STM32,STM8系列單片機。
提供的接口在fu_send.h/fu_app.h中,為了減少函式調用造成的額外支出,大部分接口函式以宏命令實現的。
fu_send.h
//設定連線狀態,
Set_Re_HOST(1,TCP_CLIENT,192,168,0,123,8080);//TCP客戶端
Set_Re_HOST(2,TCP_SERVER,0,0,0,0,8080);//TCP服務端
Set_Re_HOST(4,UDP_CLIENT,192,168,0,123,8080);//UDP客戶端
Set_Re_HOST(5,UDP_SERVER,0,0,0,0,8080);//UDP服務端
1、if(ReHost[n].Stat==CONNECTED)//這一個用來判斷當前連線與否,TCP服務和客戶端均可,UDP沒有連線一說,所以只能判斷首次被連線否。
2、下線:CloseTCP(n);//主動斷開TCP連線,用於對方沒有正常斷開就斷電,掉線的情況,自己可以根據情況下線。
3、傳送數據: Send_Data(n,len);//n連線的標號1-5,len有效數據長度
fu_app.h
功能:處理數據包 :包括TCP UDP
fu_app.c檔案內 App_Bag(U8 p[],U16 len),p[]是快取區指針,len長度

移植說明

1、例程使用的是STC12C5A60S2+ENC28J60乙太網晶片,
需要修改的部分在於檔案 mcuinit.c,mcuinit.h,
2、涉及晶振頻率,LED接口定義,串口波特率,定時器
網卡驅動部分根據對應網卡寫,留下,初始化,讀/寫接口函式即可。
3、fu_config.h fu_config.c 涉及本機MAC IP,路由器網關IP需要根據實際進行修改。
/* 相關參數設定 */
U8 code FU_LoaclIP[4]={192,168,1,150};//本地IP位址
U8 code FU_MAC[6]={0x00,0x12,0X34,0X56,0X78,0X90};//MAC
U8 code FU_SubnetMask[4]={255,255,255,0};//子網掩碼
U8 code FU_GateWay[4]={192,168,1,1}; //默認網關
如下緩衝區需要根據實際進行縮放,自己修改即可。
U8 xdata DATA[FU_LEN]={0};//收發數據緩衝區

版本更新

V1.2版本支持與特性:

1,支持ARP請求、應答(獲取目的IP的MAC)
2,支持ICMP_Ping請求,應答(ping命令)
3,支持TCP主動連線,斷開,被動連線,斷開,數據傳送
4,支持UDP傳送,接收數據

V1.3 版本

1、改寫了命令識別寫法,使用更加簡單,效率提高了。(網友yht7891984提出 )

v2.0 更新提示

1、由於單片機RAM完全夠用,為了用來方便接入網際網路,接收緩衝不再與傳送緩衝公用
2、修復TCP連線過程的一些問題,更加兼容不同主機的數據格式。
3、增加了訪問外網主機的功能,完善了TCP連線協定,這一點是重大改變。
4、命令識別,傳送採用特殊函式,提升了執行效率。
(本demo直接下載到單片機,默認訪問百度首頁,可以從串口看到數據。

v2.1 更新日誌

1、修復了ARP回應bug(網友林海雪原提出)
2、對於TCP/UDP數據不再限制於偶數長度了,奇數偶數均可。

v2.2 更新日誌

1、修復了TCP傳送檢驗bug,數據傳輸bug
2、結合實用,及網友建議,特此做了調整。TCP僅支持被動連線,若需要單片機主動連線(見2.1版本可以訪問百度網頁)
3、增加了web服務功能,可以實現用網頁傳送訊息給單片機
4、UDP仍然支持主動,被動模式。
5、合併傳送接收緩衝區,統一DATA[ ]數組。默認長度為255位元組。

v2.3 更新日誌(20150112)

1、增加DHCP協定,可以自動獲取IP,以補充固定IP的不足之處(如不需要請用 v2.2版本其採用固定IP,視個人情況而定)。
2、改善數據報長度只能在255以內的限制,可以擴大到TCP/IP規定的最大數據報。

v3.0更新日誌(20170106)

1、整合2.2與2.3,用參數來設定是固定IP還是動態獲取IP
2、修改一個BUG,當UDP包大於FU_LEN時,截斷為多個UDP包處理數據
3、重建工程,不用手工添加STC資料庫也可以進行編譯
4、修改兩個enc28j60模組互相通訊時,arp不成功的一個BUG
5、修改子網掩碼算法,在ARP時不會出錯
6、增加多路通訊,多個TCP(服務端,客戶端),多個UDP(服務端,客戶端)同時通信,之前是只支持1路通訊,切多路連線可以工作在不同狀態角色。

V3.1版本更新日誌(20180723)

1.解決多個enc28j60相互通訊時,arp應響包出錯問題。
2.解決多個enc28j60模組在同一域網時,DHCP相互衝突的問題。
3.修改DHCP處的一個BUG,以兼容更多路由器。
4.增加DNS功能,fuip 3.0與之前只能使用IP位址訪問外網。
5.解決多路TCP通訊時,TCP_Mark互相衝突的問題。
6.解決對方主動斷開TCP連線,回響慢的問題。
7.增加DHCP指定時間自動重新獲取IP位址的功能。(重新申請IP的時間由宏指定單位為秒 #define DHCP_TIME 1800)

相關詞條

熱門詞條

聯絡我們