GD32F407之LWIP+RTL8201F
由于项目需求需要使用到网络,强大的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相关推荐
- GD32F407 移植FreeRTOS+Lwip
文章目录 移植过程 移植FreeRTOS 源码拷贝 FreeRTOSConfig.h 注意事项 移植LWIP 源码拷贝与编译 初始化 移植过程 freeRTOS V10.4.5 下载 https:// ...
- 基于lwIP实现GD32F407+LAN8720A以太网连接
从上图中点击lwIP选项,页面跳到下图: ** 代码在这个文章下载,里面有裸机移植和FreeRTOS移植工程. **
- GD32F407移植SR8201F
从GD32F450移植SR8201F网络驱动到GD32F407VE笔记 一. 从网络上下载GD32F450对SR8201F的驱动,MII接法原理图,SR8201F芯片资料等. 二.解压驱动 驱动分为l ...
- rt_thread nano GD32F407移植
rt_thread nano GD32F407移植 文章目录 rt_thread nano GD32F407移植 1.简介 2.RT-Thread Nano移植 移植目结构 移植步骤 添加文件 屏蔽中 ...
- GD32F107使用RTL8201F在LWIP-1.41上运行
找了很多资料,都找不到SMT32和GD32F系列驱动RTL8201F的方案,就算是驱动RTL8201F的硬件连接也很少,经过 努力,终于实现连接,分享给大家,让大家不再使用dp83848h的高成本方案 ...
- RTL8201F芯片配置(LWIP_FreeRTOS)
RTL8201芯片配置_LWIP+FreeRTOS RTL8201F芯片配置(LWIP_FreeRTOS) 基本情况 RTL8201F芯片初始化过程 芯片手册 不正常的初始化结果 初始化流程 PHY芯 ...
- 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 ...
- lwip可以用于发udp_LWIPUDP一对多
最近在STM32F767的开发板上移植了LWIP UDP的代码,开发板的资料里面有介绍LWIP移植的文档,介绍了几种网络通信方式,如TCP server,TCP client,UDP,按照文档里面的介 ...
- lwip路由实现_基于LWIP协议栈对路由缓存数据结构实现改进设计
LWIP(Light Weight Internet Protoco1)是瑞士计算机科学院(Swedish Institute of C++omputer Science)AdamDunkels等人开 ...
最新文章
- Servlet3.0注解配置访问路径和urlParttern配置
- Spring Boot定制启动图案
- Spring Boot中常见注解诠释
- 查询数据库中数据的年份_本地公开数据中的年份
- 20155201 实验四《Java面向对象程序设计》实验报告
- MATLAB工具箱下载地址
- 使用OpenCV4Android打开相机
- HuaWei ❀ Radius协议概述
- js正则 保留一位小数或者两位小数
- 腾讯云短信服务错误码列表
- 中国地质大学英语语音学习笔记(四):英语连读——弱读、冠词连读方法(包括元音字母前添加an的原因)和词间辅音加元音的连读方法
- 创意几何点线面三角形孟菲斯海报banneer广告设计ai矢量背景素材
- 苹果新专利:紧急情况下可用指纹或特定输入操作悄悄呼救
- docker适合初学者吗_简化了Docker:面向绝对初学者的动手指南
- 半小时学会LevelDB原理及应用
- 未来 Android 开发的从业方向
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
- python设置excel字体颜色_[知识积累]python3使用xlwt时写入文档字体颜色和边框样式...
- 2020年最新的PTCMS完美修复版小说模板蜻蜓听书、四色风格、带朗读的
- 结婚需要注意些啥礼节啊?
热门文章
- Arduino IDE安装UNO和NANO开发板驱动教程(CH341SER.EXE)
- python对比两个文本差异,将差异写入新文件中
- 自然语言处理之词嵌入(Word Embedding)
- (详细总结)python爬取 163收件箱邮件内容,收件箱列表的几种方法(urllib, requests, selenium)
- 【2020 春招实习小米面试题】最大映射
- Java项目:SSM在线工艺品销售商城平台网站
- 内存访问冲突问题(非法内存访问)
- 利用melendy插入参考文献,4种方法快速插入参考文献,soo easy!
- origin 8.1 视频教程
- 阿里云启动全球最大智算中心,总算力达12 EFLOPS