2. 管理接口协议基础与MDIO/I2C帧格式解析
在3.2T光模块中,管理接口是主机(交换机MAC/PHY或BMC)与模块内部管理控制器之间的“神经通道”。3.2T模块内部通常包含DSP、驱动器、TIA、激光器控制、TEC温控等多个子系统,主机需要实时读取温度、电压、偏置电流、告警标志,并下发配置与固件升级指令。这些操作全部依赖管理接口完成。本节聚焦两种最常用的物理层管理协议——MDIO与I2C,讲清它们在3.2T模块中的角色分工、帧结构与地址分配,并通过一次逻辑分析仪抓取实例,说明如何把总线上的电平变化还原为可读的事务。
一、MDIO与I2C在3.2T模块中的角色分工
MDIO(Management Data Input/Output)源自IEEE 802.3,是MAC与PHY之间的标准管理总线,采用两线制:MDC时钟由主机驱动,MDIO为双向数据线。它的帧结构固定、寻址空间为5位PHY地址加5位寄存器地址,单次事务开销小、时序确定,适合高频轮询链路状态和寄存器级配置。在3.2T模块中,MDIO常用于主机侧PHY/SerDes与模块管理寄存器之间的快速访问,尤其是需要与802.3管理寄存器模型对齐的场景。
I2C则是更通用的两线总线(SCL/SDA),支持多主多从、7位或10位地址,帧格式灵活,可承载任意长度的寄存器读写。3.2T光模块的MSA(多源协议)管理通常以I2C为主通道,映射到模块内部的EEPROM页和寄存器页,用于读取厂商信息、DDM实时参数、告警阈值以及执行固件下载。简单说:MDIO偏“链路与PHY寄存器级快速访问”,I2C偏“模块管理信息与大数据量读写”,两者在模块内可能并存,由管理控制器统一调度。
二、帧结构与地址分配要点
MDIO Clause 22帧固定64位:32位前导码(全1)、2位起始码“01”、2位操作码(读为10、写为01)、5位PHY地址、5位寄存器地址、2位转向位,最后16位数据。读事务中,主机在转向位后释放MDIO,由从机驱动数据;写事务则由主机持续驱动。Clause 45则用“地址帧+数据帧”两段式扩展,支持更多寄存器和设备类型,3.2T高速PHY常涉及Clause 45访问。
I2C事务以起始位S开始,发送7位从地址加读写位,从机回ACK后传输寄存器地址字节,再传数据字节,每个字节后都有ACK,最后以停止位P结束。读操作需要“写地址—重复起始—读”的组合。地址分配上,MDIO的PHY地址由硬件引脚或配置决定,同一总线上的多个PHY必须地址唯一;I2C从地址通常由模块MSA规定(如0xA0/0xA2对应不同页),同一总线挂多个器件时需避免地址冲突。工程上要特别注意:地址是“设备级”还是“页级”,以及读写位是否已包含在抓包工具显示的地址中。
三、用逻辑分析仪抓取并解析一次完整MDIO读事务
下面以一次MDIO Clause 22读事务为例,说明从接线到解码的完整过程。假设主机要读取PHY地址0x05、寄存器0x10的内容,预期返回0x1234(示例参数,用于说明解析方法)。
- 接线与采样设置:逻辑分析仪通道0接MDC,通道1接MDIO,两地共地。采样率至少为MDC频率的10倍以上;若MDC为2.5MHz,建议采样率≥25MS/s,以保证边沿与建立保持时间可辨。
- 触发设置:以MDC上升沿为采样时钟,触发条件设为MDIO出现前导码后的起始码“01”,或直接以帧首前导码下降沿触发,避免抓到半截帧。
- 解码器配置:在分析仪中加载MDIO协议解码器,设置时钟为MDC、数据为MDIO、Clause选择22、PHY地址过滤0x05。解码器会按位切分出前导码、起始、操作码、地址、数据和转向位。
- 结果判读:正常读事务应看到操作码“10”、PHY地址0x05、寄存器0x10,转向位后数据段为0x1234,且MDIO在转向位后由从机驱动。若数据段全1或全0,需检查从机是否响应、上拉电阻是否合适、地址是否匹配。
# 逻辑分析仪解码输出示例(MDIO Clause 22 读)
Preamble : 1111...1111 (32 bits)
Start : 01
Opcode : 10 (READ)
PHY Addr : 0x05
Reg Addr : 0x10
TA : Z0 (主机释放,从机驱动)
Data : 0x1234
# 判读:操作码=读、地址匹配、数据非全1/全0 → 事务有效
把上述方法迁移到I2C时,解码器选择I2C协议,重点观察起始位、从地址+读写位、每个字节后的ACK以及停止位。一次完整的“写寄存器地址再读数据”的读事务,在分析仪上会显示为两段:第一段写地址并收到ACK,第二段重复起始后读数据。只要地址分配、时序参数(如SCL频率、建立保持时间)与模块规格一致,抓包结果就能直接用于定位管理接口通信故障。