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

    物联沃分享整理
    物联沃-IOTWORD物联网 » 配置RTL8201F芯片与LWIP_FreeRTOS操作系统的网络连接

    发表评论