MDC/MDIO通信时序图

MDC/MDIO接口定义

SMI:串行管理接口(Serial Management Interface),也被称作MII管理接口(MII Management Interface),包括MDC和MDIO两条信号线。MDIO是一个PHY的管理接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC为MDIO提供时钟。

MDIO原本是为MII总线接口定义的,MII用于连接MAC和PHY,包含两种信号接口:

1. 一个数据接口用于MAC和PHY之间接收和发送以太网帧数据。

2. 一个PHY管理接口,即MDIO,用于读写每个PHY的控制寄存器和状态寄存器,以达到控制PHY行为和监控PHY状态的目的。

MDIO是双向的,只支持一个MAC连接最多32个PHY的连接方式,且MAC作为master,PHY作为slave。在写PHY寄存器的时候,由MAC驱动MDIO向PHY写入数据;在读PHY寄存器时,前半段由MAC驱动发送寄存器地址,后半段由PHY驱动回复寄存器的值。

MDC要求由MAC输出,是非周期性的,即不要求提供固定频率的时钟,对于PHY芯片则作为输入,以在上升沿触发MDIO的读写。MDC的时钟频率可以是DC-2.5MHz,即最小的时钟周期为400ns。MDC支持的最大时钟频率根据具体PHY决定。

MDC/MDIO时序图

读写的时序如下图所示

MDC/MDIO通信时序图_第1张图片

Preamble+Start:32bits的前导码以及2bit的开始位。

OP Code:2bits的操作码,10表示读,01表示写。

PHYAD:5bits的PHY地址,一般PHY地址从0开始顺序编号,例如6口switch中PHY地址为0-5。

REGAD:5bits的寄存器地址,即要读或写的寄存器。

Turn Around:2bits的TA,在读命令中,MDIO在此时由MAC驱动改为PHY驱动,并等待一个时钟周期准备发送数据。在写命令中,不需要MDIO方向发生变化,则只是等待两个时钟周期准备写入数据。

Data:16bits数据,在读命令中,PHY芯片将读到的对应PHYAD的REGAD寄存器的数据写到Data中,在写命令中,MAC将要写入对应PHYAD的REGAD寄存器的值写入Data中。

Idle:空闲状态,此时MDIO无源驱动,处高阻状态,但一般用上拉电阻使其处在高电平,上拉电阻一般为1.5K。

(1)MAC读取PHY的寄存器

MDC/MDIO通信时序图_第2张图片

(2)MAC向PHY的寄存器写入数据

MDC/MDIO通信时序图_第3张图片

 需要注意的是,为了保证PHY能准确采样,当MAC向MDIO写数据的时候,需要在MDC的上升沿之前就把数据写到MDIO上,要求等待10ns以上再发出一个MDC的上升沿。而为了保证MAC能准确采样,当PHY向MDIO写数据时,这个clock-to-data的delay时间范围可以是0-300ns(小于上面提到的400ns)。这个规定使接口的实现变得简单,但一定程度上限制了总线带宽。

读写波形示例

(A) 向PHY地址为00001 中的寄存器地址为01001寄存器写入数据 0x0264

MDC/MDIO通信时序图_第4张图片

如上图所示,MDIO波形为 :0101  00001  01001  10  0000001001100100

(B)然后现在去读这个写入的数据是否正确

MDC/MDIO通信时序图_第5张图片

如上图所示,MDIO波形为 :0110  00001  01001  z0  0000001001100100,说明是正确的

还有值得一提的是,当MDC/MDIO需要中转时,有可能会有其他处理,对比地址等,这样会占用一定时间,导致把数据写入到MDIO后,时钟的上升沿已经过了,造成通信失败,解决的办法是:通过中转芯片提升MDC的时钟频率,加快读写,在主MAC的MDC上升沿之前把数据写入到主MDIO中。如下图所示:

MDC/MDIO通信时序图_第6张图片

最后,祝各位生活愉快,大家有什么疑问可以随时咨询我。

你可能感兴趣的:(通信接口,通信,MDC/MDIO,读写时序图,SMI/MII)