RTL8201F芯片配置(LWIP_FreeRTOS)

RTL8201F芯片配置(LWIP_FreeRTOS)

最近项目上用到了RTL8201F的以太网PHY芯片,遇到了一些问题进行一下记录

基本情况

RTL8201F是瑞昱的一款PHY芯片,支持多种模式进行配置,项目中使用NXPMIMX1064芯片作为主控芯片。在官网下载了LWIP+FreeRtos的驱动SDK代码,按照常规配置方式ping有时会超时丢包严重。尝试过多种方式,最后还是定位是PHY芯片的初始化存在问题。

RTL8201F芯片初始化过程

芯片手册

工欲善其事必先利其器,首先是芯片的参考手册一定要选对,这里吃了大亏。瑞昱8201这款PHY芯片有很多不同的后缀代表不同的版本号,下面是两个datasheet,仅仅是版本号有细微的差别,但还是存在一定的差异,这点一定要注意。这里使用的是RTL8201F-VB-CG版本数据手册。

在这里插入图片描述

在这里插入图片描述

上图中是这款芯片基本使用框图,MAC在NXP主控芯片ETH外设内,MAC通过MDC及MDIO这一组通信信号对PHY芯片进行配置和PHY内部寄存器读写操作。正常运行过程中,则是通过MII/RMII这组接口进行以太网通信,即一组是配置,一组接口是通信使用。这里使用的是RMII对芯片进行驱动,MII流程相似,但本人没有实践过。

不正常的初始化结果

按照其他芯片移植了PHY芯片的配置,很奇怪,会出现以下的丢包和延迟很大的情况,最终查明是PHY初始化不正常的问题,下面给出面前使用正常的初始化流程,代码因为项目原因,不太能直接公开。

在这里插入图片描述

初始化流程

PHY芯片寄存器相关介绍

在这里插入图片描述

通过手册可以看到RTL8201F有如下的寄存器,这里挑几个重要的点讲一下:

①Register 0 的地址就是0,以此类推,后面寄存器的地址便可知晓。这里不带Page的寄存器,为默认page,即 0

②该芯片有多个Pages,读取哪个Pages需要在Register 31里面进行写入,即,若想访问Page 7 Register 16;需要先在Register 31中写入0x07,在访问Register 16,访问完毕之后最好将Register 31恢复为0,防止读写错误。

③Page0 Register 13 与Page0 Register 14 是一对间接地址访问寄存器,通过他能够访问 MMD Register 寄存器,这里没有用到该寄存器,需要用到的话,建议看看手册。

初始化流程

在这里插入图片描述

①读取Register 2,这个寄存器是PHY芯片的ID寄存器,默认就是0x001C,这一步是为了验证Phyadress、MDIO通信是否正常。读取到正确的ID才进行下一步,否则直接返回错误。

在这里插入图片描述

②为Register 0第15位(Reset),写入1。复位整个芯片,这里需要等待芯片复位完成,这一位具有Self-clearing的功能,因此等待第15位为0,即代表复位工作完成。

在这里插入图片描述

在这里插入图片描述

③对Page 7 Register 16,进行操作,设置相应的控制模式(RMII/MII);这里需要分成两步进行:

​ I、对Register 31中写入0x07;

​ II、对Page 7 Register 16,写入0x7FFB;这里要注意7FFB是手册给出,必须要这么写;这里电路采用的PHY外挂50MHz的RMII模式,因此与Note符合。实测不这么写会有BUG。

​ III、对Register 31中写入0x00;恢复默认Page,这里恢复的原因是防止误操作,调试过程发现有些寄存器虽未在手册定义,但不同page读取值不同

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

④Register 4是自动协商告知寄存器,PHY芯片初始化过程中首先需要完成自动协商,即与远端设备协商出速度(10M/100M)、全双工(半双工)状态信息等。主控芯片(MIMX1064)再读取后将ETH配置为相应的速度和状态。

这里主要

I、首先是等待自协商完成,在前面复位后,后自动进行一次自协商,但这次自协商我们没办法保证是我们需要的自协商模型,所以需要等待完成后在进行一次

II、获取自协商状态,通过Register 1的第5位,第5位为1代表自协商完成。

III、自协商完成后,将8~5进行写1,4 ~0写00001;即表明该ETH支持的模型,远端设备可以根据支持情况进行配置协商。

IV、对Register 0 的第9位和第12位写1,启动第二次自协商

V、等待自协商完成

在这里插入图片描述

⑤关闭省电模式,这里的Note说要关闭时钟,关闭了,用着没问题。这里与Page 7 Register 16中设置好像有关系,具体没深入研究。

在这里插入图片描述

以上便是初始化过程,初始芯片后,需要完成速度和状态的读取,即读取 Register 0的13和8位,对ETH进行配置。

这样配置之后便不再有ping不同的丢包现象。

在这里插入图片描述

2023/12/1 补充:
本来不想增加一点,但是为了开源论坛做点贡献,补充一些内容。
NXP LWIP库函数在phy_init 函数功能并没有很全面,因此本文对phy init做了大致解释。叙述了自己遇到的问题,大致写了一些过程。
对于某喷的言行,大致放一张图,某喷评论后被官方HX。欢迎某喷来指出不足,进行友好讨论。

对于某喷的驱动,我不敢苟同,有以下疑问,对比其与官方函数代码区别如下(改动主要在80-100之间),左边是某喷的代码,自协商完毕后,真的不需要判断状态吗?各位看官自鉴吧。
在这里插入图片描述

### RTL8211FS-CG SGMII 接口接收端丢包的原因分析 对于RTL8211FS- **链路质量不稳定**:如果物理层传输过程中存在噪声干扰或其他信号衰减情况,则可能导致数据帧无法正确到达目的地。 - **配置错误**:不恰当的PHY寄存器设置可能会破坏正常的通信流程,例如速率协商失败或双工模式匹配不当等问题[^2]。 针对上述提到的具体型号RTL8211FS-CG及其所使用的SGMII协议特性,可以考虑以下几个方面来排查并解决问题: #### 配置检查与调整 确保所有必要的初始化命令被执行,并且参数设定合理。特别是涉及到MAC/PHY交互的部分,如下面给出的例子所示,这些操作可以帮助验证当前环境下的基本连通性和性能表现: ```bash # 设置特定寄存器值以优化收发功能 mii write port_id 1f value 0x0a43 # 调整内部时钟源等选项 mii write port_id 1b value 0xdc88 # 控制状态位及中断使能 mii read port_id 1c # 查询当前工作状况统计信息 mii write port_id 1b value 0xdc88 # 再次确认控制字节写入成功 mii write port_id 1c value 0x074b # 应用额外校准参数提升稳定性 ``` 以上指令序列可用于初步诊断和修正潜在的硬件级误配情形。 #### 日志记录与监控工具的应用 利用网络管理软件收集详细的流量日志文件,从中寻找异常模式;同时借助专门设计用于测试以太网交换机互操作性的应用程序来进行更深入的功能检测。这有助于识别是否存在外部因素影响到整体系统的稳定运行。 #### 版本兼容性考量 考虑到不同版本固件之间可能存在差异,建议更新至最新发布的驱动程序版本,以便获得更好的支持和服务保障。制造商通常会在新发行版中修复已知漏洞以及改进现有特性集。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quikk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值