网络通信之UIP在STM32上的移植

网络通信之UIP在STM32上的移植1 什么是 UIP 协议栈 UIP 是一种适用于小型嵌入式通信的 TCP IP 协议栈 由瑞典计算机科学院的人开发编写的 它去掉了完整的 TCP IP 中不常用的功能 简化了通讯过程 但其保留了网络通信中必须使用的协议 把设计重点

大家好,欢迎来到IT知识分享网。

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()就可以把数据传送到上层应用程序进行处理。

 

 

系统底层其实在一开始时还需要调用初始化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();

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/152287.html

(0)
上一篇 2025-03-09 14:10
下一篇 2025-03-09 14:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信