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 Management
MMD
:MDIO Managed Device
PRE
:帧前导码,为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 Management
MMD
:MDIO Managed Device
PRE
:帧前导码,为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