网络通信之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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值