Bootstrap

STM32F407移植LWIP过程

 一、背景知识

1、TCP/IP协议简介

        TCP/IP 定 义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了 4 层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。TCP 负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP 是给因特网的每一台联网设备规定一个地址。
        TCP/IP 协议不是 TCP IP 这两个协议的合称,而是指因特网整个 TCP/IP 协议族。从协议分层模型方面来讲,TCP/IP 由四个层次组成:网络接口层、网络层、传输层、应用层。 OSI 是传统的开放式系统互连参考模型, 该模型将 TCP/IP 分为七层 : 物理层、数据链路层(网络接口层)、
网络层(网络层)、传输层(传输层)、会话层、表示层和应用层(应用层)。 TCP/IP 模型与 OSI 模型对比下图 所示。
        在 LWIP 实验中 PHY 层芯片 DP82438   相当于物理层, STM32F407 自带的 MAC 层 相当于数据链路层, LWIP 提供的就是网络层、传输层的功能,应用层是需要用户自己根据自己想要的功能去实现的。

2、常用PHY芯片资料

1、LAN8720

        LAN8720 是低功耗的 10/100M 以太网 PHY 层芯片,I/O 引脚电压符合 IEEE802.3-2005 标 准。LAN8720 支持通过 RMII 接口与以太网 MAC 层通信,内置 10-BASE-T/100BASE-TX 全双工传输模块,支持 10Mbps 100MbpsLAN8720 可以通过自协商的方式与目的主机最佳的连接方式(速度和双工模式)。支持 HP Auto-MDIX 自动翻转功能,无需更换网线即可将连接更改为直连或交叉连接。

         LWIP 实验中 PHY 层芯片 LAN8720 相当于物理层,STM32F407 自带的 MAC 层 相当于数据链路层,LWIP 提供的就是网络层、传输层的功能,应用层是需要用户自己根据自己想要的功能去实现的。

        LAN8720 内部寄存器

        PHY 是由 IEEE 802.3 定义的,一般通过 SMI PHY 进行管理和控制,也就是读写 PHY 内 部寄存器。PHY 寄存器的地址空间为 5 位,可以定义 0~31 32 个寄存器。IEEE 802.3 定义了 0~15 16 个寄存器的功能,16~31 寄存器由芯片制造商自由定义。

        在 LAN8720 有很多寄存器,在这里我们只介绍几个用到的寄存器(括号内为寄存器地址, 此处使用十进制表示):BCR(0)BSR(1)PHY 特殊功能寄存器(31)这三个寄存器。

        我们通过调用 ST 官方的以太网库的 ETH_ReadPHYRegister 和 ETH_WritePHYRegister 函数来完成对 PHY 芯片寄存器的读写操作。

        在以后要讲的 LAN8720 初始化的中并没有看到我们直接操作 PHY 的寄存器,原因就在这里当我们调用 ETH_Init() 函数以后就会根据我们输入的参数配置 LAN8720 的相应寄存器。

2、DP83848

3、站管理接口(SMI)

        站管理接口(SMI) 允许应用程序通过 2 条线:时钟 (MDC) 和数据线 (MDIO) 访问任意 PHY寄存器。该接口支持访问多达 32 PHY

二、移植步骤

1,移植STM32f4的驱动文件

  1. 添加stm32的以太网库

        总共需要添加三个文件:

                stm32f4x7_eth.h、stm32f4x7_eth.c 和 stm32f4x7_eth_conf_template.h。         
      
        stm32f4x7_eth.h 为头文件。 ,stm32f4x7_eth.c 为ST 的以太网库,里面有很多关于 STM32F4X7 的以太网的函数, stm32f4x7_eth_conf_template.h 里面定义了一些关于操作 PHY 芯片的信息,为了方便移植我们将 stm32f4x7_eth_conf_template.h 重命名为 stm32f4x7_eth_conf.h 。最后我们将 stm32f4x7_eth.c 添加到我们的工程中,并且添加头文件路径。
  1. 修改 stm32f4x7_eth_conf.h 文件

        如果是DP83848则不用修改,因为stm32官方是按照DP83848编写的。如果是LAN8720则需要修改。

  1. 修改 stm32f4x7_eth.c 文件

        
stm32f4x7_eth.c 文件中针对不同的平台定义了四个数组: Rx_Buff[] Tx_Buff[]
DMARxDscrTab[]和 DMATxDscrTab[] ,这四个数组占用了大量的 RAM 。我们在这里将这四个
变量屏蔽掉 。在其他文件中会采用内存管理的方式为这 4 个数组分配内存,这样我们就可以使用外部 SRAM ,减少对 STM32F407 内部 RAM 的使用。ps其实这里我移植的时候也屏蔽掉了,只是由于我只有一个内存所以还是使用的内部内存,并没什么卵用。完全可以用它定义的,对应好就行。

2,添加以太网驱动程序

        添加之前可以了解上DMA描述符的作用。

  1. 添加 LAN8720 MAC /DMA 驱动

        有添加lan8720.c lan8720.h 这两个文件到各自的硬件驱动中去。同时记得添加stm32f4xx_syscfg.c文件,这个是库文件。

3,LWIP 数据包和网络接口管理

  1. 添加LWIP源文件

4,添加中间件文件

  1. 添加 arch 文件
  2. 添加 LWIP 通用文件
  3. 添加 ethernetif.h 文件

5,LWIP 源码修改

  1. 修改 ethernetif.c 文件
  2. 修改 mem.c memp.c 文件
  3. 修改 icmp.c 文件。
  4. LWIP 的裁剪与配置

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;