我是靠谱客的博主 天真小虾米,最近开发中收集的这篇文章主要介绍RTL8201F芯片配置(LWIP_FreeRTOS)RTL8201F芯片配置(LWIP_FreeRTOS),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

RTL8201芯片配置_LWIP+FreeRTOS

  • RTL8201F芯片配置(LWIP_FreeRTOS)
    • 基本情况
    • RTL8201F芯片初始化过程
      • 芯片手册
      • 不正常的初始化结果
      • 初始化流程
        • PHY芯片寄存器相关介绍
        • 初始化流程

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不同的丢包现象。

在这里插入图片描述

最后

以上就是天真小虾米为你收集整理的RTL8201F芯片配置(LWIP_FreeRTOS)RTL8201F芯片配置(LWIP_FreeRTOS)的全部内容,希望文章能够帮你解决RTL8201F芯片配置(LWIP_FreeRTOS)RTL8201F芯片配置(LWIP_FreeRTOS)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部