MDIO 接口是以太网中MAC 层和 PHY 的控制/状态 的配置接口。 接口只是需要2根连线,MDIO, MDC 。 用来对PHY 芯片等物理层信息进行操作管理。
MDIO 定义:
MDIO(Management Data Input/Output) 接口是由MDIO,MDC 2根线组成的同步串行半双工接口。 用于对PHY 芯片的状态读取,和控制信息的写入。
管理数据输入/输出 (MDIO),也称为串行管理接口 Serial Management Interface (SMI) 或媒体独立接口管理 Media Independent Interface Management (MIIM),是在 IEEE 802.3 标准以太网系列定义的串行总线。
基本的拓扑结构为:
图1
图1 :中显示的是最为普遍的以太网PHY 芯片的连接方式。 通常是以太网PHY 芯片连接FPGA, 或者连接CPU等。
MDIO :为双向的数据线,可以从MAC发送到PHY , 也可以从PHY 发送数据到MAC。
MDC :为时钟线,从MAC层发出, PHY 芯片接收这个信号。
MDIO线上的数据和MDC 上的时钟同步, 一般情况下, MDC 的最高时钟为2.5M。
在硬件设计中(原理图)会为每个以太网PHY 芯片规定一个phy_addr ,用于MAC层和PHY 芯片进行通讯。
图2
一对MDIO,MDC 接口可以连接一个以太网PHY ,或者连接多个以太网PHY ,由于协议中的地址位宽为5-bit, 所以最多连接31 个 物理外设(PHY )。在硬件设计中, 会为每个以太网PHY 片分配一个phy_addr ,这样可以保证MAC 和PHY 之间的通讯是可以区分的。
MDIO 协议用途:
MDIO串行通讯,主要用于MAC层(主机端)发送以太网PHY 相关的命令, 当然,也可以读取以太网PHY 的一些状态。 主要应用为:
- 读取以太网PHY 芯片型号,确定哪一个厂家,什么型号的PHY 芯片,用于上层(软件等)根据不同的芯片,配置相关的驱动。一般来说, 所有的以太网PHY 都会遵循MDIO通讯协议,在PHY 芯片的寄存器地址2,3 保存PHY 的厂家,型号, 版本等信息
- 配置以太网PHY 的工作模式, 主要是通过写入数据到PHY 芯片寄存器地址0,来控制PHY 芯片的工作模式, 包括reset, auto-negotiation,10M/100M/1000M,全双工/半双工等。
- 读取当前以太网PHY 的工作状态,地址0x11 。包括当前以太网是否链接, 当前的以太网速度等等。
- 产生中断通知MAC, MAC层接收到中断后, 可以查询中断状态寄存器, 看看到底发生什么样的事件,引起PHY 中断信号。包括断线,连接速度改变等。
- 当然,不同的以太网芯片还有很多方面的控制,和状态信息,不同的PHY 芯片有所不同。
图3
MDIO 数据协议:
MDIO 协议在 IEEE 802.3u Clause 22 和 Clause 45 中都有定义, 最普遍的是使用Clause (条款)22。 Clause 45 在兼容22的基础上,有所扩展。(除了兼容Clause 22 的读,写操作外, 又增加了其他命令)。Clause45有4种操作码(OpCode),比特“00”表示设置当前寄存器地址,比特“01”表示写当前寄存器。比特“10”表示读当前寄存器,比特“11”表示读当前寄存器读完后把当前寄存器的值加1,用于顺序读。
这里我们主要是介绍Clause 22:
MDIO数据协议格式:
图4
MDIO 帧结构:
命令/状态 | CMD/STATE | 值(value) | 行为(behavior) |
前置 | Preamble
前导字 |
32个1
0xffff,32’hffff |
32 Contiguous Logical 1’s Sent by the MAC on MDIO,
along with 32 Corresponding Cycles on MDC. This provides synchronization for the PHY. MAC发送32个连续的1作为同步信号。 |
帧启动 | start of frame | 01 | Start of Frame 帧起始标志 |
读/写 | OpCode | 10 或 01 | Operation Code. Read: 10 Write: 01 |
Phy地址 | PHYAD | 0-31 | PHY芯片地址, 只有发送的地址数据与硬件设置的数据一致,
该芯片才会被选中,0地址一般作为广播地址。 |
寄存器地址 | REGAD | 0-31 | Register Address.
This is a 5-bit field that sets which of the 32 registers of the PHY this operation refers to. PHY芯片内部总共32个寄存器,地址编码0-31 |
反转 | TA | Z0–读 写 | Turnaround. This is a 2-bit-ime spacing between the register
address and the data field of a frame to avoid contention during a read transaction. For a read transaction, both the STA and the PHY remain in a high-impedance state for the first bit time of the turnaround. The PHY drives a zero bit during the second bit time of the turnaround of a read transaction 读:MAC端的MDIO此刻起到帧结束一直为高阻态,PHY的MDIO 改为输出 写:始终由MAC的MDIO控制,整个帧可以认为都是 写的过程。 |
数据 | DATA | These are the 16 bits of data. 16bits数据 | |
空闲 | IDLE | Idle Condition. Not truly part of the management frame.
This is a high impedance state. Electrically, the PHY’s pull-up resistor will pull the MDIO line to a logical ‘1’. 空闲可以认为不是帧的部分,空闲时MAC的MDIO为高阻, 由于有上拉电阻,总线上为高电平,PHY的MDIO为输入 |
1)MDIO的数据协议格式为: Preamble + Start of Frame + OpCode + PHYAD + REGAD + TA + DATA + IDLE
- Preamble: 在读写操作之前, 需要在MDC时钟控制下 , MDIO 连续输出 32个1(由MAC发出)。
- Start of Frame: 规定的控制字, 代表数据包的开始,为 2-bit数据 ,该数据固定为01(由MAC发出)。
- OpCode:操作码,表示接下来的操作类型,为 2-bit数据 。其中 2’b01 代表MAC写数据到PHY的操作, 2’b10代表从PHY中读取数据到MAC的操作。
- PHYAD:以太网PHY地址(5-bit), 表示MAC要和哪个以太网PHY进行通讯(由MAC 发出)。
- REGAD:PHY 芯片中的寄存器地址( 5-bit),当选择PHY芯片后(phy_addr) , 具体要和芯片中的哪个寄存器操作(由MAC发出)。
- TA: MDIO 数据线上的input 、output 转换位 ( 2-bit)。读操作时, 为2’bz0; 写操作时, 为 2’b10 (由MAC发出)。
- DATA:MAC 写入PHY的数据(由MAC发出),或者是从PHY读出的数据 (由PHY发出),数据长度为16-bit。
- IDLE:空闲状态, 没有强制规定多少bit, 一般来说需要至少 1 bit。IDLE期间, MAC和PHY都处于高阻状态。
2)MDIO读操作
读操作的OpCode 为 10。具体操作方式见图5。
图5
图5中显示的是MDIO中的读操作数据格式,其中: MDC 只由MAC端发出;MDIO(STA) 由MAC端发出,PHY接收;MDIO(PHY) 由PHY发出,MAC接收。
当MAC发送数据时, 一般需要在MDC时钟的下降沿后发送,(可以允许延迟一定的时间, 但是要保证在MDC 时钟上升沿到来之前处于稳定状态,具体的时间参数,可以参照PHY的芯片手册)。
当MAC接收数据时, 使用MDC 时钟的下降沿采样MDIO(PHY) 上的数据。
3)MDIO写操作
写操作的OpCode 为 01。具体操作方式见图6。
图6
从图6中可以看出, 在MAC写数据到PHY的操作中(写操作), MAC 层发送MDC 时钟及MDIO(STA)数据。 没有数据从PHY芯片发出。
所有的数据都是MAC层在MDC 时钟下降沿之后发送, PHY芯片端在MDC时钟上升沿时接收。
原理图连接实例:
以FII-PRX100-D开发板为例:
图7
从图7中可以看出, FII-PRX100-D开发板使用的是RTL8211E (48-pin)的以太网PHY芯片。其中pin 13,34,35 用来控制以太网PHY芯片的物理地址。
图8
图9
从图8, 图9中可以看出,物理地址的连接为 {phy_AD2, phy_AD1, phy_AD0 } = 3’b001。
图10
图10 中可以看出, RTL8211E 芯片可以配置7个物理地址 PHYAD[2:0] ,其地址范伟为 1 – 7 。 地址0 用于特殊用途(广播操作) 。如果MAC层发送的地址为5’b0_0000,所有的PHY都需要响应这个操作(广播)。
RTL8211E MDIO 时序:
图11
具体关于MDIO通讯的讲解, 请参照视频讲解。