由于项目需求需要使用到网络,强大的ARM真的是什么都有,以前没有玩过LWIP刚好来研究研究,网上有野火博客帖子(ETH—Lwip以太网通信)非常的详细,可以让你从入门到精通再到放弃,一篇帖子五十多页都可以出书了。

我看STM32F407的PHY使用的是LAN8720芯片,而GD32F407上面使用的是DP83848芯片,总之没有使用RTL8201F的,网上百度了一下资料不是很多,所以只能对着datasheet来修改,其实和LAN8720,DP83848的寄存器差不多,认真点就OK

下面对照正点的LAN8720来修改GD32F407上的RTL8201F

一、RTL8201F重要寄存器配置

在RTL8201F中比较重要的寄存器,BCR(0),BSR(1),PHY特殊功能寄存器

BCR(0)

我们配置RTL8201F其实就是配置BCR寄存器,通过GD调用官方的enet_phy_write_read函数来完成对PHY芯片寄存器的读写操作,在GD官方库gd32f4xx_enet.h中已经定于了BCR,BSR代码如下:

BSR(1)

BSR寄存器为RTL8201F的状态寄存器,通过读取该寄存器值可以得到当前的连接速度,双工状态和连接状态等。在GD官方以太网gd32f4xx_enet.c库中通过enet_init函数来读取PHY的BSR寄存器来判断连接是否建立,自协商是否完成等信息。

PHY特殊功能寄存器

和DP83848,LAN8720,有点不一样,RTL8201F没有这个PHY特殊状态寄存器,它是直接在BCR寄存器中直接映射出来的,配置是请注意

主要就是要来判断连接状态和速度,RTL8201F芯片通过完成Auto negotiation后自动映射出Speed status和duplex status我们读取完了后就可以设置

Speed Selection和Duplex Mode 这两个寄存器,在gd32f4xx_enet.h文件中定义:

二、代码配置

1、PHY地址设置

地址引脚和LED引脚共用了,

实际电路连接,AD0接3.3,AD1接地,所以地址为0x01

RTL8202F及其它网卡芯片寄存器全部定义在gd32f4xx_enet.h库文件中,如下图所示:

到这寄存器配置功能基本完成OK, GPIO引脚配置就不多说了,使用的是RMII模式,本来以为万事具备就差上电了,一上电我去卡住了,灯都没能点亮,Debug一步步发现卡在了Rtl8210f_Init函数里面了的Rtl8210f_mac_dma_config()函数,初始化MAC和DMA官方的怎么会呢,

继续往下找

发现这里面有个while,很有可能了,但是加了串口Debug发现0x30可以打印,居然不是那只有最后一个函数了 enet_init();官方库寄存配置有点多啊,只能加串口Debug看卡在那了,发现卡在enet_phy_config()函数

enet_phy_config()函数比较简单,PHY interface configuration (configure SMI clock and reset PHY chip) RTL8201F的接口配置

发现就是对RTL8201F芯片的reset,这都会卡,难道芯片有问题,试了两个板子都不行,将寄存器的值串口打印出来,发现对芯片reset后不能自动清除,Datasheet上明明说可以的(问了供应商叫我们检查电路是不是有问题,没毛病和PHY的clk信号也是杠杠的,供应商就沉默了)

没办法我能不能不进行reset操作啊,如果不进行reset操作寄存器那不就不能回到Default状态,所以我自己写数据到这些寄存器让他们成为Default状态不就OK(好办法),修改参考(Register 0 Basic Mode Control Register)

修改如下:

这下通过了,但是下面又卡住了

卡在这个if里面了,乍回事,自动协商模式过不去,那就不用它了,看看还有什么模式,如下还是有选择的,选择(ENET_100M_FULLDUPLEX)100Mbps 全双工模式,

上电通过了,自动获取IP也成功了,如图:

GD32F407之LWIP+RTL8201F相关推荐

  1. GD32F407 移植FreeRTOS+Lwip

    文章目录 移植过程 移植FreeRTOS 源码拷贝 FreeRTOSConfig.h 注意事项 移植LWIP 源码拷贝与编译 初始化 移植过程 freeRTOS V10.4.5 下载 https:// ...

  2. 基于lwIP实现GD32F407+LAN8720A以太网连接

    从上图中点击lwIP选项,页面跳到下图: ** 代码在这个文章下载,里面有裸机移植和FreeRTOS移植工程. **

  3. GD32F407移植SR8201F

    从GD32F450移植SR8201F网络驱动到GD32F407VE笔记 一. 从网络上下载GD32F450对SR8201F的驱动,MII接法原理图,SR8201F芯片资料等. 二.解压驱动 驱动分为l ...

  4. rt_thread nano GD32F407移植

    rt_thread nano GD32F407移植 文章目录 rt_thread nano GD32F407移植 1.简介 2.RT-Thread Nano移植 移植目结构 移植步骤 添加文件 屏蔽中 ...

  5. GD32F107使用RTL8201F在LWIP-1.41上运行

    找了很多资料,都找不到SMT32和GD32F系列驱动RTL8201F的方案,就算是驱动RTL8201F的硬件连接也很少,经过 努力,终于实现连接,分享给大家,让大家不再使用dp83848h的高成本方案 ...

  6. RTL8201F芯片配置(LWIP_FreeRTOS)

    RTL8201芯片配置_LWIP+FreeRTOS RTL8201F芯片配置(LWIP_FreeRTOS) 基本情况 RTL8201F芯片初始化过程 芯片手册 不正常的初始化结果 初始化流程 PHY芯 ...

  7. LwIP Application Developers Manual12---Configuring lwIP

    1.前言 2.LwIP makefiles With minimal features C_SOURCES = \ src/api/err.c \ src/core/init.c \ src/core ...

  8. lwip可以用于发udp_LWIPUDP一对多

    最近在STM32F767的开发板上移植了LWIP UDP的代码,开发板的资料里面有介绍LWIP移植的文档,介绍了几种网络通信方式,如TCP server,TCP client,UDP,按照文档里面的介 ...

  9. lwip路由实现_基于LWIP协议栈对路由缓存数据结构实现改进设计

    LWIP(Light Weight Internet Protoco1)是瑞士计算机科学院(Swedish Institute of C++omputer Science)AdamDunkels等人开 ...

最新文章

  1. Servlet3.0注解配置访问路径和urlParttern配置
  2. Spring Boot定制启动图案
  3. Spring Boot中常见注解诠释
  4. 查询数据库中数据的年份_本地公开数据中的年份
  5. 20155201 实验四《Java面向对象程序设计》实验报告
  6. MATLAB工具箱下载地址
  7. 使用OpenCV4Android打开相机
  8. HuaWei ❀ Radius协议概述
  9. js正则 保留一位小数或者两位小数
  10. 腾讯云短信服务错误码列表
  11. 中国地质大学英语语音学习笔记(四):英语连读——弱读、冠词连读方法(包括元音字母前添加an的原因)和词间辅音加元音的连读方法
  12. 创意几何点线面三角形孟菲斯海报banneer广告设计ai矢量背景素材
  13. 苹果新专利:紧急情况下可用指纹或特定输入操作悄悄呼救
  14. docker适合初学者吗_简化了Docker:面向绝对初学者的动手指南
  15. 半小时学会LevelDB原理及应用
  16. 未来 Android 开发的从业方向
  17. 第二十九节:Java基础知识-类,多态,Object,数组和字符串
  18. python设置excel字体颜色_[知识积累]python3使用xlwt时写入文档字体颜色和边框样式...
  19. 2020年最新的PTCMS完美修复版小说模板蜻蜓听书、四色风格、带朗读的
  20. 结婚需要注意些啥礼节啊?

热门文章

  1. Arduino IDE安装UNO和NANO开发板驱动教程(CH341SER.EXE)
  2. python对比两个文本差异,将差异写入新文件中
  3. 自然语言处理之词嵌入(Word Embedding)
  4. (详细总结)python爬取 163收件箱邮件内容,收件箱列表的几种方法(urllib, requests, selenium)
  5. 【2020 春招实习小米面试题】最大映射
  6. Java项目:SSM在线工艺品销售商城平台网站
  7. 内存访问冲突问题(非法内存访问)
  8. 利用melendy插入参考文献,4种方法快速插入参考文献,soo easy!
  9. origin 8.1 视频教程
  10. 阿里云启动全球最大智算中心,总算力达12 EFLOPS