1. 程式人生 > >網路通訊之UIP在STM32上的移植

網路通訊之UIP在STM32上的移植

1、什麼是UIP協議棧:

UIP是一種適用於小型嵌入式通訊的TCP/IP協議棧,由瑞典電腦科學院的人開發編寫的,它去掉了完整的TCP/IP中不常用的功能,簡化了通訊過程,但其保留了網路通訊中必須使用的協議,把設計重點放在IPTCPARP協議的實現上。簡單易用、佔用資源少是它的設計特點。

2、協議棧介面

UIP協議棧通過一系列介面函式與底層函式和上層應用程式通訊,在兩者之中,UIP介面函式處於中間。其中UIP提供兩個個介面函式給底層系統。分別是

1uip_input()

當網絡卡驅動收到一個輸入包時,將放入全域性緩衝區uip_buf中,包的大小由全域性變數uip_len約束。同時將呼叫 uip_input() 函式,這個函式將會根據包首部的協議處理這個包和需要時呼叫應用程式。當 uip_input() 返回時,一個輸出包同樣放在全域性緩衝區uip_buf裡,大小賦給uip_len。如果uip_len 是0,則說明沒有包要傳送。否則呼叫底層系統的發包函式將包傳送到網路上。

2uip_periodic()

uIP 週期計時是用於驅動所有的uIP 內部時鐘事件。當週期計時激發,每一個TCP 連線都會呼叫uIP 函式uip_periodic() 。類似於 uip_input() 函式。uip_periodic()函式返回時,輸出的IP 包要放到uip_buf中,供底層系統查詢uip_len的大小發送。

UIP提供一個呼叫函式uip——appcall() 上位機應用程式通訊。當uip在接收到底層傳來的資料包後,直接呼叫uip_appcall()就可以把資料傳送到上層應用程式進行處理。

101701.jpg

系統底層其實在一開始時還需要呼叫初始化UIP的函式——uip_init(),

主要是初始化協議棧的偵聽埠和預設所有連線都是關閉的。

3UIP協議棧在STM32上的移植

1DM9000A 初始化和UIP初始化;

tapdev_init(); uip_init();

2)設定IP地址

uip_ipaddr(ipaddr, 192,168,1,10);

3)設定預設的路由器地址

uip_ipaddr(ipaddr, 192,168,1,1);

4)設定網路掩碼

uip_setnetmask(ipaddr);

5)當DM9000A接收到資料後會產生中斷,這時候從DM9000A讀取一個IP包,返回資料長度;

    uip_len = tapdev_read();

6)校驗處理資料包

BUF->type == htons(UIP_ETHTYPE_IP

7)去除乙太網幀頭結構,更新ARP

uip_arp_ipin();

8IP包處理

uip_input();

相關推薦

no