参考资料
(1)《Lwip应用开发实战指南——基于STM32》
(2)《STM32库开发实战指南——基于野火挑战者开发板》
(3)《GD32F4xx_User_Manual_CN_V2.2》
。。。
材料准备
(1)GD32官网下载最新的firmware库文件;
(2)LWIP官网下载最新的lwip-2.1.3及contrib-2.1.0包;
(3)GD32F450开发板+LAN8720网络模块;
。。。
移植过程
一个较为方便的移植过程是将GD32Frimware库中的例程提取出来,和Lwip文件共同构成IAR项目。GD32的底层驱动初始化步骤基本不需要改动,对库函数中和LAN8720匹配的一些地方做一些修改即可。
gd32f4xx_enet.h中修改的点
PHY_TYPE 要对应修改为 LAN8700;
PHY_ADDRESS 的修改看情况,我买的这个模块地址为1(可以看原理图确定,也可以调试看看寄存器读取情况,如果地址错误,读到的值为0xFFFF)。
#ifndef _PHY_H_
#define DP83848 0
#define LAN8700 1
#define PHY_TYPE LAN8700
#define PHY_ADDRESS ((uint16_t)01U) /*!< phy address determined by the hardware */
enet_mac_dma_config()函数
这个函数的初始化是需要连接网线的。
LAN8720 调试过程
调试过程主要就是单步运行看程序死在哪里了,一开始LAN8720模块软件复位不过,后来发现是物理地址写的不对,读到的寄存器值为0xFFFF;修改了物理地址以后就发现初始化还是过不了,看了看读到BSR寄存器的值显示网线未连接,连好网线后初始化就顺利通过了;但是PING不通,回头一看发现TX1的引脚连线接错了,改了连线后,PING通了。。。
以上就是LWIP移植及以太网学习过程中遇到的一些非常初级的问题,并做个记录。从0到1的过程是一脸懵逼的,先学习了TCPIP的基本概念,又学习了GD32的以太网模块知识,然后在调试过程中看了LAN8720的手册,了解了寄存器读写的基本内容。多尝试多学习,后续的上层应用是我们的重点,要学习的东西很多,不要怕。