zoukankan      html  css  js  c++  java
  • 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大同小异;所以只要针对其修改应用层框架移植的实现即可;相关代码位于:stm32cubef2STM32Cube_FW_F2_V1.1.0ProjectsSTM322xG_EVALApplicationsLwIPLwIP_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,位于stm32cubef2STM32Cube_FW_F2_V1.1.0MiddlewaresThird_PartyLwIPsystem;

        所有的移植即完成;

    注意点

        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/

  • 相关阅读:
    关于 __proto__和prototype的一些理解
    使用siege进行web压力测试
    Access denied for user 'root'@'localhost' (using password: YES)
    博客搬家来咯
    Permutation Transformer【Splay】
    Prime Independence 【LightOJ
    Power Sockets【CF 1469F】【线段树+贪心】
    A Bit Similar【CF 1469E】【unordered_map+bitset】
    brz的树【牛客练习赛72 F】【虚树+dfs序可持久化线段树+树上差分】
    CCA的期望【牛客练习赛74】【数学】
  • 原文地址:https://www.cnblogs.com/wilyas/p/5303019.html
Copyright © 2011-2022 走看看