1. 项目背景与问题定位
去年在调试HD-RK3576-PI开发板时遇到了一个棘手问题:使用瑞芯微原厂Buildroot系统镜像时,板载的千兆以太网卡YT8521始终无法正常工作。这个开发板采用Rockchip RK3576处理器,配套的PHY芯片是裕太微电子的YT8521SH,理论上应该能轻松突破900Mbps的传输速率。
经过抓包分析发现,系统能识别到网络设备注册,但PHY芯片的初始化流程存在问题。具体表现为:
- ifconfig显示网卡已启动但无连接
- ethtool查询显示"Link detected: no"
- 内核日志出现"yt8521 0-0005: failed to reset phy"错误
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件环境确认
2.1 开发板关键参数
- 主控芯片:Rockchip RK3576(四核Cortex-A55)
- 网络方案:
- PHY芯片:YT8521SH(支持10/100/1000M自适应)
- 接口类型:RGMII
- 变压器:HX5001NL
- 供电设计:3.3V PHY供电 + 1.2V内核电压
2.2 原厂SDK适配情况
瑞芯微官方提供的Linux 5.10内核默认配置中,虽然包含了yt8521驱动源码(drivers/net/phy/yt8521.c),但存在以下问题:
- 复位时序不符合YT8521SH规格书要求
- 时钟配置未考虑RGMII延迟补偿
- 自适应协商流程存在缺陷
3. 驱动修改与内核配置
3.1 PHY驱动关键修改点
在drivers/net/phy/yt8521.c中主要做了三处调整:
c复制// 修正复位时序(规格书要求至少保持10ms低电平)
static int yt8521_soft_reset(struct phy_device *phydev)
{
int ret;
ret = phy_write(phydev, MII_BMCR, BMCR_RESET);
if (ret < 0)
return ret;
msleep(15); // 原代码为usleep(1000)
return 0;
}
// 添加RGMII时钟延迟补偿
static int y
