应用框图
MDIO接口,是Management Data Input/Output的缩写。MDIO接口包含在IEEE802.3协议中,是专用于以太PHY的管理的串行总线接口。
图1 MDIO应用框图
图1为MDIO应用框图。STA(Station Management)为主控设备,STA设备通过MDIO接口与PHY通信。PHY为从设备,一个STA根据地址位宽的大小,最多管理32个PHY。MDC信号由STA控制,MDIO信号根据通信方式的不同可以由STA或者PHY接管控制。通常MDIO会通过电阻上拉至接口电源。
接口信号及时序说明
如图2所示,MDIO接口包含两根信号线,一根时钟线,一根数据线。
图2 MDIO接口信号
MDC为MDIO接口时钟信号,来自STA,用来对MDIO的数据采样。MDC可以是非周期性信号或者周期性信号。协议对MDC的高低电平的最大宽度并没有限制,仅限制了MDC的最小高低电平宽度不能小于160ns,最小周期不能小于400ns。这意味着MDC最高频率不能超过2.5MHz。
MDIO为MDIO接口数据信号,为双向信号,STA和PHY均可以接管。用来在PHY控制芯片和PHY芯片之间的传递控制和状态信息。
图2 和芯润德MDIO接口时序
协议对MDIO接口时序进行了定义。如图2所示,以MDC上升沿为基准。当MDIO由STA输出时,需要满足建立时间、保持时间均大于10ns。当MDIO由PHY输出时,需要满足输出延迟不超过20ns。
MDIO帧格式
MDIO有两种模式:俗称1G MDIO和XG MDIO。1G MDIO由IEEE 802.3 Clause22定义,主要应用于千兆/百兆的以太PHY;XG MDIO由IEEE 802.3 Clause45定义,主要用于千兆以上的以太PHY。下面以Clause22为例介绍MDIO帧格式,如图3所示。
图3 MDIO Clause22帧格式
IDLE:空闲域。无MDIO数据帧发送时,MDIO接口输出高阻(外部有上拉电阻,总线上看到的是高电平)。
PRE:Preamble,前导。每帧发送前,STA通过MDIO连续发送32个MDC周期的高电平,同时通过MDC输出32个时钟周期。前导的作用是为PHY建立同步提供时间。如果STA能够确定PHY可以接收管理帧,可以压缩前导的发送。
ST:2bit,Start of Frame。帧起始符,2’b01代表帧起始。
OP:2bit,操作码。2’b10代表读,2’b01代表写。
PHYAD:5bit,PHY地址。因此1个MDIO最多管理32个PHY。MDIO在访问PHY之前,需要提前知晓各个PHY的地址。
REGAD:5bit,寄存器地址。总共32个寄存器地址,协议对前16个寄存器地址进行了详细的定义。其中地址0为控制寄存器,地址1为状态寄存器,其他14个地址为扩展寄存器。
TA:2bit,Turnaround。TA是地址传输和数据传输转换时的空闲时间。因为读操作的时候,地址传输和数据传输控制方不同,设置2bit TA的目的就是为了防止MDIO总线上产生竞争。
读情形,TA第1bit,PHY和STA均释放总线控制输出高阻。TA第2bit,总线交由PHY控制,输出0,即读操作时TA为2‘bZ0(由于总线有上拉电阻存在,从总线上看到的依然是2’b10)。写情形,TA由STA输出2‘b10。
DATA:16bit,数据域。写操作的时候,STA用来发送写数据。读操作的时候,PHY用来发送读数据。
注:MDIO发送bit序为高比特先传。
下面为Clause45帧格式,如图4所示。
图4 MDIO Clause45帧格式
MDIO Clause45在Clause22基础上做了一些扩展,目的是为了访问更多的寄存器。Clause45帧格式如图4所示。相对于Clause22帧格式而言,Clause45做了如下修改:
1、ST由01修改为00
2、OP进行了重新定义。00:地址帧 01:写 11:读 10:增量读(Post-read-increment-address)
3、PHYAD修改名称为PRTAD,端口地址仍代表PHY地址
4、REGAD修改为DEVAD,Clause45将PHY内部子模块的地址进行细分,这些子模块用DEVAD寻址。子模块内部的寄存器则使用地址帧进行寻址。
Clause45的修改大大扩展了访问地址范围,但是由于地址和读写操作的分离,导致访问效率降低一半。为了解决该问题,Clause45新增了增量读模式,允许先发送一次地址帧,后续仅发送增量读操作。在每次读完成后,PHY会自动将地址移动到下一个相邻的寄存器地址,这样就能完成从指定地址开始顺序读取设备内部的寄存器,而无需重新发送地址帧,访问效率可以和Clause22相当。
M DIO 接口扩展方案
CPU的MDIO接口接到CPLD,CPLD再分别接每片PHY的MDIO接口,对于CPU来说是按正常标准的MDIO总线方式访问各片PHY(只是PHY的地址需要约定好),而CPLD采用透传的方式(PHY 地址数据除外,PHY地址数据由CPLD根据硬件设置发固定地址)对MDIO接口做有选择的转发处理。CPU作为主机,MDIO报文开始的时候,其CPU给什么数据,CPLD就透传什么数据给所有PHY,直到CPLD接收到完整的PHY地址后识别出当前是与哪片PHY通讯时,则仅与目标PHY通讯,同时停止与其他PHY的MDIO通讯。
硬件端:硬件将CPU的MDIO接口信号连接到CPLD管脚,CPLD再分别接到各个PHY的MDIO接口上,并且硬件上需要将所有PHY芯片的地址设置为一致,约定设为“11”。
CPLD端:CPU与CPLD约定好PHY地址映射关系。MDIO接口报文地址位宽5bit,考虑我们的实际使用情况,地址0-5作为CPU自用,地址6-31分配给CPLD做扩展,即地址6对应扩展第1片PHY,地址7对应扩展第2片PHY,以此类推。CPLD解析MDIO报文头,识别出地址后,连接到相应PHY的MDIO接口上,CPLD将报文划分为两个部分,广播区和隔离区,广播出去的MDIO报文能被各片PHY接收,区别只是通过PHY地址数据来判断对哪个PHY进行操作,CPLD会对报文中的地址信号进行判断,选通对应的时钟和数据,来对具体的PHY进行读写操作,未被访问的PHY相应的MDIO时钟信号拉低,若是写操作则数据拉低,读操作则数据不取用。
M DIO 接口扩展帧格式
广播区 隔离区
PRE(32bit) ST(2bit) OP(2bit) PHY地址(5bit) 寄存器地址(5bit) TA(2bit) DATA(16bit)
read 0xFFFFFFFF 2’b01 2’b10 CPLD下发给PHY芯片数据固定为00011,通过CPU给CPLD下发地址的高5bit来判断给哪个PHY 隔离区数据。 0xXX 2’bZ0 0xDDDD
write 0xFFFFFFFF 2’b01 2’b01 0xXX 2’b10 0xDDDD


