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的状态)。