关于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 铜口 的结构。
![](/wp-content/uploads/2024/03/frc-222f3ba0f69d9fe9d7c1c7ac61841a2c.png)
phy芯片模式
2、88e1111支持的模式
88e1111不光支持以上这样的场景,根据不同的需求对phy芯片进行配置,能够转换成不同的电平协议运用在不同的场景上,比如phy芯片和网络交换机连接,phy与phy芯片连接。88e1111支持多种转换模式,查看他的数据手册可以发现,88e1111支持的模式很多,主要分为Copper和fiber两类,还有就是直接的电平转换,我们对几种常用的模式说明一下。
![](/wp-content/uploads/2024/03/frc-1b5cabf6a688b7bd2b455c6db1d621be.png)
phy芯片模式
1.Copper模式
![](/wp-content/uploads/2024/03/frc-222f3ba0f69d9fe9d7c1c7ac61841a2c.png)
MAC转Copper媒体接口示意图
可以看到的是,copper模式下支持的协议转换是很多的,88e1111手册上也没有对这些一一做解释,倒是有一张表格是告诉配置 HWCFG_MODE[3:0] 的对应的值来切换phy的模式,这个HWCFG_MODE[3:0]实际上对应的是寄存器 R27 Extended PHY Specific Status Register 的低四位,这个在我们后续的软件部分再做详细说明。
![](https://img2024.cnblogs.com/blog/2960230/202402/2960230-20240229221348817-447369907.png%0A)
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的主从模式配置的说明。
![](/wp-content/uploads/2024/03/frc-bd2f14ae4f34f0dfc994bf0c31fb17af.png)
5396交换机配置SGMII主从模式
2.Fiber模式
![](/wp-content/uploads/2024/03/frc-3de4f1025c818313c81f4980c6d0c1b8.png)
MAC转Fiber媒体接口示意图
通过这个图,我们可以看到Fiber模式主要是用于转换为光纤模式,【注】1000BASE-X表示光纤接口,1000BASE-T表示铜介质双绞线接口。
Fiber模式下配置 HWCFG_MODE[3:0] 寄存器来切换模式的配置表如下。
![](/wp-content/uploads/2024/03/frc-f3faa6d57e4287eb0ef0dfa3fae0ca68.png)
Fiber模式切换寄存器配置
GMII to Fiber Mode
手册上强调了一下当配置HWCFG_MODE[3:0] 为”0111“,将模式选择为GMII转光纤的模式,如果GMII那边是连接的MAC层的话,只能选择强制千兆的模式,如果phy芯片是用于串行接口的电平转换的时候,并非一边连接的MAC层的话,是支持千兆自协商模式的。
![](/wp-content/uploads/2024/03/frc-a3f0a3bb6a21f0bc01fa6bcaace724f2.png)
GMII to Fiber Mode
3.GMII/MII to SGMII and RGMII to SGMII Mode
这是手册上写的第三种特殊的模式,他意思是纯粹的电平协议转换,并不涉及到Copper或者Fiber。现实中我们也经常会遇到这种情况,例如一张板卡的出去的phy芯片,对外为SGMII模式,连接到另一张板卡,另一张板卡对外也是SGMII模式,两边的phy互相连接就是通过SGMII来互相通信,此时这种模式下,支持10M/100M/1000M自协商模式。
![](/wp-content/uploads/2024/03/frc-95c17262f08f25b5fd8fd3940cf74588.png)
GMII/MII to SGMII and RGMII to SGMII Mode
phy的硬件模式配置
88e1111如果硬件配置得当,正常来说是不需要软件进行再次配置的,我们的硬件可以通过配置管脚配置整个phy芯片的模式,全双工还是半双工,速率等,接下来我们来看看硬件是如何通过配置管脚来配置这些的。
1.根据数据手册可以看到,总共有7根管脚可以对phy芯片进行配置,每根管脚对应3个bit,每个bit都有不同的含义。
![](/wp-content/uploads/2024/03/frc-42492b0eabd4a6c9c5e27aa6f781894f.png)
硬件配置phy芯片管脚
2.硬件通过将这7根管脚接上不同的管脚,来配置管脚对应的bit值。88e1111提供了一个映射表,不同的管脚对应不同的值。
![](/wp-content/uploads/2024/03/frc-3fcca11296f92a5a182e8ed05ff037da.png)
管脚常量值映射表
3.将对应不同值的管脚连接到CONFIG[6:0]上以后,就能对phy的模式进行硬件配置,88e1111的数据手册上提供了一个例子,很好的展示了一下该如何配置硬件配置管脚,将CONFIG0直接连接LED_RX管脚,就会将phy地址bit[2:0]配置为010,将CONFIG2接到LED_DUPLEX就能将模式配置为自协商1000base-t的模式。
![](/wp-content/uploads/2024/03/frc-8ea3b44bbce79e8582a7340257b17d09.png)
硬件配置phy模式例程
3、88e1111 phy芯片的软件相关
1、软件配置phy芯片的接口和时序
查看88e1111的数据手册,我们可以看到,88e1111可以通过两种方式进行寄存器配置等,一种是MDIO协议,一种是IIC协议,IIC支持100K或400K的速率,当软件寄存器写入以后,板卡需要进行软复位操作,phy地址默认使用[4:0]五个bit表示,地址由硬件配置地址管脚高低电平来确定。
![](/wp-content/uploads/2024/03/frc-9dd9dbc01df2afdf1e2b9e68ed37671b.png)
两种访问phy芯片的协议
1.MDIO访问phy寄存器
- MDIO读写时序图如下
![](/wp-content/uploads/2024/03/frc-525a9a9f21dd690fa277994dc8554333.png)
MDIO读写时序图
2.IIC访问phy寄存器
- IIC读寄存器时序图如下
![](/wp-content/uploads/2024/03/frc-d51f37183f61fe3a9f1b76eced3912fc.png)
IIC读时序图
- IIC写寄存器时序图如下
![](/wp-content/uploads/2024/03/frc-e25640ce6f8943630dac0cf7c610352d.png)
IIC写时序图
2、phy寄存器配置及实现
1.寄存器列表
![](/wp-content/uploads/2024/03/frc-05317dca2f0827b7a1ad3555ed91409f.png)
phy寄存列表
2.R22 Extended Address 寄存器
可以根据上表可以看到,phy的寄存器根据page的切换大体可以分为copper和fiber两种模式,根据数据手册的说明,通过配置 R22 Extended Address 寄存器可以配置page0或者1,用以切换不同的模式。
![](/wp-content/uploads/2024/03/frc-8137880d497360e01e5e8438b0ed0918.png)
R22 Extended Address
3.R0 Control Register 寄存器
对phy寄存器进行配置以后,并不会立刻生效,需要对phy进行软复位操作以后才能够生效,通过配置R0 Control Register寄存器可以配置自协商,双工等,同时也可以操作phy的软复位操作。
![](/wp-content/uploads/2024/03/frc-442d9ef7545fabace0b38a1cdc370bfd.png)
R0 Control Register
4.R1 Status Register 寄存器
通过查看phy的 R1 Status Register 寄存器可以查看许多情况,有一个小技巧是,在读取 R17 PHY Specific Status Register 寄存器之前,可以先读一下 R1 Status Register 的bit5,可以用以确定phy是否协商完成。
![](/wp-content/uploads/2024/03/frc-3660b52a4c419dd02009fe84fac66b7d.png)
R1 Status Register
5.R17 PHY Specific Status Register 寄存器
通过查看phy的 R17 PHY Specific Status Register 寄存器可以查看phy的link状态,phy的速率,phy双工模式。
![](/wp-content/uploads/2024/03/frc-f8a11e6937f288792052cd7211979594.png)
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等模式。
![](/wp-content/uploads/2024/03/frc-bfd927113d733744b6ca2d78c02c0df6.png)
R27 Extended PHY Specific Status Register
7.R2 PHY Identifier 寄存器
通过查看 R2 PHY Identifier 寄存器,可以获取到phy的设备id,由图可以看到,目前phy的id是0x141,通过读取设备id可以判断设备类型,以及phy设备是否能正常访问。
![](/wp-content/uploads/2024/03/frc-cb483c0d12ed89f595e5156d398478b7.png)
R2 PHY Identifier
4、总结
88e1111的配置大体上就是这些,此次主要涉及硬件和软件配置,如果在实际调试过程中,phy的状态感觉一直不太对劲,link不上的话,将两边phy芯片速率强制一下看看。在调试1000base-x的时候,很多时候都存在自协商不成功的情况,这个时候强制速率可以来看看连接状态是否得到改善,还有一个要注意的点就是,88e1111在上电以后,需要做硬复位操作,这样配置的参数才能得以启动,当开发人员操作软件寄存器对phy进行二次配置,也需要去配置 R0 Control Register 寄存器去软复位一下phy芯片,这样才能使寄存器的配置生效。