在有些简单的单片机上做网络通信的产品时,可能遇到单片机+网络芯片/switch芯片的情况,比如STM32+RTL8306。此时我们就需要在STM32上模拟SMI总线协议,去控制RTL8306 switch芯片实现具体的功能。
首先是对于SMI的定义:
SMI:串行管理接口(Serial Management Interface),也被称作MII管理接口(MII Management Interface),包括MDC和MDIO两条信号线。MDIO是一个PHY的管理接口,用来读/写PHY的寄存器,以控制PHY的行为或获取PHY的状态,MDC为MDIO提供时钟。
MDIO原本是为MII总线接口定义的,MII用于连接MAC和PHY,包含两种信号接口:
1. 一个数据接口用于MAC和PHY之间接收和发送以太网帧数据。
2. 一个PHY管理接口,即MDIO,用于读写每个PHY的控制寄存器和状态寄存器,以达到控制PHY行为和监控PHY状态的目的。
MDIO是双向的,只支持一个MAC连接最多32个PHY的连接方式,且MAC作为master,PHY作为slave。在写PHY寄存器的时候,由MAC驱动MDIO向PHY写入数据;在读PHY寄存器时,前半段由MAC驱动发送寄存器地址,后半段由PHY驱动回复寄存器的值。
MDC要求由MAC输出,是非周期性的,即不要求提供固定频率的时钟,对于PHY芯片则作为输入,以在上升沿触发MDIO的读写。MDC的时钟频率可以是DC-2.5MHz,即最小的时钟周期为400ns。