RTL8201F芯片配置(LWIP_FreeRTOS)

2023-11-08

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

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RTL8201F芯片配置(LWIP_FreeRTOS) 的相关文章

  • 深入理解Java虚拟机

    什么是Java虚拟机 作为一个Java程序员 我们每天都在写Java代码 我们写的代码都是在一个叫做Java虚拟机的东西上执行的 但是如果要问什么是虚拟机 恐怕很多人就会模棱两可了 在本文中 我会写下我对虚拟机的理解 因为能力所限 可能有些
  • JNI问题

    1 jbyte不能直接替换uint8 t
  • Ubuntu测试使用速腾RS-Lidar-16

    一 获取代码 在想放代码的地方创建文件夹 建议在主目录中 打开终端 输入 mkdir p lidar src cd lidar src git clone https github com RoboSense LiDAR rslidar s
  • mybatis-generator结合freemarker生成简单的service

    首先附上项目的github地址 点击打开链接 第一步 在generatorConfig xml里添加标签 点击进入xml文件对应的dtd文件 在contex那添加需要的标签

随机推荐

  • apisix网关+golang服务 jwt验证

    golang服务使用jwt生成token apisix解析并验证token 1 配置apisix网关jwt 1 在 apisix dashboard 中 新建路由 2 新建路由时开启jwt插件 3 配置jwt插件 algorithm HS2
  • dpdk+ovs安装和编译(一)

    绑定前网卡驱动 root localhost ethtool i enp5s0 driver hinic version firmware version expansion rom version bus info 0000 05 00
  • 学英语的好电影

    1 阿甘正传 FORREST GUMP 主演 Tom Hanks 汤姆 汉克斯 2 电子情书 YOU VE GOT MAIL 主演 Tom Hanks 汤姆 汉克斯 Meg Ryan 梅格 瑞安 3居家男人 THE FAMILY MAN 主
  • 在Vue中将单独一张图片设为背景图并充满整个屏幕

    Vue基础知识 将单独一张图片设为背景图并充满整个屏幕 代码如下 在主div中添加样式 background url xx images 图片名字 jpg 这里的地址是用你项目中图片所在的路径为准 background repeat no
  • 谁拿了最多奖学金

    import java util ArrayList import java util Collections import java util List import java util Scanner public class Main
  • Ubuntu安装配置Samba服务

    一 什么是Samba Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件 由服务器及客户端程序构成 SMB Server Messages Block 信息服务块 是一种在局域网上共享文件和打印机的一种通信协议 它为局域网
  • 如何判断项目有没有用ajax,项目中关于AJAX的使用总结

    一 使用情况 AJAX 是与服务器交换数据并更新部分网页的艺术 在不重新加载整个页面的情况下使用 AJAX的核心 向服务器发送多个请求而无需用户等待来至服务器的响应 二 AJAX的优势 1 异步加载数据 无需切换页面 不需要刷新 2 更佳的
  • 【linux 】添加开机启动项的方法

    目录 linux 添加开机启动项的方法 编辑文件 etc rc local 在 etc init d目录下添加自启动脚本 每次登录自动执行 通过chkconfig命令设置 把脚本注册为系统服务 在crontab中设置 没试过 Linux目录
  • 流程引擎(flowable)之用户任务

    代码示例 查询一个任务并审批 Task task configuration getTaskService createTaskQuery taskAssignee kermit singleResult if StringUtils is
  • Ubuntu18.04软件源修改成国内镜像源

    Ubuntu18 04软件源修改成国内镜像源 修改sources list文件 文件在 etc apt目录下 操作需要root权限 记得加上sudo sudo vim etc apt sources list 添加科大镜像源 在文件最下面加
  • UITabBarController的使用详解及其自定义

    转载自 https www jianshu com p 2f74a5d93faa 简介 UITabBarController 选项卡控制器 与导航控制器一样 也被广泛用于各种ios应用程序 顾名思义 选项卡控制器在屏幕底部显示一系列 选显卡
  • java使用URLconnection下载文件 getContentLength()为-1 的解决办法

    一 起因 APP想要从远程服务器下载一个文件 不想使用网络请求框架 想了解一下原生的实现 于是简单了解了一下URLconnection类的使用 加上参考了网络上的实现 简单实现了文件下载操作 代码如下 long downloadLength
  • angular自定义实现管道

    参考angular官方文档 角 管 angular io 选择 描述 name 要在模板绑定中使用的管道名称 通常使用较小的驼峰大小写 因为名称不能包含连字符 pure 如果为 true 则管道是纯的 这意味着仅当该方法的输入参数时才调用该
  • Visual Studio Code 手动导入 jar包

    前言 为了方便调试 ModBus库包 使用 VSCode 搭建 Java 开发环境 安装过程中的一些问题 JDK 和 JRE 版本不兼容 卸载 原JDK 和 JRE 使用 jdk 8u221 windows x64 安装 安装过程中会让你安
  • Vuforia Virtual Button(虚拟按钮)案例二——按钮事件处理

    一 利用Unity3d进行开发 查看这个脚本 是对虚拟按钮的事件进行监听控制 相应地修改按钮的触发事件可以通过这个类进行 Add the material corresponding to this virtual button to th
  • AI AIgents时代-(四.)应用上手

    HuggingGPT MetaGPT HuggingGPT HuggingGPT是一个多模型调用的 Agent 框架 利用 ChatGPT 作为任务规划器 根据每个模型的描述来选择 HuggingFace 平台上可用的模型 最后根据模型的执
  • Git 代码分支管理 / 版本管理

    Git 代码分支管理 版本管理 在使用 Git 时 基本不可能只有一个分支 即使只有一个人发开 也会考虑代码的安全而分多个分支 多人协同开发时 可能每个人在不同的分支开发 也可能不同团队在不同的分支开发 还有就是不同的功能在不同的分支开发
  • Mybatis中如何传入map参数呢?

    转自 Mybatis中如何传入map参数呢 下文笔者讲述Mybatis的xml中使用map参数的方法分享 如下所示 实现思路 1 将参数类型设置为map 2 在xml中直接使用map的键值获取参数即可 例 Mybatis使用map获取键值的
  • nginx中rewrite的六种常用跳转(域名、客户端IP ......)

    注意 每次做完一个需要将前面的配置文件中配置清除 防止影响结果 一 应用场景 基于域名的跳转 1 公司旧域名www accp com 因业务需求有变更 需要使用新域名www kgc com代替 1 不能废除旧域名 2 从旧域名跳转到新域名
  • RTL8201F芯片配置(LWIP_FreeRTOS)

    RTL8201芯片配置 LWIP FreeRTOS RTL8201F芯片配置 LWIP FreeRTOS 基本情况 RTL8201F芯片初始化过程 芯片手册 不正常的初始化结果 初始化流程 PHY芯片寄存器相关介绍 初始化流程 RTL820