关于88e1111 phy模块的配置说明
1、前言
本次主要是参考了88e1111的phy芯片的数据手册,对于88e1111这款经典的 10M/100M/1000M 以太网芯片的一些基础软件硬件配置做一些说明,抛砖引玉,有不对之处,请多多指教。
2、88e1111 phy芯片的硬件相关
1、phy芯片的作用
phy芯片主要是实现数字信号和模拟信号的转换,将MAC层硬件传过来的数据转换成模拟信号将数据送出去。比如我们平时调试板卡的时候,将电脑通过网线连接铜口,确认好双方的ip以后就可以互相ping通。看起来好像很简单,实际上网线连接铜口,铜口是不能直接连接板卡上的cpu或者单片机的,cpu和单片机一般提供MII/GMII这样的接口,实现MII/GMII这样的接口与铜口的连接,中间的实现连接转换的模块就是phy模块,也就是 CPU->MII/GMII phy 铜口 的结构。
phy芯片模式
2、88e1111支持的模式
88e1111不光支持以上这样的场景,根据不同的需求对phy芯片进行配置,能够转换成不同的电平协议运用在不同的场景上,比如phy芯片和网络交换机连接,phy与phy芯片连接。88e1111支持多种转换模式,查看他的数据手册可以发现,88e1111支持的模式很多,主要分为Copper和fiber两类,还有就是直接的电平转换,我们对几种常用的模式说明一下。
phy芯片模式
1.Copper模式
MAC转Copper媒体接口示意图
可以看到的是,copper模式下支持的协议转换是很多的,88e1111手册上也没有对这些一一做解释,倒是有一张表格是告诉配置 HWCFG_MODE[3:0] 的对应的值来切换phy的模式,这个HWCFG_MODE[3:0]实际上对应的是寄存器 R27 Extended PHY Specific Status Register 的低四位,这个在我们后续的软件部分再做详细说明。
Copper模式切换寄存器配置
SGMII Modes
这次主要讲一下sgmii模式在配置中的一些常见误区,sgmii的电平协议是区分Master和Slave模式,也就是说,当两个sgmii的接口互相连接的时候要区分主从,由主机主动发起发送到从机,我们的phy芯片是默认为Master模式,一般交换机芯片默认为Slave模式(不绝对,要看一下手册,这里说的是bcm5396交换机),当phy芯片与phy芯片连接的时候,两边都为Master模式,这时不用担心,两边的sgmii接口都可以主动发起,两边接口会相互协商成一主一从的模式,不会影响正常通信。当phy芯片与交换机连接时,一主一从,如果速率,双工这些配置好了的话,很快就能link上。最容易出问题的就是有的时候做一些复杂项目,存在两个交换机通过sgmii的方式互联,此时两边都为Slave模式,就会出现两边无人发起通信的情况,导致sgmii通信一直异常,此时就要去配置一下交换机上面sgmii的主从模式,将一边配置为Master模式即可,下面是bcm5396交换机寄存器关于sgmii的主从模式配置的说明。
5396交换机配置SGMII主从模式
2.Fiber模式
MAC转Fiber媒体接口示意图
通过这个图,我们可以看到Fiber模式主要是用于转换为光纤模式,【注】1000BASE-X表示光纤接口,1000BASE-T表示铜介质双绞线接口。
Fiber模式下配置 HWCFG_MODE[3:0] 寄存器来切换模式的配置表如下。
Fiber模式切换寄存器配置
GMII to Fiber Mode
手册上强调了一下当配置HWCFG_MODE[3:0] 为”0111“,将模式选择为GMII转光纤的模式,如果GMII那边是连接的MAC层的话,只能选择强制千兆的模式,如果phy芯片是用于串行接口的电平转换的时候,并非一边连接的MAC层的话,是支持千兆自协商模式的。
GMII to Fiber Mode
3.GMII/MII to SGMII and RGMII to SGMII Mode
这是手册上写的第三种特殊的模式,他意思是纯粹的电平协议转换,并不涉及到Copper或者Fiber。现实中我们也经常会遇到这种情况,例如一张板卡的出去的phy芯片,对外为SGMII模式,连接到另一张板卡,另一张板卡对外也是SGMII模式,两边的phy互相连接就是通过SGMII来互相通信,此时这种模式下,支持10M/100M/1000M自协商模式。
GMII/MII to SGMII and RGMII to SGMII Mode
phy的硬件模式配置
88e1111如果硬件配置得当,正常来说是不需要软件进行再次配置的,我们的硬件可以通过配置管脚配置整个phy芯片的模式,全双工还是半双工,速率等,接下来我们来看看硬件是如何通过配置管脚来配置这些的。
1.根据数据手册可以看到,总共有7根管脚可以对phy芯片进行配置,每根管脚对应3个bit,每个bit都有不同的含义。
硬件配置phy芯片管脚
2.硬件通过将这7根管脚接上不同的管脚,来配置管脚对应的bit值。88e1111提供了一个映射表,不同的管脚对应不同的值。
管脚常量值映射表
3.将对应不同值的管脚连接到CONFIG[6:0]上以后,就能对phy的模式进行硬件配置,88e1111的数据手册上提供了一个例子,很好的展示了一下该如何配置硬件配置管脚,将CONFIG0直接连接LED_RX管脚,就会将phy地址bit[2:0]配置为010,将CONFIG2接到LED_DUPLEX就能将模式配置为自协商1000base-t的模式。
硬件配置phy模式例程
3、88e1111 phy芯片的软件相关
1、软件配置phy芯片的接口和时序
查看88e1111的数据手册,我们可以看到,88e1111可以通过两种方式进行寄存器配置等,一种是MDIO协议,一种是IIC协议,IIC支持100K或400K的速率,当软件寄存器写入以后,板卡需要进行软复位操作,phy地址默认使用[4:0]五个bit表示,地址由硬件配置地址管脚高低电平来确定。
两种访问phy芯片的协议
1.MDIO访问phy寄存器
- MDIO读写时序图如下
MDIO读写时序图
2.IIC访问phy寄存器
- IIC读寄存器时序图如下
IIC读时序图
- IIC写寄存器时序图如下
IIC写时序图
2、phy寄存器配置及实现
1.寄存器列表
phy寄存列表
2.R22 Extended Address 寄存器
可以根据上表可以看到,phy的寄存器根据page的切换大体可以分为copper和fiber两种模式,根据数据手册的说明,通过配置 R22 Extended Address 寄存器可以配置page0或者1,用以切换不同的模式。
R22 Extended Address
3.R0 Control Register 寄存器
对phy寄存器进行配置以后,并不会立刻生效,需要对phy进行软复位操作以后才能够生效,通过配置R0 Control Register寄存器可以配置自协商,双工等,同时也可以操作phy的软复位操作。
R0 Control Register
4.R1 Status Register 寄存器
通过查看phy的 R1 Status Register 寄存器可以查看许多情况,有一个小技巧是,在读取 R17 PHY Specific Status Register 寄存器之前,可以先读一下 R1 Status Register 的bit5,可以用以确定phy是否协商完成。
R1 Status Register
5.R17 PHY Specific Status Register 寄存器
通过查看phy的 R17 PHY Specific Status Register 寄存器可以查看phy的link状态,phy的速率,phy双工模式。
R17 PHY Specific Status Register
6.R27 Extended PHY Specific Status Register 寄存器
通过修改phy的 R27 Extended PHY Specific Status Register 寄存器bit[3:0],可以配置phy的模式,等同于硬件上修改 HWCFG_MODE[3:0] ,可以配置 GMII to SGMII ,RGMII to SGMII,RGMII to Fiber等模式。
R27 Extended PHY Specific Status Register
7.R2 PHY Identifier 寄存器
通过查看 R2 PHY Identifier 寄存器,可以获取到phy的设备id,由图可以看到,目前phy的id是0x141,通过读取设备id可以判断设备类型,以及phy设备是否能正常访问。
R2 PHY Identifier
4、总结
88e1111的配置大体上就是这些,此次主要涉及硬件和软件配置,如果在实际调试过程中,phy的状态感觉一直不太对劲,link不上的话,将两边phy芯片速率强制一下看看。在调试1000base-x的时候,很多时候都存在自协商不成功的情况,这个时候强制速率可以来看看连接状态是否得到改善,还有一个要注意的点就是,88e1111在上电以后,需要做硬复位操作,这样配置的参数才能得以启动,当开发人员操作软件寄存器对phy进行二次配置,也需要去配置 R0 Control Register 寄存器去软复位一下phy芯片,这样才能使寄存器的配置生效。