SSD201 PHY适配问题与解决过程
本文总结了RTL8201F-VB-CG PHY芯片与SSD201主控适配过程中遇到的三个关键问题及解决方案:1)PHY芯片未被检测问题,通过增加复位操作解决;2)网络不通问题,发现REF_CLK模式设置错误(应为输出模式),修改硬件电阻后恢复50MHz时钟信号;3)CRS_DV管脚置空导致接收异常,需与主控COL引脚连接。最终通过软件修改和硬件调整实现了网络正常通信。问题根源涉及复位时序、时钟配置
一、适配背景
-
PHY芯片型号:RTL8201F-VB-CG
- 主控型号:ssd201
- 组网形式(存在内置EPHY与外置PHY,需要适配的为外置PHY):

- RTL8201F 原理图(红框部分,为适配过程中遇到的硬件问题,下文展开分析):

二、适配步骤&问题
1. 首先根据设备树,对emac1进行适配(可与主控厂商确认相关参数的正确性):

图2-1
2. 适配完成后,再适配相关GPIO管脚(可与主控厂商确认参数的正确性):

以上两步适配完成后,设备启动后,系统应该能检测到phy芯片。即能读到PHY ID等信息。但实际启动过程中却显示未检测到phy,如下图:

2.1 无法连接PHY芯片(不在位)

如上图,MDIO在扫描读取0~31的PHY 地址后无法链接到PHY芯片,即未检测到PHY.
因此,我们需要了解系统是如何获取PHY ID以及如何检测到PHY芯片。
2.1.1 系统如何获取PHY-ID
mii_bus初始化:
(1). mii_bus初始化:初始化mii_bus结构体,并注册mdiobus(MDev_EMAC_mii_init):

拓展:of_midobus_register()针对的是使用设备树的内核
2.1.2 of_mdiobus_register( )中包含了注册mdio与获取PHY_ID,主要做了:
1. 完成MDIO总线的初始化工作,将phy设备挂载到总线上(mdiobus_register())
注意:是否扫描phy,是由phy_mask决定,ssd201的SDK内核是不扫描的
2. 获取PHY_ID:
of_mdiobus_register_phy()
--》get_phy_device()
--》get_phy_id()
--》mdiobus_read():从寄存器中通过mdiobus的read方法来从phy中获取phy id
3. 将PHY设备注册到mdio总线:
of_mdiobus_register_phy()
--》get_phy_device()
--》phy_device_register()
至此,完成了MDIO总线和PHY设备端的初始化和注册工作。
不在位问题分析

1. 首先需要确认MDIO时钟是否正常,如果正常,说明MDIO的初始化是OK的。通过测量,可以检测到MDC时钟信号,因此MDIO通信是正常的。
2. 一般的PHY芯片正常工作前,都需要进行一个复位操作。走读代码未发现复位动作,故需要增加复位动作(复位动作应在检测PHY之前完成):

2. 增加复位操作后,设备启动后检测到PHY芯片(示波器显示有复位动作)。
![]()
2.2 网络不通问题
问题现象:系统检测到PHY芯片后,设备启动后却无法ping通主机。
REF_CLK错误
定位步骤:
1. ping 主机后,输入ifconfig查看RX,TX数据情况:

Ifconfig 中显示的RX packets,TX packets的数据统计的是MAC端外发的数据
因此,RX,TX都没有数据,可能是MAC本身出现了问题。
2. 查看PHY的状态寄存器与mstar自带PHY的状态寄存器进行对比:
emac1(phy): zlz ---id:0x1cc816 retval:30829:

emac0(芯片自带):zlz ---id:0x11112222 retval:30957:

比较结果:只有第7位不同。但是那个是保留位,是不会影响实际的功能。从状态寄存器看PHY的自协商已完成。

3. 走读内核MAC相关代码,发现MAC发送计数器始终为0,即未触发发送中断。与厂商确认,不认为MAC驱动存在异常。
4. 回到硬件本身定位,测量RMII0_TXCK(TXC),在ping电脑时,时钟信号检测不到。
翻阅手册,发现TXC的发送时钟信号正常应该要与50MHZ的参考时钟同步:

其中TXC信号依赖于REF_CLK参考时钟的模式设置:

查看原理图:

发现当前REF_CLK为1,即为输入模式,输入模式则要求同步的是MAC端的时钟。由于mstar的mac不支持对PHY芯片提供时钟信号,因此PHY的时钟信号只能是由外部提供并同步至MAC端。提供参考的时钟源来自外部晶振(25MHZ),这就要求REF_CLK 需要设置成0,即输出模式:由PHY提供同步时钟志MAC端。
硬件更改电阻后,TXC时钟信号出现(50MHZ)。
拓展
1. 实际测量TXC信号发现时钟频率为50MHZ,进一步确认发现: RMII协议要求时钟频率为50MHZ,但外部晶振仅为25MHZ,询问硬件后得知PHY芯片中应该有 锁相环,将时钟信号同步至50MHZ输出。
2. 关于REF_CLK参考时钟:
REF_CLK是一个连续时钟,可以为CRS_DV、RXD[1:O]、TX_EN、TXD[1:O]、RX_DV和RX_ER提供时序参考。 REF_CLK由MAC层或外部时钟源源提供。REF_CLK频率应为50 MHz±50×10-6,占空比介于35%和65%之间。在RMII模式下,数据以50 MHz的时钟频率一次传送2位。)

更改后原理图:

2.3 CRS_DV管脚置空问题
RMII信号线:

1. 再次尝试PING主机,发现网络依旧不通。再次ifconfig查看tx,rx计数器。发现有发送,但是没有接收。即TX有计数,但RX依旧为0. 说明发送至少是从MAC端出去了。
2. 从硬件层面再次分析,发现原理图中,对CRS_DV这个脚做了置空处理:

3. 查阅手册,对CRS_DV管脚的描述为 载波侦听/接收数据有效:

在网上进一步查询该管脚的作用,发现在RMII模式下,它是CRS 与 RXDV 的合并。( CRS:载波侦测信号 RX_DV:接收数据有效信号(ReveiveData Valid) ),结合实际问题现象:RX无数据,TX有数据。怀疑是否为该管脚置空导致。
4. 与mstar厂商沟通后,确认该管脚需要与主控测的COL(冲突检测)脚相连。
![]()
硬件修改,设备RX,TX计数正常,能够ping通主机。
更多推荐



所有评论(0)