介绍

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/

LWIP总结的更多相关文章

  1. LwIP移植和使用

    LwIP移植和使用 本手册基于lwip-1.4.x编写,本人没有移植过1.4.0之前的版本,更早的版本或许有差别.如果看官发现问题欢迎联系<QQ: 937431539  email: 93743 ...

  2. 关于lwip移植到ucsos-ii平台的遇到的问题(一)

    移植的步骤参照<Day_Day_Up笔记之uCOS-II_LwIP_在_STM32F107_上移植>,<uCOS平台下的LwIP移植笔记>,<嵌入式网络那些事>. ...

  3. rt—移植笔记2(Lwip)

    首先参考f107已经有的目录结构添加Lwip这一组,添加各种.c文件及.文件. 还有drive下边的很重要的eth.c 到此,工程编译通过.(刚开始,小编是一个一个 的比对...一个一个错误排查... ...

  4. TCP/IP协议学习(二) LWIP用户自定义配置文件解析

    LWIP协议支持用户配置,可以通过用户裁剪实现最优化配置,LWIP默认包含opts.h作为系统默认配置,不过通过添加lwipopts.h文件并包含在opts.h头文件之前就可以对lwip进行用户裁剪, ...

  5. TCP/IP协议学习(一) LWIP实现网络远程IAP下载更新

    最近需要实现通过TCP/IP远程IAP在线更新功能,忙了2周终于在原有嵌入式服务器的基础上实现了该功能,这里就记录下实现的过程. IAP又称在应用编程,其实说简单点就是实现不需要jlink,仅通过芯片 ...

  6. LWIP协议中tcp_seg结构相关指针的个人理解

    我曾经写在新浪博客上面,后来复制到这,图片就不行了. 原文地址转载  LWIP协议中tcp_seg结构相关指针的个人理解(http://blog.sina.com.cn/s/blog_7e586985 ...

  7. LwIP情景示例

    1. 你使用UDP作为探测包,但被探测的主机不在网络上. 在发送UDP packet之前,LwIP要将其保存下来(分配一个RAM类型的pbuf),并首先发送ARP Request,但得不到回应.如果你 ...

  8. lwip初始化过程

    首先应该看下源码包中的doc/rawapi.txt,这篇文档中介绍了初始化流程. 初始化过程的前半部分主要针对lwip的内存管理和各个协议层,在src/core/init.c中有一个lwip_init ...

  9. Lwip的相关资料

    文件资料 Lwip编程指南 Lwip协议栈的设计与实现 分析Lwip

随机推荐

  1. System.Web.Http.Cors配置跨域访问的两种方式

    System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...

  2. PHP中Exception异常

    异常的基本使用 当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块. 如果异常没有被捕获,而且又没用使用 set_exception_hand ...

  3. 第一届山东省ACM——Phone Number(java)

    Description We know that if a phone number A is another phone number B’s prefix, B is not able to be ...

  4. [Algorithm] 群体智能优化算法之粒子群优化算法

    同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...

  5. 释放修改OS X 10.11系统文件权限【转】

    序言:有时要替换相关的(系统目录下的)文件以完成软件的破解,但在 OS X 10.11 系统图形界面下,Root(系统超级用户)已‘转变’为 Administrator(管理员用户),选择系统文件夹( ...

  6. 部分Android手机拍照后照片被旋转的解决方案

      在部分Android手机(如MT788.Note2)上,使用Camera拍照以后,得到的照片会被自动旋转(90°.180°.270°),这个情况很不符合预期.仔细分析了一下,因为照片属性中是存储了 ...

  7. (转)System.Drawing.Color的颜色对照表

    经常使用System.Drawing.Color, 本篇介绍一下颜色与名称及RGB值的对应关系. 1. 颜色与名称的对照表(点击下图放大看): 2. 颜色与RGB值对照表: Color.AliceBl ...

  8. mysql 性能优化方向

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. Redis启动多端口、运行多实例

    默认Redis程序安装在/usr/local/redis目录下: 配置文件:/usr/local/redis/redis.conf,该配置文件中配置的端口为默认端口:6379: Redis的启动命令路 ...

  10. docker 目录迁移

    (ubuntu 12.04) 默认路径 /var/lib/docker  --> /data/docker root@node1:~# service docker stop root@node ...