【 从0到1版本】移植RT-Thread到GD32 ——之 <添加以太网驱动>RTT + GD32F4XX + DP83848 (超详细)

RTT + GD32F4XX + DP83848

文章中,针对各种特殊情况:如menuconfig找不到相关驱动选项、驱动文件添加但不成功,以及IP非静态等问题做了一系列的解释解答和解决。并且指明了各种源码的位置,和移植位置。入门简单,容易上手!

【教程前的叨叨叨】目前看到各位大佬的文章,基本STM32+LAN8700教程居多,因为最近手上新项目使用的是GD32F4XX + DP83848,摸索的过程记录并分享一下,希望能给后来者一些引导和帮助。

客观来说GD属于国产芯片,作为研发可以投入更多的精力去维护和督促它们和各个开源的接轨和更新。相信软件技术+硬件支持,我们国内芯片的研发市场才能打开,后来人的研发环境才能更好~

教程比较粗浅,有哪里不明白的地方,欢迎小白们在评论区互动,欢迎大佬们多多指点![抱拳]

第一步:env终端输入:menuconfig ⇒ **启用 lwIP 与 net device**

第一处:(记得选对芯片)
【 从0到1版本】移植RT-Thread到GD32 ——之 <添加以太网驱动>RTT + GD32F4XX + DP83848 (超详细)_第1张图片
第二处:开启network的驱动
【 从0到1版本】移植RT-Thread到GD32 ——之 <添加以太网驱动>RTT + GD32F4XX + DP83848 (超详细)_第2张图片
【 从0到1版本】移植RT-Thread到GD32 ——之 <添加以太网驱动>RTT + GD32F4XX + DP83848 (超详细)_第3张图片
【 从0到1版本】移植RT-Thread到GD32 ——之 <添加以太网驱动>RTT + GD32F4XX + DP83848 (超详细)_第4张图片
此处可参考<官网教程>:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/components/network/an0010-lwip-driver-porting?id=驱动移植

【特别注意】 - PS

遇到问题:

如果menuconfig 打开找不到如上的勾选项,那么就是borad的Kconfig里缺少了驱动设置,需要移植一下。

解决思路:

将如下内容写入”menu Onboard Peripheral Drivers”内,再重新在env输入menuconfig,接着按照第一步进行即可

config BSP_USING_ETH
        bool "Enable Ethernet"
        select RT_USING_LWIP
        default n
		if BSP_USING_ETH
            choice
                prompt "Select Eth PHY"
                default PHY_USING_DP83848C

                config PHY_USING_LAN8720A
					bool "PHY_USING_LAN8720A"
		
				config PHY_USING_DP83848C
					bool "PHY_USING_DP83848C"
					
				config PHY_USING_DM9161CEP
					bool "PHY_USING_DM9161CEP"
            endchoice
        endif

第二步:移植源码中的驱动文件

从RTT源码中复制以下几个文件到项目中
('drv_enet.c’, ‘synopsys_emac.c’,’synopsys_emac.h’)

RTT_PATH (rt-thread-master\bsp\gd32450z-eval\drivers\)
目标_PATH(\libraries\gd32_drivers\)

第三步:查看编译文件SConscript

查看(\libraries\gd32_drivers\SConscript),是否添加了drv_enet的文件编译。如果没有,则添加如下内容。

# add Ethernet drivers.
if GetDepend('RT_USING_LWIP'):
    src += ['drv_enet.c', 'synopsys_emac.c']

第四步:进行打包编译

添加后,env终端输入:scons --target=mdk5

进行更新编译。

第五步:勾选芯片类型

记得勾选芯片类型:(DP83848 || LAN8700)
ps:我手里的板子使用的是DP83848

 #ifndef _PHY_H_
 #define DP83848                          1
 #define LAN8700                          0
 #define PHY_TYPE                         DP83848
 
 //[下面的地址,两个芯片的起始位置不同]:
 	//DP是从1U开始;LAN是从0U开始
 #define PHY_ADDRESS                      ((uint16_t)1U)     /*!< phy address determined by the hardware */

第六步:测试

测试一下,发现设置的ip均为空
【 从0到1版本】移植RT-Thread到GD32 ——之 <添加以太网驱动>RTT + GD32F4XX + DP83848 (超详细)_第5张图片

【特别注意】 - PS

分析思路:

静态IP的定义问题

解决方法:

在项目的rtconfig.h中,并添加IP相关的内容

/* Static IPv4 Address */
#define RT_LWIP_IPADDR "192.168.1.30"
#define RT_LWIP_GWADDR "192.168.1.1"
#define RT_LWIP_MSKADDR "255.255.255.0"

并找到关于静态IP的定义:RT_LWIP_DHCP,注释掉(短期修改)。
或者将DHCP的选项从menuconfig中取消勾选(长期修改)。
【 从0到1版本】移植RT-Thread到GD32 ——之 <添加以太网驱动>RTT + GD32F4XX + DP83848 (超详细)_第6张图片
【 从0到1版本】移植RT-Thread到GD32 ——之 <添加以太网驱动>RTT + GD32F4XX + DP83848 (超详细)_第7张图片

最终:调试完毕,成功后如下图所示:

【 从0到1版本】移植RT-Thread到GD32 ——之 <添加以太网驱动>RTT + GD32F4XX + DP83848 (超详细)_第8张图片
图片要素解释:
【方框内容】:rt_hw_gd32_eth_init 函数初始化后的反馈log
【使用命令】:

ifconfig   
//来查看以太网的相关设置。

ping (局域网内的某主机IP)     
//可以看到反馈正常

本地某主机反ping设备,发现反馈也正常

【 从0到1版本】移植RT-Thread到GD32 ——之 <添加以太网驱动>RTT + GD32F4XX + DP83848 (超详细)_第9张图片

【特别注意】 - PS

问题描述:

如果存在本地ping设备可通,但是设备ping本地某主机不通的情况

解决思路:

可以看下是不是本地主机开启了防火墙,如果开了,就关闭防火墙后再次尝试一下。

你可能感兴趣的:(嵌入式单片机系列,单片机,嵌入式硬件,stm32)