MDIO 接口(Management Data Input/Output Interface),最早在 IEEE 802.3 的第 22 卷定义,后来在第 45 卷又定义了增强版本的 MDIO,其主要被应用于以太网的 MAC 和 PHY 层之间,用于 MAC 层器件通过读写寄存器来实现对 PHY 层器件的操作与管理。
MDIO 接口包括两条线,MDIO 和 MDC,其中 MDIO 是双向数据线,而 MDC 是由 STA 驱动的时钟线。

STA(Station Management)为主控设备,比如 MCU、MAC、ONU 等。PHY 为从设备。一个 STA 最多管理 32 个 PHY。MDC 信号由 STA 控制,MDIO 信号根据通信方式的不同可以由 STA 或者 PHY 接管控制。通常 MDIO 会通过电阻上拉至接口电源。

MDC 为 MDIO 接口时钟信号,来自 STA,用来对 MDIO 的数据采样。MDC 可以是非周期性信号。协议对 MDC 的高低电平的最大宽度并没有限制,仅限制了 MDC 的最小高低电平宽度不能小于 160ns,最小周期不能小于 400ns。这意味着 MDC 最高频率不能超过 2.5MHz。
MDIO 为 MDIO 接口数据信号,为双向信号,STA 和 PHY 均可以接管。用来在 PHY 控制芯片和 PHY 芯片之间的传递控制和状态信息。MDIO 接口只是会在 MDC 时钟的上升沿进行采样,而并不在意 MDC 时钟的频率(类似于 I2C 接口)。当 MDIO 由 STA 输出时,需要满足建立时间、保持时间均大于 10ns。当 MDIO 由 PHY 输出时,需要满足输出延迟不超过 300ns。

读时序
通过 MAC 发送 PHY Address(芯片地址)及 Reg Address(芯片上寄存器的地址)来驱动 PHY 芯片,读取 PHY 芯片的这个指定地址上的值(即 Reg Data 部分),然后释放总线。

Pre: 信号头 共发送 1*32bit
Start: 开始 01
OP Code: 操作码 读为 10
PHY Add: 物理地址 共 5bit
Reg Add: 寄存器地址 共 5bit
TA: 翻转缓冲 第一位为 Z,第二位收到回读的 0
Reg Data: 回读来自寄存器的数据 回读期间 MAC 输出保持 Z,收到来自寄存器的 16bit 数据
写时序
在 MAC 直接发送总线上的数据(Reg Data),到指定的外部芯片地址 PHY Address 中的指定寄存器(Reg Address)中。

Pre: 信号头 共发送 1*32bit
Start: 开始 01
OP Code: 操作码 写为 01
PHY Add: 物理地址 共 5bit
Reg Add: 寄存器地址 共 5bit
TA: 翻转缓冲 发送 10
Reg Data: 回读来自寄存器的数据 回读期间 MAC 输出保持 Z,收到来自寄存器的 16bit 数据



