从GD32F450移植SR8201F网络驱动到GD32F407VE笔记

[复制链接]
383|18
手机看帖
扫描二维码
随时随地手机跟帖
micky_xie|  楼主 | 2023-1-12 16:19 | 显示全部楼层 |阅读模式

一、

从网络上下载GD32F450对SR8201F的驱动,MII接法原理图,SR8201F芯片资料等。


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_20,color_FFFFFF,t_70,g_se,x_16.jpg


二、解压驱动


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_19,color_FFFFFF,t_70,g_se,x_16.jpg


驱动分为library和project目录


三、打开工程


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_20,color_FFFFFF,t_70,g_se,x_16.jpg


在project目录下,找到MDK工程并打开,安装必要的驱动。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_18,color_FFFFFF,t_70,g_se,x_16.jpg


可以看见,选择GD的芯片


四、设置路径,把450改为407


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_18,color_FFFFFF,t_70,g_se,x_16.jpg


五、并设置include path,把LWIP的头文件都包含进来。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_20,color_FFFFFF,t_70,g_se,x_16.jpg







六、把源码建目录依次导入


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_20,color_FFFFFF,t_70,g_se,x_16.jpg


记得把library下面的目录包含进来,否则会报错。


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_20,color_FFFFFF,t_70,g_se,x_16.jpg


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_20,color_FFFFFF,t_70,g_se,x_16.jpg


七、修改main.h文件,设置MII_MODE(我用的是MII模式,芯片也支持RMII模式)

根据原理图设置MAC_ADDR0地址,关中断,用LWIP TIMEOUT模式。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_19,color_FFFFFF,t_70,g_se,x_16.jpg

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_20,color_FFFFFF,t_70,g_se,x_16.jpg



八、修改enet_gpio_config()函数


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_20,color_FFFFFF,t_70,g_se,x_16.jpg


九、根据原理图修改GPIO,其中RXD0~RXD3需要设置为弱上拉,这个地方芯片驱动默认是不上拉。


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_18,color_FFFFFF,t_70,g_se,x_16.jpg




#ifdef MII_MODE


    /* PA1: ETH_MII_RX_CLK */

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);

    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_1);


    /* PA2: ETH_MDIO */

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);

    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_2);


    /* PA7: ETH_MII_RX_DV */

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);

    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_7);  


    gpio_af_set(GPIOA, GPIO_AF_11, GPIO_PIN_1);

    gpio_af_set(GPIOA, GPIO_AF_11, GPIO_PIN_2);

    gpio_af_set(GPIOA, GPIO_AF_11, GPIO_PIN_7);


    /* PG11: ETH_MII_TX_EN */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11);

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_11);

//    gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11);

//    gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_11);   

    /* PG13: ETH_MII_TXD0 */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_12);

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_12);

//    gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_13);

//    gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_13);   

    /* PG14: ETH_MII_TXD1 */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_13);

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_13);  

//    gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_14);

//    gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_14);  


    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_11);

    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_12);

    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_13);

//    gpio_af_set(GPIOG, GPIO_AF_11, GPIO_PIN_11);

//    gpio_af_set(GPIOG, GPIO_AF_11, GPIO_PIN_13);

//    gpio_af_set(GPIOG, GPIO_AF_11, GPIO_PIN_14);

    /* PC1: ETH_MDC */

    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);

    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_1);


    /* PC2: ETH_MII_TXD2 */

    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);

    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_2);


    /* PC3: ETH_MII_TX_CLK */

    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3);

    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_3);


    /* PC4: ETH_MII_RXD0 */

//    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_4);

              gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_4);

    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_4);


    /* PC5: ETH_MII_RXD1 */

    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_5);

//    gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5);         

    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_5);


    gpio_af_set(GPIOC, GPIO_AF_11, GPIO_PIN_1);

    gpio_af_set(GPIOC, GPIO_AF_11, GPIO_PIN_2);

    gpio_af_set(GPIOC, GPIO_AF_11, GPIO_PIN_3);

    gpio_af_set(GPIOC, GPIO_AF_11, GPIO_PIN_4);

    gpio_af_set(GPIOC, GPIO_AF_11, GPIO_PIN_5);


    /* PH2: ETH_MII_CRS */

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_0);

    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_0);

//    gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);

//    gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_2);   

    /* PH3: ETH_MII_COL */

    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3);

    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_3);

//    gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3);

//    gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_3);   

    /* PH6: ETH_MII_RXD2 */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_0);

//    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_0);         

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_0);

//    gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_6);

//    gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_6);

    /* PH7: ETH_MII_RXD3 */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_1);

//    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);         

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_1);

//    gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);

//    gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_7);


    gpio_af_set(GPIOA, GPIO_AF_11, GPIO_PIN_0);

    gpio_af_set(GPIOA, GPIO_AF_11, GPIO_PIN_3);

    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_0);

    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_1);

//    gpio_af_set(GPIOH, GPIO_AF_11, GPIO_PIN_2);

//    gpio_af_set(GPIOH, GPIO_AF_11, GPIO_PIN_3);

//    gpio_af_set(GPIOH, GPIO_AF_11, GPIO_PIN_6);

//    gpio_af_set(GPIOH, GPIO_AF_11, GPIO_PIN_7);


    /* PI8: ETH_INT */

    gpio_mode_set(GPIOI, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);

    gpio_output_options_set(GPIOI, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_8);


    /* PI10: ETH_MII_RX_ER */

    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10);

    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_10);

//    gpio_mode_set(GPIOI, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10);

//    gpio_output_options_set(GPIOI, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_10);


    gpio_af_set(GPIOI, GPIO_AF_11, GPIO_PIN_8);

//   gpio_af_set(GPIOI, GPIO_AF_11, GPIO_PIN_10);

    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_10);

    /* PB8: ETH_MII_TXD3 */

    gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);

    gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_2);


    gpio_af_set(GPIOE, GPIO_AF_11, GPIO_PIN_2);

//     gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);

//    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ,GPIO_PIN_8);

//   

//    gpio_af_set(GPIOB, GPIO_AF_11, GPIO_PIN_8);   



十、修改完编译好,下载能ping 通板子。短包有些丢包,长包可以到1472,没有发现丢包。注意startup.s要改为32F407的。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_20,color_FFFFFF,t_70,g_se,x_16.jpg


十一、测试TCP client

将电脑IP设置为192.168.57.158,运行网络调试助手,端口设为8000,可以看到TELNET连接成功


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_20,color_FFFFFF,t_70,g_se,x_16.jpg


同时串口显示如下:


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_17,color_FFFFFF,t_70,g_se,x_16.jpg


验证板测试ping包丢失:3小时无丢包


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfMjE4NTE5Mjk=,size_11,color_FFFFFF,t_70,g_se,x_16.jpg


使用特权

评论回复
weifeng90| | 2023-1-16 21:55 | 显示全部楼层
这个网络PHY芯片没听说过呢?

使用特权

评论回复
micky_xie|  楼主 | 2023-2-1 09:31 | 显示全部楼层
weifeng90 发表于 2023-1-16 21:55
这个网络PHY芯片没听说过呢?

国产的和芯润德,对标RTL8201

使用特权

评论回复
sagade| | 2023-2-1 09:47 | 显示全部楼层
8201确实是便宜

使用特权

评论回复
zeshoufx| | 2023-2-1 15:21 | 显示全部楼层
谢谢分享,,,,

使用特权

评论回复
sdlls| | 2023-2-2 10:01 | 显示全部楼层
这个GD32F450和GD32F407VE不兼容的吗?

使用特权

评论回复
pl202| | 2023-2-2 10:09 | 显示全部楼层
SR8201F和RTL8201F性能哪个好?

使用特权

评论回复
评论
micky_xie 2023-2-2 10:24 回复TA
性能不好评估,量产的都不错吧 
micky_xie|  楼主 | 2023-2-2 10:23 | 显示全部楼层
sdlls 发表于 2023-2-2 10:01
这个GD32F450和GD32F407VE不兼容的吗?

具体有些区别的,头文件都不同

使用特权

评论回复
belindagraham| | 2023-2-4 09:30 | 显示全部楼层
SR8201F实现了所有10/100M以太网物理层

使用特权

评论回复
maqianqu| | 2023-2-4 10:11 | 显示全部楼层
这个可以运行lwip吗?              

使用特权

评论回复
louliana| | 2023-2-4 11:21 | 显示全部楼层
SR8201F以太网收发器芯片的方案验证了吗

使用特权

评论回复
tpgf| | 2023-2-4 14:28 | 显示全部楼层
请问enet_gpio_config()函数的作用是什么为什么要进行修改呢

使用特权

评论回复
heimaojingzhang| | 2023-2-4 14:35 | 显示全部楼层
pl202 发表于 2023-2-2 10:09
SR8201F和RTL8201F性能哪个好?

这个说不好,得看应用的侧重点是什么了

使用特权

评论回复
keaibukelian| | 2023-2-4 14:42 | 显示全部楼层
仔细看 了一下 基本上整个移植过程中对代码的修改非常少

使用特权

评论回复
paotangsan| | 2023-2-4 14:49 | 显示全部楼层
我们使用了多少个引脚  就需要对多少个引脚进行重新配置吗

使用特权

评论回复
renzheshengui| | 2023-2-4 15:18 | 显示全部楼层
paotangsan 发表于 2023-2-4 14:49
我们使用了多少个引脚  就需要对多少个引脚进行重新配置吗

楼主的代码应该只是一个展示 毕竟如果硬件引脚兼容的话 可以不用更改

使用特权

评论回复
wakayi| | 2023-2-4 15:26 | 显示全部楼层
belindagraham 发表于 2023-2-4 09:30
SR8201F实现了所有10/100M以太网物理层

请问实现所有10/100M以太网物理层是什么意思 难道其他芯片不能实现吗

使用特权

评论回复
micky_xie|  楼主 | 2023-2-6 10:01 | 显示全部楼层
maqianqu 发表于 2023-2-4 10:11
这个可以运行lwip吗?

是的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则