您的位置:首页 > 理论基础 > 计算机网络

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

2016-10-22 13:29 204 查看
1、什么是UIP协议栈:
UIP是一种适用于小型嵌入式通信的TCP/IP协议栈,由瑞典计算机科学院的人开发编写的,它去掉了完整的TCP/IP中不常用的功能,简化了通讯过程,但其保留了网络通信中必须使用的协议,把设计重点放在IP、TCP和ARP协议的实现上。简单易用、占用资源少是它的设计特点。 

 
2、协议栈接口
UIP协议栈通过一系列接口函数与底层函数和上层应用程序通信,在两者之中,UIP接口函数处于中间。
其中UIP提供两个个接口函数给底层系统。分别是
(1)uip_input()

当网卡驱动收到一个输入包时,将放入全局缓冲区uip_buf中,包的大小由全局变量uip_len约束。同时将调用 uip_input() 函数,这个函数将会根据包首部的协议处理这个包和需要时调用应用程序。当 uip_input() 返回时,一个输出包同样放在全局缓冲区uip_buf里,大小赋给uip_len。如果uip_len 是0,则说明没有包要发送。否则调用底层系统的发包函数将包发送到网络上。
 
(2)uip_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(),主要是初始化协议栈的侦听端口和默认所有连接都是关闭的。
 
3、UIP协议栈在STM32上的移植
 
 
(1)DM9000A
初始化和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();
(8)IP包处理
uip_input();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stm32 网络 通信