LWIP总结

介绍

Lwip,light weight IP;是由Adam Dunkels 开发的一个小型开源的TCP/IP协议栈;目前已经为全球共同开发的开源协议;支持TCPIP协议族的核心协议;包括:ARP/ICMP/TCP/UDP/IPV4/IPV6/DHCP等;其核心特点是:功能齐全、运行需求的RAM和ROM少;

编程模型

所有的功能和性能都可进行裁剪和配置;相关文件为:lwipopts.h

内部实现支持带操作系统和不带操作系统;核心框架是:外部单线程驱动协议栈状态机;底层使用中断进行数据的接收;

其提供三种API :1)RAW API 2)lwip API 3)BSD API。其中BSD API就是大家最熟悉的socket API了。Linux和Windows平台中的socket接口都与此大同小异;

移植

将lwip移植到不同的平台主要包括两个部分工作:

  1. MAC+PHY层移植,包括初始化、数据的收发;
  2. 应用层框架移植,如操作系统层的线程创建、定时器、消息邮箱;

平台

硬件:STM32F107 PHY芯片:DM9161AEP

软件:UCOS-ii

移植核心点

ST公司针对STM32F107 不带操作系统版本的LWIP移植版本,文件名为STM32F107_ETH_LwIP,版本为V1.0.0;由于其版本不再更新且与本软件平台不一致,所以不做参考;

由于STM32F1 STM32F2 STM32F4的以太网驱动都是一致的。所以到ST官网下载stm32cubdf2。其中有LWIP针对FREERTOS的移植;而FREERTOS与UCOS大同小异;所以只要针对其修改应用层框架移植的实现即可;相关代码位于:stm32cubef2\STM32Cube_FW_F2_V1.1.0\Projects\STM322xG_EVAL\Applications\LwIP\LwIP_UDPTCP_Echo_Server_Netconn_RTOS;

LWIP的代码使用1.4.1版本,可到LWIP官网上下载;也包含在stm32cubef2中;

移植的理论基础来源于lwip 1.4.1源码包中doc文件夹中的文件;同时官方也有移植到各个平台中的示例,文件为:contrib-1.4.1.zip,到官网上下载即可;

  1. MAC+PHY移植:

需要修改的文件为:

app_ethernet.c/h

ethernetif.c/h

同时需要将stm32cubef2驱动库中的stm32f2xx_hal_eth.c/h拷贝过来;

以上文件只需要配置好,保证编译没问题,则MAC+PHY层移植完成;

2. 应用层框架移植:

修改1个文件sys_arch.c,位于stm32cubef2\STM32Cube_FW_F2_V1.1.0\Middlewares\Third_Party\LwIP\system;

所有的移植即完成;

注意点

STM32Cube_FW_F2_V1.1.0此版本中关于lwip的驱动MAC代码是有bug的,具体表现在当以太网包数量加大时,会出现底层收数据很慢的情况;使用PING命令经常出现TIMEOUT;

此bug在STM32cubeF4中得到解决;相关问题原因描述见参考资料;

参考资料

  1. 核心论文 <<Design and Implementation of the lwIP TCP/IP Stack>> By Adam Dunkels.2001
  2. 移植资料

    http://www.stmcu.org/module/forum/thread-588339-1-1.html

<<lwIP TCP/IP stack demonstration for STM32F107xx connectivity line microcontrollers >> By ST

3.  lwip官方网站https://savannah.nongnu.org/projects/lwip/

上一篇:CSS3文字描边 CSS3字体外部描边


下一篇:C++ 指针悬挂和赋值操作符的重载,拷贝构造函数实现