RK3568 GMAC驱动开发实战:从设备树配置到PHY调试全解析

1. 从零开始:理解RK3568的GMAC与以太网驱动

大家好,我是老王,一个在嵌入式网络驱动领域摸爬滚打了十多年的老码农。今天咱们不聊虚的,直接上手,把RK3568这颗热门芯片的以太网驱动开发,从设备树配置到PHY调试,掰开揉碎了讲清楚。如果你正在为RK3568的网口调不通而头疼,或者想彻底搞懂Linux网络驱动的底层逻辑,那这篇文章就是为你准备的。

RK3568集成的GMAC(千兆以太网媒体访问控制器)是连接芯片内部和外部物理层(PHY)芯片的桥梁。简单来说,GMAC负责处理数据链路层的活儿,比如组帧、CRC校验,而PHY芯片则负责把数字信号变成能在网线上跑的模拟信号。在Linux内核里,这套驱动通常被称为 “stmmac” ,这是一个被多家芯片厂商采用的Synopsys DesignWare MAC IP核驱动框架。瑞芯微在它的基础上,增加了自家平台的一些特定配置,形成了 dwmac-rk.c 这个驱动文件。

很多新手一上来就照着别人的设备树改,结果网卡死活起不来,dmesg 里一堆报错,最常见的就是 Could not attach to PHY。这往往是因为没理解清楚硬件连接、时钟配置和复位时序这三者的关系。别急,接下来我会带你一步步走通整个流程,把每个坑都提前标出来。

2. 硬件连接与原理图分析:一切配置的起点

在动手写一行代码之前,我们必须先看懂原理图。这是决定后续所有软件配置是否正确的基石,跳过这一步,调试过程就会像在迷宫里乱撞。

首先,找到你的PHY芯片。 RK3568开发板上常见的PHY有RTL8211F(千兆)、RTL8201F(百兆)等。你需要确认几个关键信息:

  1. PHY芯片型号:决定了其支持的协议(10/100/1000M)和寄存器配置方式。
  2. PHY地址:PHY通过MDIO总线与MAC通信,每个PHY在总线上有一个硬件地址。这个地址通常由PHY芯片的几个引脚(如PHYAD0, PHYAD1)的上拉或下拉电阻决定。比如,如果PHYAD0接下拉电阻(低电平),PHYAD1接上拉电阻(高电平),那么PHY地址可能就是 0b01,也就是十进制的 1。在设备树里,这个地址对应 reg = <0x1>
  3. 接口模式:RK3568的GMAC支持RGMII和RMII两种主流模式。
    • RGMII:用于千兆以太网,数据线少,但时序要求非常严格,需要配置 tx_delayrx_delay 来进行时序补偿。
    • RMII:用于十兆/百兆以太网,时钟线定义与RGMII不同。 模式选择由硬件电路决定,绝对不能配错,否则物理链路永远无法建立。
  4. 时钟方向:这是最容易出错的地方之一。GMAC和PHY之间需要一组同步时钟(RX_CLK, TX_CLK 或 REF_CLK)。这组时钟可以由MAC提供给PHY,也可以由PHY提供给MAC。这取决于PHY芯片的型号和硬件设计。在原理图上,你需要查看时钟线连接方向,或者查看PHY芯片的某个配置引脚(如RTL8211F的RXCTL/PHYAD2)的电平。设备树中的 clock_in_out 属性就是为此服务的。
  5. 复位引脚与电压域:找到PHY的复位引脚(RESETn)连接到了RK3568的哪个GPIO上,并确认它是低电平有效还是高电平有效。同时,确认PHY芯片的IO电压(VCCIO)是1.8V还是3.3V,这需要与RK3568对应Bank的电压域(vccio-supply)设置匹配,否则信号电平不匹配会导致通信失败。

我建议你拿出一张纸,把上面这些信息从原理图上找出来并记录下来。这步工作做扎实了,后面的设备树配置就是“按图索骥”。

3. 设备树(DTS)配置详解:驱动与硬件的桥梁

设备树是Linux内核用来描述硬件的数据结构。对于GMAC驱动,我们需要配置两个核心节点:以太网控制器节点MDIO总线节点。很多SDK会在 rk3568.dtsi 这类通用文件中定义好节点的基本框架,我们需要在板级DTS文件(如 rk3568-evb.dtsrk3568-kickpi-k1b.dtsi)里进行覆盖和细化。

下面我以一个典型的RGMII模式、PHY提供时钟的千兆以太网配置为例,逐行解释每个属性的含义。假设我们的PHY是RTL8211F,地址为0x1,复位引脚接在GPIO3_D1上。

/* 首先,在 pinctrl 节点中定义复位引脚为GPIO功能 */
&pinctrl {
    gmac1 {
        gmac1_reset: gmac1-reset {
            rockchip,pins = <3 RK_PD1 RK_FUNC_GPIO &pcfg_pull_up>; /* GPIO3_D1, 上拉 */
        };
    };
};

/* 定义外部输入的125MHz时钟(如果时钟来自PHY) */
&gmac1_clkin {
    clock-frequency = <125000000>;
    status = "okay";
};

/* 核心:GMAC1控制器节点配置 */
&gmac1 {
    /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值