CH32V307外挂千兆PHY应用

                                                                 CH32V307外挂千兆PHY应用

简介

       CH32V307 内置了千兆mac和10Mphy,本身可以使用10M的网络,但在有些网络应用中,10Mbps网络速度并不能满足需求,于是这里介绍一下CH32V307使用RGMII接口外挂千兆PHY的应用

RGMII接口介绍

       RGMII接口是一种高速差分信号接口,用于连接以太网MAC和PHY之间的通信,分为MAC模式和PHY模式,需要125M时钟。CH32V307工作在MAC模式下,发送时钟由MAC提供,接收时钟由PHY提供。CH32V307的125M时钟有两种获取方式,一种为外部输入,即外部PHY倍频到125M输出到CH32V307的PB1脚,还有一种为通过内部PLL2或PLL3的VCO输出,VCO输出为PLL输出的两倍,所以PLL2,PLL3倍频到62.5M即可,RGMII接口时钟和引脚如下图所示:

  

SMI接口介绍

       SMI 接口是一种串行通讯接口,使用 MDC和 MDIO两线来访问 PHY 的寄存器 实现对 PHY 的管理。其中 MDC 是时钟线,空闲时保持低电平,MDIO 是数据线一般需要上拉。SMI 的读写操作和帧的组成都是由 MAC 主导的,只需要写入地址和数据即可操作PHY相应寄存器。

PHY物理地址介绍

       首先需要根据硬件设置PHY的物理地址,有物理地址才可以操作PHY寄存器,一般通过硬件选择,千兆phy的地址线一般有3根,如下图:

 

       这3根地址线使用4.7k电阻上拉或下拉来设置物理地址,上拉为1,下拉为0,例如这三根分别为101,则设置的物理地址为5,那我们代码中就需要通过物理地址5来操作phy寄存器,若想判断是否可以正常操作phy,则可以读取phy id寄存器,看读出数据和PHY手册中是否一致,若读出不一致且为FFFF之类,则需要看一下物理地址是否设置错,MDIO是否上拉,检查下硬件看哪里有不妥当的地方。

配置和读取PHY

        目前市面上PHY默认配置即可正常通信,但也有些需要设置一下,总体来说,要开启phy自协商能力,并且可以正确读取phy的状态,来相应设置mac的速率,全双工半双工,是否link上之类,例如RTL8211FS,我们需要读取 PHY specific status 寄存器来获取phy的状态,并将状态通过WCHNET_PhyStatus();函数传入协议栈,让协议栈检测phy是否link上

 

        该寄存器因为并不是统一标准的,所以每款phy对于link状态位的定义不同,RTL8211FS的link位判断为bit2,而别的phy不一定,例如YT8531的link位为bit10

 

                                                                                              RTL8211FS LINK位

                                                                                           YT8531 LINK位

       由于WCHNET协议栈判断的是bit2位,所以在使用YT8531时不可将PHY特殊状态寄存器的值直接传入协议栈,一般需要进行移位,例如:

          phy_status=ETH_ReadPHYRegister(gPHYAddress,0x11) ;

          WCHNET_PhyStatus(phy_status>>8);

       按照这种方式即可让协议栈判断是否link上,link上之后,协议栈才会进行后续操作。

       有两种方式来调用PHYLink函数,PHYLink函数中的作用是用来读取phy状态,那么需要在何时调用该函数呢,第一种:通过中断的方式,将phy的中断脚连到CH32V307任意IO,并且接4.7K上拉,当出现下降沿时,证明有网线插入,此时触发中断,调用PHYLink函数,例程中使用的引脚为PC7。第二种为轮询的方式,判断phy状态是否发生改变,若发生改变时则调用PHYLink函数。这两种方式在CH32V307的例程中都可以找到,可自由选择使用。

              

 

posted @ 2024-01-02 11:07  WCH_CH32  阅读(747)  评论(0编辑  收藏  举报