02、MDIO Interface Clause 45与Clause 22详解
以太网MDIO接口的功能说明
MDIO(管理数据输入输出)接口的主要作用是配置网络物理层芯片(PHY)的工作状态,具体包括:
自动协商功能
通过读写PHY芯片的内部寄存器,自动匹配网络设备间的通信参数(如速率、双工模式等)。PHY芯片识别
通过地址识别确定连接的PHY芯片型号,确保后续配置操作针对正确的设备。
MDIO数据帧类型分为两种:
Clause22:用于百兆和千兆以太网设备
Clause45:专为千兆以上高速以太网设计
简单来说,MDIO就像一个"配置助手",负责根据网络需求自动设置PHY芯片的工作参数,并通过不同协议(Clause22/45)适配不同速度的网络设备。
一、Clause 22
Clause 22简介
Clause 22是最基础的MDIO通信协议,也叫MDC/MDIO协议。它通过两根线工作:
MDC线:提供时钟信号
MDIO线:传输数据
主要特点
速度低:最快25MHz,实际常用速度为2.5MHz(即2.5Mbps)
设备数量:最多可连接32个网络物理层芯片(PHY)
简单通用:电路设计简单,成本低,被大多数以太网设备广泛使用
优势
✅ 经过长期验证,稳定性好,适用于传统网络设备
✅ 硬件实现容易,生产成本比新协议更低
二、Clause 45
Clause 45是IEEE 802.3an标准推出的新协议,主要特点包括:
四线通信:使用MDC、MDIO两根基础信号线,以及扩展的数据和时钟信号线。
高速传输:数据传输速度最高可达1 GHz,满足高带宽需求。
功能增强:支持远程设备管理、复杂控制等高级操作。
多设备支持:可管理最多128个物理设备(PHY),适合大规模网络部署。
优势:
速度快:适合需要高速传输的场景,如数据中心或高清视频传输。
扩展性强:能同时管理大量设备,特别适合大型网络或数据中心环境。
简单来说,它就是一款更快、更智能的通信协议,能高效管理更多设备并传输更大数据量。
三、Clause 22 vs. Clause 45
- MDIO(管理数据输入输出)是一种两线制的通信总线,专门用于配置网络设备中的物理层芯片(PHY芯片)。它的运作方式如下:
线缆构成
一条是数据线(MDIO),负责双向收发数据
另一条是时钟线(MDC),为数据传输提供同步时钟,速度通常在几兆赫兹(不同芯片可能有差异)
数据传输方式
数据传输严格跟随MDC时钟信号同步进行,就像时钟滴答声控制数据的发送和接收节奏。协议演变
早期使用Clause22协议,但它的寄存器数量有限
后来升级为Clause45协议,增加了更多寄存器空间,同时能兼容旧版Clause22设备
简单来说,MDIO就像一条双车道数据公路,其中一条车道负责运输数据,另一条车道提供导航信号。而协议的升级则像是拓宽了公路并保留了旧路标识,让新老车辆都能通行。

四、Clause 22数据帧格式

STA:Station ManagementMMD:MDIO Managed DevicePRE:帧前导码,为32个连续“1”比特。ST:帧开始标志,Clause22的开始标志为比特“01”。OP:操作码,CL22中比特“10”表示此帧为一读操作帧,比特“01”表示此帧为一写操作帧。PHYAD:MMD的物理地址,5个比特,每个MMD都把自己的地址与这5个比特进行比较,若匹配则响应后面的操作,若不匹配,则忽略掉后面的操作。REGAD:用来选MMD的32个寄存器中的某个寄存器的地址。TA:状态转换域,若为读操作,则第一比特时MDIO为高阻态,第二比特时由MMD使MDIO置“0”。若为写操作,则MDIO仍由STA控制,连续输出“10”两个比特。DATA:帧的寄存器的数据域,16比特,若为读操作,则为MMD送到STA的数据,若为写操作,则为STA送到MMD数据。IDLE:帧结束后的空闲状态,此时MDIO无源驱动,处高阻状态。
clause22里面的PHYAD 通常由PHY设备的硬件配置去决定的,值大小为0-31.注意PHYAD 与 PHY ID不要弄混了。 其中phy_addr可以通过ethtool eth0获取PHYAD值:
五、Clause 45数据帧格式

STA:Station ManagementMMD:MDIO Managed DevicePRE:帧前导码,为32个连续“1”比特。ST:帧开始标志, 为了区别CL22,Clause45的开始标志为比特“00”。OP:操作码,Clause45有4种操作码,比特“00”表示设置当前寄存器地址,比特“01”表示写当前寄存器。比特“11”表示读当前寄存器,比特“11”表示读当前寄存器读完后把当前寄存器的值加1,用于顺序读。PRTAD:Port Address,端口地址, 也称物理地址。DEVAD:器件地址,CL45新增概念,各值与器件对应如下。REGAD:用来选MMD的65536个寄存器中的某个寄存器的地址。TA:状态转换域,若为读操作,则第一比特时MDIO为高阻态,第二比特时由MMD使MDIO置“0”。若为写操作,则MDIO仍由STA控制,连续输出“10”两个比特。DATA:帧的寄存器的数据域,16比特,若为读操作,则为MMD送到STA的数据,若为写操作,则为STA送到MMD数据。IDLE:帧结束后的空闲状态,此时MDIO无源驱动,处高阻状态。
六、如何通过Clause 22 方式访问Clause 45

这种间接的访问方式,其实通过 REG13 和 REG14的配合访问,类似C语言的指针。

例如访问:device1, reg2的内容 第一步,设置 REG13,其中 bit15:14 = 0:0 表示这是地址,device对应 device=1 第二步,把需要操作的寄存器reg=2的地址写入 REG14 第三步,设置 REG13,其中 0x4000 表示 bit 15:14 = 0:1 表示这个是数据,并且地址不增加。 第四步,直接读取REG14,相当于间接读了REG2的内容,就是REG2的内容了。
device = 1;
reg = 2;
mdiobus_write(bus, addr, 0xd, device)
mdiobus_write(bus, addr, 0xe, reg)
mdiobus_write(bus, addr, 0xd, 0x4000 + device)
phy_id[i] = mdiobus_read(bus, addr, 0x0e) & 0xffff;2
3
4
5
6