Marvell交换机芯片SMI接口读写协议
Marvell的88E6XXX系列交换机芯片基本都提供SMI(Serial Management Interface)接口。 SMI接口使用2线串行通信,一个MDC提供时钟,一个MDIO为双向数据引脚。 外部CPU通过这2个引脚访问芯片内部的寄存器。
SMI接口的通信时序如图所示:

开始通信前要发送32个时钟做为前导帧,操作结束后同样也发送32个时钟作为空闲。空闲期间MDIO引脚保持高电平。
通信数据包含: 2bit起始位, 2bit读写操作码, 5bit设备地址, 5bit寄存器地址, 2bit读写转换, 16bit寄存器数据。
SMI寻址方式又分为2种,单芯片模式和多芯片模式。
单芯片模式: 是直接通过读写命令访问内部寄存器。
多芯片模式: 多个芯片并联在同一条SMI总线上,类似于I2C,通过芯片地址来访问。 由于多了一个芯片地址,只能以间接的方式访问内部寄存器。 此时的设备地址是芯片地址,寄存器地址只能是0x00或0x01。 把要访问的内部寄存器地址和设备地址写入0x00(Command Register), 把要写入的数据写入0x01(Data Register),或者从0x01(Data Register)读出内部数据。

如图所示:Command Register的bit[9:5]写入的是设备地址,这个地址就是单芯片模式的SMI设备地址,bit[4:0]写入的是寄存器地址,和单芯片模式的SMI寄存器地址一样。
然后读回Command Register的bit15,如果为0表示操作完成,此时可以从Data Register读回数据。
芯片内部寄存器地址解读: 如下图所示,是某芯片手册里的寄存器地址表。 顶部的0到1D表示设备地址。左侧的0到1F是寄存器地址。 比如设备地址10,寄存器地址0,那就是Port Status(端口1的状态)。
