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