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。 

         但是仿真时设置TIME_CNT=1000.

     

        这里为什么没有在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灭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值