MDIO读写测试实验

目录

一.以太网

1.1以太网概述

1.2以太网的分类

1.3以太网的接口类型

 1.4RJ45接口定义

1.5以太网连接图

二.MDIO接口

2.1MDIO概述

2.2MDIO接口连接图

2.3MDIO接口的帧格式 

2.4MDIO 接口读时序图

2.5MDIO 接口写时序图

三.以太网 PHY 芯片(YT8531)

 3.1YT8531概述

 3.2PHY地址

3.3硬件设计

3.4复位

四.实验任务

五.系统框图设计

六.代码解读

6.1MDIO_dri模块 

​6.2MDIO_ctrl模块

七.板级验证

7.1通信速度为1000M/s时,LED0和LED1全亮

 7.2通信速度为100M/s时,LED1亮,LED0灭

7.2通信速度为10M/s时,LED0亮,LED1灭


一.以太网

1.1以太网概述

          以太网(Ethernet)是当今现有局域网采用的最通用的通信协议标准(IEEE802.3),该标准定义了在局域网中采用的电缆类型和信号处理方法。其成本低、通信速率高、抗干扰性强。

1.2以太网的分类

        标准以太网(10Mbit/s)、快速以太网(100Mbit/s)和千兆以太网(1000Mbit/s)。

1.3以太网的接口类型

        以太网通信离不开连接端口的支持,网络数据连接的端口就是以太网接口。以太网接口类型有 RJ45 接口、RJ11 接口(电话线接口)、SC 光纤接口等。

 1.4RJ45接口定义

           RJ45 插座只使用了 1 2 3 6 这四根线,其中 1 2 这组负责传输数据( TX+ TX- ),
3 6 这组负责接收数据( RX+ RX- ),另外四根线是备用的。

             这里数据DATA1+和引脚3、6相连接是为了向下兼容10M/100M.只不过不同的通信速率,其引脚功能有区别。

         

1.5以太网连接图

              从硬件的角度来说,以太网接口电路主要由 MACMedia Access Control)控制器和物理层接口 PHY (Physical LayerPHY)两大部分构成。MAC 指媒体访问控制子层协议,它和 PHY 接口既可以整合到单颗芯片内,也可以独立分开,对于本次设计来说,MAC 控制器由 FPGA 实现,PHY 芯片指开发板板载的以太网芯片。

             PHY 在发送数据的时候,接收 MAC 发过来的数据(对 PHY 来说,没有帧的概念,都是数据而不管什么地址,数据还是 CRC),把并行数据转化为串行流数据,按照物理层的编码规则把数据编码转换为模拟信号发送出去,接收数据时的流程反之。故PHY作用之一就是进行数模转换。

             RGMII接口下:当实现速率为1000M时,ETH_RXC=125M,采用双边沿触发,len(ETH_RXD)=4,故125Mx2x4=1000M;当实现速率为100M时,ETH_RXC=25M,故25Mx4=100M;当实现速率为10M时,ETH_RXC=2.5M,故2.5Mx4=10M。

             GMII接口下:当实现速率为1000M时,ETH_RXC=125M,len(ETH_RXD)=8,故125Mx8=1000M。

二.MDIO接口

2.1MDIO概述

       MDIO(Management  Data  Input/Output),也被称为SMI(Serial Management Interface),即串行管理接口。

       MDIO接口是MAC和PHY芯片的配置接口,可以配置 PHY 芯片的工作模式以及获取 PHY

片的若干状态信息。

2.2MDIO接口连接图

         MDIO接口包括 ETH_MDC(数据管理时钟)和 ETH_MDIO(数据管理输入输出)两条信号线。ETH_MDC ETH_MDIO 提供时钟,ETH_MDC的最大时钟不能超过 12.5MhzETH_MDIO 为双向数据引脚,既用于发送数据,也用于接收数据。

2.3MDIO接口的帧格式 

   

     Preamble 32 位前导码,由 MAC 端发送 32 位逻辑“ 1 ”,用于同步 PHY 芯片。
     ST Start of Frame ): 2 位帧开始信号,用 01 表示。
     OP Operation Code ): 2 位操作码,读: 10 写: 01
     PHYAD PHY Address ): 5 PHY 地址,用于表示与哪个 PHY 芯片通信,因此一个 MAC 上可以连接多个 PHY 芯片。这里高两位闲置,因此只有三根地址线,最多连接8个PHY芯片。
     REGAD Register Address ): 5 位寄存器地址,可以表示 32 个寄存器。
     TA Turnaround ): 2 位转向,在读命令中, MDIO 在此时由 MAC 驱动改为 PHY 驱动,在第一个 TA位,MDIO 引脚为高阻状态,第二个 TA 位, PHY MDIO 引脚拉低,准备发送数据;在写命令中,不需要 MDIO 方向发生变化, MAC 固定输出 2’b10 ,随后开始写入数据。这是为了防止出现读写冲突
     DATA 16 位数据,在读命令中, PHY 芯片将对应的 PHYAD REGAD 寄存器的数据写到 DATA 中;在写命令中,PHY 芯片将接收到的 DATA 写入 REGAD 寄存器中。需要注意的是,在 DATA 传输的过程中,高位在前,低位在后。
     IDLE :空闲状态,此时 MDIO 为无源驱动,处于高阻状态,但一般用上拉电阻使其上拉至高电平。

2.4MDIO 接口读时序图

     

       上图是以 PHY 地址为 0x01,从寄存器地址 0x00 读出数据为例 .整个读操作过程的 MDC 时钟由 MAC驱动,同时 MAC 驱动 MDIO 引脚输出前导码+帧开始+操作码+PHY 地址+寄存器地址,随后 MDIO 引脚切换至 PHY 驱动。PHY 在 MDC 时钟的上升沿采集数据,为保证数据的稳定传输,MAC MDC 的下降沿更新 MDIO 引脚的数据。当 MDIO 引脚切换至 PHY 驱动时,MDIO 数据在 MDC 时钟的下降沿更新,因此 MAC MDC 时钟的上升沿采集数据。在读操作结束后,MAC MDIO 引脚输出高阻,此时 MDIO 引脚的外部上拉电阻会将 MDIO 引脚拉高,此时 MDIO 接口处于空闲状态。

        注意这与写操作不同的是,写操作时一直是MAC驱动MDIO数据线来传输数据;

        读操作时,先由MAC驱动总线写PHY地址还有寄存器地址,然后MAC将MDIO拉高至高阻态,然后PHY端再将MDIO拉低发送应答信号,后面就可以顺利进行读数据操作。

2.5MDIO 接口写时序图

       上图是以 PHY 地址为 0x01 ,向寄存器地址 0x00 写入 0x1340 为例,在整个写操作过程中, MDC 时钟和 MDIO 引脚一直由 MAC 端驱动,按照 MDIO 接口写通信协议开始传输数据。需要注意的是, PHY 在 MDC 时钟的上升沿采集数据,为保证数据的稳定传输, MAC MDC 的下降沿将数据更新至 MDIO 引脚。 在写操作结束后,MAC MDIO 引脚输出高阻,此时 MDIO 引脚的外部上拉电阻会将 MDIO 引脚拉高, 此时 MDIO 接口处于空闲状态。

三.以太网 PHY 芯片(YT8531

 3.1YT8531概述

             在以太网通信中,设备之间的物理层链路均由 PHY 芯片建立。PHY 芯片有一个配置接口,即 MDIO 接口,可以配置 PHY 芯片的工作模式以及获取 PHY 芯片的若干状态信息。

             YT8531/YT8511共有22位寄存器,但是我们经常用到的只有三个寄存器,分别是基本控制寄存器(Basic Control Register,BCR)、基本状态寄存器(Basic Status Register,BSR)以及PHY芯片特定状态寄存器(PHY Specific Status Register,PHYSR)。

 3.2PHY地址

          YT8531 芯片的 PHY 地址由 PHYAD0 PHYAD1 PHYAD2 引脚决定,如下图所示: PHY 地址一共有3 位,我们可以通过硬件电路设置 PHYAD[2:0] 引脚为上拉或者下拉,即分配为高低电平, 0 1 ,从而表示不同的地址。
         
          领航者开发板上的以太网 PHY 芯片 PHYAD2 接上拉电阻, PHYAD1 PHYAD0
接下拉电阻,因此 PHY 地址为 5’h04

3.3硬件设计

         以太网的数据传输离不开以太网 PHY (物理层)芯片的支持,物理层定义了数据发送与接收所需要的电信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。

         YT8531 是一个千兆以太网物理层收发器,支持 1000/100/10Mbps 通信速率,该芯片内部的参数可以通过 MDIO 接口进行配置。原理图中的ETH_MDC和ETH_MDIO引脚均连接了上拉电阻,在空闲状态下,当 FPAG控制ETH_MDIO引脚输出高阻状态时,ETH_MDIO 会被上拉至高电平。

3.4复位

          YT8531 芯片复位后, PHY 内部寄存器的数据会恢复默认的状态,并且重新开始和 MAC 进行自协商。YT8531 支持两种复位方式,一种是硬件复位,另外一种是软件复位。硬件复位时通过 PHY_RST_N 引脚实现对 PHY 芯片的复位,当 ETH_RST_N 引脚持续 10ms 的低电平时,即可实现对 PHY 芯片的复位。软件复位通过向寄存器地址 0x00 Bit[15] 写入 1 进行复位,并且在完成复位后,该位会自动清零。  

四.实验任务

       本节实验任务是使用领航者 ZYNQ 开发板上的以太网接口,完成 MDIO 接口的读写测试实验。板载的触摸按键(TPAD )控制 MDIO 接口进行软复位,并通过两个 LED 灯实时指示当前网口的连接速度。
        当 LED0 灯亮的时候,表示当前的网口速率为 10Mbps ;当 LED1 亮的时候,表示当前网口的速率为100Mbps;当两个 LED 都亮的时候,表示当前网口的速率为 1000Mbps ;当两个 LED 灯都熄灭时,说明当前网络自协商失败,硬件或者网络存在异常。

五.系统框图设计

       MDIO_dri模块:读数据时,根据MDIO_ctrl模块发来的寄存器地址,读取指定寄存器里面的数据,并将读取到的数据和读应答信号反馈给MDIO_dri模块;

                                 写数据时,根据MDIO_ctrl模块发来的寄存器地址和数值,将该数据写入指定寄存器中。

      MDIO_ctrl模块:接收MDIO_dri模块读取到的数据,指定MDIO_dri模块读/写数据的地址和数值。

六.代码解读

6.1MDIO_dri模块 

           首先根据MDIO接口通信帧格式,我们可以画出状态转换图。

          st_idle:当触发信号未来临时,处于空闲状态,既不读数据也不写数据。

          st_pre:触发信号来临后,写入32位前导码。

          st_start:前导码写入完毕后,写入开始信号还有读写使能信号。

          st_addr:开始信号写入完毕后,写入phy器件地址,以及该器件地址的寄存器地址。

          st_wr_data:当地址写完后,如果为写命令,则进行写操作。

           st_rd_data:当地址写完后,如果为读命令,则进行读操作。

     因为dri_clk<=12.5Mhz,这里将dri_clk设置为12.5Mhz,原理同I2C中一样。 

        PHY_MDC时钟采用对dri_clk时钟二分频之后的时钟,即12.5MHZ/2=6.25MHZ.

       空闲状态时,将MDIO双向数据线拉高至高阻态。若来激励信号,则将后续读写操作用到的:读写控制位,地址,数值先暂存起来方便后续使用,同时将phy应答信号拉高,表示未应答。

       写前导码状态:因为phy要进入写数据操作,故mdio_dir拉高,进入写前导码环节,因为 PHY_MDC时dri_clk的二分频,因此两个dri_clk才能写一个数据,32个前导码需要64个dri_clk,因此cnt计数范围为0~63.

         写开始信号和读写使能信号,因为MDIO进行写数据操作时,是在PHY_MDC上升沿时采集数据,那么为保证数据的稳定传输,MAC MDC 的下降沿将数据更新至 MDIO 引脚。因此就需要在cnt=1,3,5时更新数据。

          写地址状态:依次写入PHY的器件地址还有PHY中的指定寄存器地址。

         写数据状态:依次将数据写入指定寄存器中,当数据写完后将mdio_dir拉低,释放总线,至此,写数据操作完成,op_done=1。注意:st_done代表一次状态转换操作完成,op_done代表读操作或者写操作完成。

                读数据状态:首先phy发出读应答信号,然后依次发送所读数据,这里更新数据是在2,4,6,..时,因为MDIO 数据在 MDC 时钟的下降沿采集,因此 MAC MDC 时钟的上升沿更新数据。

 6.2MDIO_ctrl模块

          因为soft_rst_trig信号连接的时触摸复位按键,这是个非同步信号,与dri_clk不同步.这里我们需要捕捉它的上升沿变,因此需要打三拍。得到pos_rst_trig信号。

         因为本实验是定时读取以太网的连接状态,所以这里是每间隔80ms读取以太网的连接状态。因为dri_clk=12.5MHZ,Tclk=80ns,1000000x80ns=80ms。 

              这里为什么没有在pos_rst_trig=1时,就进行复位操作。这是因为该实验想用到软复位信号,而软复位信号是rst_trig_flag。故通过触摸复位控制软复位信号,在通过软复位信号对MDIO进行复位操作。参考3.4。

               op_exec:启动状态机运转;

               op_rh_wl:低电平代表写操作;

               op_addr:代表指定phy中的基本控制寄存器,因为该寄存器地址为0x00.

                op_wr_data:1001_0001_0100_0000;15位选择PHY复位,13位选择了通信速度为1000Mb/s,11位表示打开自动协商使能,8位表示选择全双工模式。因此就将以上数据全部写入PHY中的基本控制寄存器中。

自协商:

          当我们给网卡接入网线的时候, PHY 芯片不断发出脉冲信号来检测对端是否有设备,它们通过标准的“语言”交流,互相协商并确定连接速度、双工模式、是否采用流控等。通常情况下,协商的结果是两个设备中能同时支持的最大速度和最好的双工模式。这个技术被称为 Auto Negotiation,即自协商。

          表示以上软复位操作完成,恢复到非复位状态。

           表示80ms计时完成,接着获取以太网连接状态。

           op_exec:启动状态机运转,

           op_rh_wl:高电平表示进行读操作 ,

            op_addr:表示从PHY中的基本状态寄存器中读取数值。

        以上读操作完成,PHY给读有效应答信号,并且处于读基本状态寄存器。

         跳转到d0 ,并且判断读取到基本状态寄存器中的5位和2位,若都为1,则代表以太网自协商完成并且链接建立完成。

         

           接着回到d0,开始读下一个寄存器。

           op_rh_wl:读操作,

           op_addr:指定读取PHY中特定状态寄存器里面的值。

             当PHY反馈有效读响应信号,并且读下一个寄存器信号为1时,表示当前正在读PHY中特定状态寄存器。

          根据从PHY中特定状态寄存器读取的值,将led赋予不同的值。

七.板级验证

7.1通信速度为1000M/s时,LED0和LED1全亮

 7.2通信速度为100M/s时,LED1亮,LED0灭

7.2通信速度为10M/s时,LED0亮,LED1灭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3267211.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot中使用监听器

1.定义一个事件 /*** 定义事件* author hrui* date 2024/7/25 12:46*/ public class CustomEvent extends ApplicationEvent {private String message;public CustomEvent(Object source, String message) {super(source);this.message message;}public String getMessage() …

打包Linux的deb包

打包Linux的deb包 需事先准备 软件打包依赖 1. sudo apt update 2.sudo apt-get install dh-make build-essential devscripts debhelper 3.所需打包的源码包 准备打包目录 创建一个构建 deb 包的目录&#xff0c;目录以 包名-版本号 命名&#xff0c;如 testtest-pc:~/桌面$ …

PostgreSQL 数据库 安装

1、官网下载 起源与发展&#xff1a;PostgreSQL最初起源于加州大学伯克利分校的Postgres项目&#xff0c;该项目始于1986年&#xff0c;并一直演进到1994年。在1995年&#xff0c;Postgres项目增加了SQL翻译程序&#xff0c;并更名为Postgres95。随后&#xff0c;在1996年&…

【教程向】pyside2环境搭建以及快速上手

一、环境搭建 下载地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 推荐使用的版本&#xff1a; Anaconda3-2020.02-Windows-x86_64.exe python3.6以上&#xff0c;好像最新的python也不太支持&#xff0c;所以推荐给的这个版本 安装pyside2 pip i…

鸿蒙应用框架开发【多HAP】程序框架

多HAP 介绍 本示例展示多HAP开发&#xff0c;简单介绍了多HAP的使用场景&#xff0c;应用包含了一个entry HAP和两个feature HAP&#xff0c;两个feature HAP分别提供了音频和视频播放组件&#xff0c;entry中使用了音频和视频播放组件。 三个模块需要安装三个hap包&#xff…

昇思25天学习打卡营第22天|CycleGAN图像风格迁移互换

相关知识 CycleGAN 循环生成网络&#xff0c;实现了在没有配对示例的情况下将图像从源域X转换到目标域Y的方法&#xff0c;应用于域迁移&#xff0c;也就是图像风格迁移。上章介绍了可以完成图像翻译任务的Pix2Pix&#xff0c;但是Pix2Pix的数据必须是成对的。CycleGAN中只需…

【计算机网络】静态路由实验

一&#xff1a;实验目的 1&#xff1a;掌握通过静态路由方法实现网络的连通性。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS-C服务器、网线、Windows 2019/2003操作系统的计算机等。 软件&#xff1a;记事本、WireShark、Chrome浏览器等。 三&#xff1a;实验方…

从零开始:在linux系统安装MongoDB数据完整指南 新手常用命令

1 前言 MongoDB 是为快速开发互联网应用而设计的数据库系统。MongoDB 的设计目标是极简、灵活、作为 Web 应用栈的一部分。MongoDB 的数据模型是面向文档的&#xff0c;所谓文档是一种类似于json的结构。 官网教程&#xff1a;https://www.mongodb.com/docs/manual/ 2 安装部…

【专题】逻辑代数基础

1. 基本概念 逻辑&#xff1a;事物间的因果关系。 逻辑运算&#xff1a;逻辑状态按照指定的某种因果关系继续推理的过程。 逻辑代数&#xff1a;描述客观事物逻辑关系的数学方法&#xff0c;又称布尔代数。 逻辑变量&#xff1a;逻辑代数中的变量。 二值逻辑中&#xff0c;…

解决win10家庭版找不到Hyper-V的问题

Windows 10家庭版在默认的“启用或关闭Windows功能”中不直接包含Hyper-V选项&#xff0c;但可以通过手动步骤来启用它。以下是详细的解决方案&#xff1a; 步骤一&#xff1a;检查电脑是否支持Hyper-V 首先&#xff0c;确认电脑硬件是否支持Hyper-V功能。 打开Windows Powe…

一文弄懂 Nginx

文章目录 1.第⼀部分&#xff1a;Nginx基础回顾1.1 正向代理&#xff08;Forward Proxy&#xff09;1.2 反向代理&#xff08;Reverse Proxy&#xff09;1.3 Nginx的特点 2. 第⼆部分&#xff1a;Nginx核⼼配置⽂件解读2.1 全局块2.2 events块2.3 http块2.4 示例配置 全局块配置…

libevent入门篇

文章目录 概述下载编译目录samplehello-world初始化创建监听器处理连接处理信号 build 小结 概述 libevent 和 libev 都是由 c 实现的异步事件库&#xff1b;注册异步事件&#xff0c;检测异步事件&#xff0c;根据事件的触发先 后顺序&#xff0c;调用相对应回调函数处理事件…

【Test】一篇文章带你深入详细了解 QWidget 的属性

文章目录 1. 初步认识控件 QWidget2. QWidget2.1 enable 属性2.2 geometry 属性2.3 WindowFrame 的影响2.4 windowTitle 属性2.5 windowIcon 属性2.6 使用 qrc 文件管理资源2.7 QWidget 控件的 windowOpacity 属性2.8 QWidget 的 cursor 属性2.9 QWidget 的 font 属性2.10 QWid…

项目管理中的常用工件(二):可视化工件

项目管理中的常用工件&#xff08;二&#xff09;&#xff1a;可视化工件 亲和图&#xff08;affinity diagram&#xff09;因果图&#xff08;cause-and-effect diagram&#xff09;直方图&#xff08;histogram&#xff09;流程图&#xff08;flowchart&#xff09;散点图&am…

【反证法】932. 漂亮数组

本文涉及知识点 分治 数学 反证法 LeetCode932. 漂亮数组 如果长度为 n 的数组 nums 满足下述条件&#xff0c;则认为该数组是一个 漂亮数组 &#xff1a; nums 是由范围 [1, n] 的整数组成的一个排列。 对于每个 0 < i < j < n &#xff0c;均不存在下标 k&#x…

Sip for Mac:强大的屏幕取色软件

Sip for Mac是一款功能强大的屏幕取色工具软件&#xff0c;专为设计师、开发者和创作者打造。这款软件以其精准的取色功能和丰富的颜色管理选项而备受好评。 Sip的核心功能是提供多种取色工具&#xff0c;包括拾色器、取色板和屏幕取色等&#xff0c;使用户能够轻松地从屏幕上…

掌握AJAX技术:从基础到实战

文章目录 **引言****1. 什么是AJAX&#xff1f;****2. AJAX的工作原理**AJAX 示例使用 Fetch API 实现 AJAX **3. 如何在项目中使用AJAX****4. 处理AJAX请求的常见问题****5. AJAX与JSON的结合****6. 使用AJAX框架和库****7. 实战&#xff1a;创建一个动态表单****8. AJAX中的事…

PyQt5 + selenium,自动票务工具,演唱会门票,学习使用

PyQt5 selenium&#xff1b;在damai工具的基础上加入了UI界面&#xff0c;并将应用做了打包工作&#xff0c;主要是方便不会/不想折腾环境的用户使用&#xff0c;抢票的核心代码来自由于原作者不再维护&#xff0c;自己修改了部分代码。 安装教程 解压安装包到任意位置&…

基于Cobbler实现多版本系统批量部署

一、实验题目 基于Cobbler实现多版本系统批量部署 二、实验目的 通过Cobbler&#xff0c;实验旨在实现无需人工干预即可自动安装多个版本的操作系统。这可以大大提高机房设备或服务器集群的部署效率&#xff0c;减少人力成本和操作错误。 三、实验环境 centos7.9并安装Cob…