一、MDC/MDIO简介

MDC/MDIO,英文全称Management Data Clock和Management Data Input/Output,是以太网标准IEEE802.3中专门用于MAC和PYH之间管理的串行接口总线,其中MDC是总线时钟信号,MDIO为数据线。该接口主要用于MAC控制器对PYH层的状态读取和设置、获取链路状态,控制物理层协商等操作。该接口只负责控制信号不会被数据信号所影响,MDIO总线连接如下图。
4ee5e976e8924b969008582416d84c30~noop.image?_iz=58558&from=article.jpg



二、MDIO接口定义
1.MDC/MDIO信号
MDIO接口是一种半双工的串行中线,由时钟信号线MDC和数据信号线MDIO组成。MDIO是双向信号,MAC和PYH均可对其进行控制,写操作时由MAC进行控制,读操作时由PHY进行控制。数据传输时高位在前,低位在后。
在IEEE802.3协议中,把MDIO接口数据帧分为两种,一种是Clause22,另一种是Clause45。前者主要用于百兆千兆以太网,后者用于千兆以上的以太网。下面主要介绍Clause22格式。
下图为实际使用中的MDIO波形。
3624adb1e59a48ae99b76c8bf6b0a246~noop.image?_iz=58558&from=article.jpg

2.MDIO帧格式-Clause22
8620e6fb503b41838331ba9f32876543~noop.image?_iz=58558&from=article.jpg

MDIO-Clause22帧格式如上图,依次为开始标志、操作码、PHY地址、寄存器地址,翻转标志位和数据。
开启标志位:长度2Bits,必须为01,标志该数据帧开始。
操作码:长度2Bits,10标志为读操作,01标志为写操作。
PHY地址:长度5Bits,表示所访问的PHY地址,一个MDIO总线最大支持32个PHY。
寄存器地址:长度5Bits,表示所访问的寄存器的地址,共计32个寄存器。IEEE802.3协议中对前16个寄存器进行了定义,其中比较常用的如下表。其余为PHY芯片自定寄存器。
017988c192a14bd28bc88fde66491e90~noop.image?_iz=58558&from=article.jpg

翻转标志位:长度2Bits,固定为10。该标志位为PHY芯片地址传输和数据传输处理预留处理时间,同时防止总线存在冲突。
数据:长度16Bits,操作符为读操作时,该数据为对于地址PHY的特定寄存器的数值;操作符为写时,该数据为对该寄存器写入的数值。

三、MDIO接口实例分析
测试设备为IMX6,PHY芯片为LAN8720A,路由器支持10M/100M,目标是读取PHY1寄存器4(自动协商通告寄存器)的数据。
06155b5e74c04440aa4e8e6bad0fb078~noop.image?_iz=58558&from=article.jpg

依次从左边开始分析,首先总线由MAC拉低一个时钟后拉高,标志该数据帧正式开始。其次操作符为10,对应为读操作,PHY地址0x01,寄存器地址0x04,翻转标志位,PYH返回数据为0x05E1。
此时已经获取到所需要寄存器的状态,查看LAN8720A的寄存器表,可读出当前协商状态为无远程状态,对称停止,支持TX全双工,支持TX,支持10Mbps全双工,支持10Mbps,选择器位域IEEE802.3,因此协商结果和实际路由器工作状态一致。