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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM