【 RK3568 平台以太网驱动设置】

264 阅读20分钟

在嵌入式系统开发中,以太网通信是实现设备联网的基础功能。本文将深入探讨 RK3568 平台上以太网驱动的开发,从硬件组成到软件实现,详细解析 RJ45 接口、MAC 控制器、PHY 芯片以及它们之间的协同工作原理。

一、RJ45 接口:物理层的数据入口

RJ45 是以太网通信中最常见的物理接口,其核心功能是通过 8 芯双绞线实现电信号的传输。在千兆以太网标准中,RJ45 接口的 8 个引脚全部参与数据传输:

引脚序号信号名称功能描述
1TX_D1+发送数据正极
2TX_D1-发送数据负极
3RX_D2+接收数据正极
4BI_D3+双向数据正极(千兆以太网)
5BI_D3-双向数据负极(千兆以太网)
6RX_D2-接收数据负极
7BI_D4+双向数据正极(千兆以太网)
8BI_D4-双向数据负极(千兆以太网)

硬件原理图: 在这里插入图片描述 RJ45 接口支持多种以太网标准,包括 10Base-T(10Mbps)、100Base-TX(100Mbps)和 1000Base-T(1Gbps)。不同速率下,数据编码和传输方式有所不同,但 RJ45 接口的物理结构保持一致。

二、MAC 控制器:数据帧的处理核心

MAC(Media Access Control)控制器是 RK3568 芯片内部的以太网控制单元,负责处理以太网数据帧的封装和解封装。它的主要功能包括:

1.数据帧封装:

将上层协议(如 IP)的数据封装成以太网帧,添加 MAC 头部和尾部校验。

2.数据帧接收:

接收来自 PHY 的以太网帧,验证 CRC 校验和,提取有效数据。

3.介质访问控制:

实现 CSMA/CD(载波监听多路访问 / 冲突检测)协议,避免数据传输冲突。

4.流量控制:

支持 IEEE 802.3x 流量控制机制,通过 PAUSE 帧实现发送和接收的流量调节。

RK3568 的 MAC 控制器支持多种工作模式,包括 MII(Media Independent Interface)、RMII(Reduced MII)、GMII(Gigabit MII)和 RGMII(Reduced GMII),可根据实际应用需求选择合适的接口模式。

三、网络变压器:电气隔离与信号优化的关键组件​

1. 网络变压器的作用​

网络变压器(也称为网络隔离变压器、网口变压器)是以太网硬件链路中不可或缺的一环,其核心功能体现在以下几个方面:​ 电气隔离:通过电磁耦合原理,将 PHY 芯片与外部网络线路隔离,防止外部浪涌、静电、电压异常等对内部电路造成损坏,提高系统的抗干扰能力和稳定性。例如,在工业环境中,强电磁干扰或电压波动频繁,网络变压器能有效保护 RK3568 系统免受电气冲击。​ 信号增强与滤波:对 PHY 芯片输出的信号进行放大、整形和滤波,补偿信号在传输过程中的衰减,抑制共模干扰(如电磁辐射引起的干扰信号),确保信号质量。同时,它还能实现阻抗匹配,使网线的特性阻抗(通常为 100Ω)与 PHY 芯片的输出阻抗相匹配,减少信号反射,提升传输效率。​ 电平转换:适配不同设备间的电平差异,使 PHY 芯片的电平标准与网线传输要求兼容。例如,将 PHY 芯片输出的较低电平信号转换为适合在双绞线上传输的电平。​

2. 网络变压器的结构与工作原理​

网络变压器本质上是一个多绕组的电磁耦合器件,通常包含多个线圈(绕组),对应 RJ45 接口的不同引脚。以常见的千兆以太网网络变压器为例:​ 初级与次级绕组:每个数据通道(如 TX+、TX-、RX+、RX-)都有独立的初级和次级绕组。PHY 芯片输出的信号连接到初级绕组,经过电磁感应,次级绕组输出耦合后的信号连接到 RJ45 接口。初级与次级之间通过磁芯实现磁耦合,同时保持电气隔离。​ 中心抽头:绕组的中心抽头通常连接到电源或接地,并通过电容进行交流耦合。连接电源的中心抽头可为信号提供偏置电压,连接接地的中心抽头则用于抑制共模信号。​

3. 网络变压器在 RK3568 中的应用​

在 RK3568 的以太网硬件设计中,网络变压器通常位于 PHY 芯片与 RJ45 接口之间,具体连接方式如下:​ 引脚连接:PHY 芯片的数据发送和接收引脚(如 RGMII 接口的 TX+/TX-、RX+/RX-)连接到网络变压器的初级绕组;网络变压器的次级绕组则连接到 RJ45 接口对应的引脚。​ 电源与接地:网络变压器的中心抽头需正确连接电源(如 3.3V)或接地,并搭配合适的电容(通常为 0.1μF)进行滤波,以保证信号的稳定性。​ 选型要点:选择网络变压器时,需根据以太网速率(10/100/1000Mbps)、工作温度范围、插入损耗、回波损耗等参数进行选型,确保其性能满足设计要求。例如,千兆以太网应用需选用支持高频传输、低损耗的网络变压器。

四、PHY 芯片:信号转换的桥梁

PHY(Physical Layer Device)芯片是以太网物理层的核心组件,负责处理电信号的发送和接收。它的主要功能包括:

1.信号转换:

将 MAC 控制器输出的数字信号转换为适合在双绞线上传输的模拟信号,或将接收到的模拟信号转换为数字信号。

2.编码解码:

实现曼彻斯特编码(10Base-T)、4B/5B 编码(100Base-TX)或 PAM-5 编码(1000Base-T)。

3.自动协商:

与对端设备协商最佳的工作模式(速率、双工模式等)。

4.信号检测与调整:

检测链路状态,调整信号强度和均衡参数以适应不同的线缆长度。

五、MAC 控制器与 PHY 芯片的连接

MAC 控制器与 PHY 芯片之间的连接需要通过特定的接口实现,常见的接口类型包括:

1.MII(Media Independent Interface):

10/100Mbps 接口,使用 16 根信号线,包括 4 根数据发送线、4 根数据接收线、2 根时钟线和 6 根控制信号线。 信号组成(MAC→PHY 方向为发送,PHY→MAC 方向为接收):

  1. 发送通路: TXD [3:0]:4 位发送数据 TX_EN:发送使能 TX_ER:发送错误(100M 有效)
  2. 接收通路: RXD [3:0]:4 位接收数据 RX_DV:接收数据有效 RX_ER:接收错误
  3. 时钟与控制: TX_CLK:发送时钟(100M 时 25MHz,10M 时 2.5MHz) RX_CLK:接收时钟(同 TX_CLK) MDC:MDIO 时钟 MDIO:管理数据输入 / 输出

连线示意图(MAC 与 PHY 连接):

MAC                           PHY
├── TXD[3:0] ──────────────┬── TXD[3:0]
├── TX_EN  ────────────────┼── TX_EN
├── TX_ER  ────────────────┼── TX_ER
├── TX_CLK ────────────────┼── TX_CLK
├── RXD[3:0] ──────────────┼── RXD[3:0]
├── RX_DV  ────────────────┼── RX_DV
├── RX_ER  ────────────────┼── RX_ER
├── RX_CLK ────────────────┼── RX_CLK
├── MDC    ────────────────┼── MDC
└── MDIO   ────────────────┼── MDIO

2.RMII(Reduced MII):

10/100Mbps 接口,使用 8 根信号线,通过复用时钟和控制信号减少引脚数量。 信号优化设计:

发送 / 接收数据位宽减至 2 位,时钟频率翻倍(50MHz) 合并部分控制信号,减少引脚数量

信号组成:

  1. 发送通路: TXD [1:0]:2 位发送数据 TX_EN:发送使能 TX_ER:发送错误(可选)
  2. 接收通路: RXD [1:0]:2 位接收数据 RX_DV:接收数据有效
  3. 时钟与控制: REF_CLK:50MHz 参考时钟(由外部晶振或 PHY 提供) CRS_DV:冲突检测与数据有效合并信号 MDC/MDIO:同 MII

连线示意图:

MAC                           PHY
├── TXD[1:0] ─────────────┬── TXD[1:0]
├── TX_EN  ───────────────┼── TX_EN
├── TX_ER  ───────────────┼── TX_ER(可选)
├── RXD[1:0] ─────────────┼── RXD[1:0]
├── RX_DV  ───────────────┼── RX_DV
├── REF_CLK ──────────────┼── REF_CLK
├── CRS_DV ───────────────┼── CRS_DV
├── MDC    ───────────────┼── MDC
└── MDIO   ───────────────┼── MDIO

3.GMII(Gigabit MII):

1000Mbps 接口,使用 24 根信号线,包括 8 根数据发送线、8 根数据接收线、2 根时钟线和 6 根控制信号线。 支持 10/100/1000Mbps 自适应,信号特点:

千兆模式下:发送 / 接收各 8 位数据,时钟 125MHz 百兆 / 十兆模式兼容 MII 接口(数据位宽 / 时钟频率调整)

信号组成:

  1. 发送通路(千兆): TXD [7:0]:8 位发送数据 TX_EN:发送使能 TX_ER:发送错误 TX_CLK:125MHz 发送时钟
  2. 接收通路(千兆): RXD [7:0]:8 位接收数据 RX_DV:接收数据有效 RX_ER:接收错误 RX_CLK:125MHz 接收时钟
  3. 低速模式兼容: 100M 时使用 TXD [3:0]/RXD [3:0],时钟 25MHz 10M 时使用 TXD [3:0]/RXD [3:0],时钟 2.5MHz 控制信号:同 MII(MDC/MDIO)

连线示意图(千兆模式):

MAC                           PHY
├── TXD[7:0] ─────────────┬── TXD[7:0]
├── TX_EN  ───────────────┼── TX_EN
├── TX_ER  ───────────────┼── TX_ER
├── TX_CLK ───────────────┼── TX_CLK(125MHz)
├── RXD[7:0] ─────────────┼── RXD[7:0]
├── RX_DV  ───────────────┼── RX_DV
├── RX_ER  ───────────────┼── RX_ER
├── RX_CLK ───────────────┼── RX_CLK(125MHz)
├── MDC    ───────────────┼── MDC
└── MDIO   ───────────────┼── MDIO

4.RGMII(Reduced GMII):

1000Mbps 接口,使用 12 根信号线,通过复用时钟和控制信号减少引脚数量。 优化设计:

发送 / 接收数据位宽减至 4 位,时钟频率翻倍(250MHz) 合并时钟与控制信号,支持 10/100/1000Mbps

信号组成:

  1. 发送通路: TXD [3:0]:4 位发送数据 TX_EN:发送使能 TX_ER:发送错误
  2. 接收通路: RXD [3:0]:4 位接收数据 RX_DV:接收数据有效 RX_ER:接收错误
  3. 时钟与控制: REF_CLK:125MHz 参考时钟(由外部提供) TX_CTL:发送控制信号(包含时钟信息) RX_CTL:接收控制信号(包含时钟信息) MDC/MDIO:同 MII

连线示意图:

MAC                           PHY
├── TXD[3:0] ─────────────┬── TXD[3:0]
├── TX_EN  ───────────────┼── TX_EN
├── TX_ER  ───────────────┼── TX_ER
├── TX_CTL ───────────────┼── TX_CTL
├── RXD[3:0] ─────────────┼── RXD[3:0]
├── RX_DV  ───────────────┼── RX_DV
├── RX_ER  ───────────────┼── RX_ER
├── RX_CTL ───────────────┼── RX_CTL
├── REF_CLK ──────────────┼── REF_CLK(125MHz)
├── MDC    ───────────────┼── MDC
└── MDIO   ───────────────┼── MDIO

5.接口对比与选型建议

特性MIIRMIIGMIIRGMII
信号线数量1672012
千兆支持不支持不支持支持支持
时钟设计发送 / 接收独立时钟共享参考时钟发送 / 接收独立时钟共享参考时钟
硬件成本
适用场景传统百兆设备嵌入式低引脚设计早期千兆设备主流千兆设备

选型建议: 百兆场景:优先选 RMII(引脚少,成本低),兼容 MII 千兆场景:首选 RGMII(信号线少,兼容性好),GMII 仅用于旧方案 硬件设计:注意时钟稳定性(如 REF_CLK 需精确到 ±50ppm),数据线等长布线(误差≤5mil),匹配电阻(如 RGMII 的 TX/RX 需 50Ω 端接)

RK3568 RJ45插座与PHY芯片连接: 在这里插入图片描述 由于RK3568处理器内部集成了MAC控制器,所以PHY芯片直接连接到了处理器对应的MAC控制器上,从原理图得知RK3568使用的是RGMII接口。

六、MDIO 接口:PHY 芯片的控制通道

1.MDIO 概述与基本概念

MDIO(Management Data Input/Output)是 IEEE 802.3 定义的标准接口,专门用于管理和配置以太网 PHY 芯片。它通过两根信号线实现 MAC 控制器与 PHY 之间的通信,主要功能包括:

PHY 寄存器访问:读取 / 写入 PHY 内部寄存器(如状态寄存器、控制寄存器) 自动协商控制:配置 PHY 的工作模式(速率、双工等) 链路状态监测:实时获取连接状态、信号质量等信息

MDIO 接口的核心特点:

双线结构:仅需两根线(MDC 时钟线 + MDIO 数据线) 半双工通信:同一时刻数据只能单向传输 多设备支持:通过设备地址可连接多个 PHY(最多 32 个) 低速率通信:时钟频率通常≤2.5MHz(标准未限制,但受限于 PHY 实现)

2.MDIO 信号定义与电气特性

MDIO 接口由两根信号线组成:

MDC(Management Data Clock): 由 MAC 控制器提供的时钟信号 频率范围:典型值 2.5MHz(实际取决于系统设计) 占空比要求:45%~55% MDIO(Management Data I/O): 双向数据线,用于传输命令和数据 信号电平:与系统逻辑电平一致(如 3.3V 或 1.8V) 需上拉电阻(典型值 10kΩ)

MDIO 与 PHY 的连接方式:

MAC 的 MDC 引脚连接所有 PHY 的 MDC 引脚(共享时钟) MAC 的 MDIO 引脚通过多路复用连接各 PHY 的 MDIO 引脚 每个 PHY 通过唯一的设备地址(0~31)被识别

3.MDIO 通信协议与帧格式

MDIO 采用同步串行通信协议,数据传输基于帧结构,每个帧包含:

  1. 前导码(Preamble): 32 个连续的逻辑 '1' 作用:使接收方同步时钟
  2. 起始码(Start Code): 固定值 '01' 标识帧的开始
  3. 操作码(OP Code): 2 位:'10' 表示读操作,'01' 表示写操作
  4. PHY 地址(PHY Address): 5 位:标识总线上的目标 PHY(0~31)
  5. 寄存器地址(Register Address): 5 位:指定 PHY 内部寄存器地址(0~31)
  6. turnaround 位(TA): 2 位: 写操作时:PHY 发送 '10' 表示准备接收数据 读操作时:PHY 发送 '01' 表示数据有效
  7. 数据(Data): 16 位:读写操作的数据内容

帧格式示意图:

在这里插入图片描述

4.MDIO 典型寄存器及其功能

PHY 芯片通常包含多个标准寄存器(地址 0~31),常见寄存器如下: 在这里插入图片描述

七、IP 地址与 PHY 地址的解析

1.IP 地址:

IP 地址(Internet Protocol Address)是互联网中设备的唯一标识符,它如同现实世界中的门牌号,让数据报文能准确找到目标设备。从技术本质到应用场景,IP 地址蕴含着丰富的网络通信逻辑。

  1. IP 地址的技术定义与功能 逻辑寻址本质:IP 地址是基于 TCP/IP 协议的逻辑地址,不依赖硬件物理特性,可根据网络拓扑动态变更。 通信核心作用:在网络层(OSI 模型第 3 层)实现设备间的路由与寻址,是跨网络通信的基础。 与 MAC 地址的区别: IP 地址:网络层逻辑地址,可变更(如 DHCP 动态分配),用于跨子网通信。 MAC 地址:数据链路层物理地址(烧录在网卡芯片),全球唯一,用于局域网内通信。
  2. IP 地址的分类与结构 以 IPv4 为例,其地址采用 32 位二进制数,通常表示为点分十进制(如 192.168.1.1),由网络号和主机号两部分组成,不同类别对应不同的地址范围:
类别网络号长度地址范围(十进制)适用场景
A 类8 位1.0.0.0~126.0.0.0大型网络
B 类16 位128.0.0.0~191.255.0.0中型网络
C 类24 位192.0.0.0~223.255.255.0小型网络
D 类-224.0.0.0~239.255.255.255组播地址
E 类-240.0.0.0~255.255.255.255科研预留

示例:C 类地址192.168.1.100中,192.168.1是网络号,100是主机号。

  1. IP 地址的分配与管理 动态分配(DHCP):通过 DHCP 服务器自动分配 IP 地址,适用于家庭网络、办公网络等场景(租期到期需续约)。 静态分配:手动配置固定 IP 地址,常用于服务器、网络设备(如路由器)等需要稳定地址的场景。 特殊 IP 地址: 127.0.0.1:本地回环地址,用于测试本机网络协议。 255.255.255.255:广播地址,用于向局域网内所有设备发送报文。 0.0.0.0:未指定地址,常用于设备启动时的临时状态。
  2. IPv6 对 IP 地址的演进 由于 IPv4 地址资源枯竭,IPv6 采用 128 位地址(如2001:0db8:85a3:0000:0000:8a2e:0370:7334),主要优势包括:

地址数量:理论上可提供2^128个地址,彻底解决地址短缺问题。 自动配置:支持无状态地址自动配置(SLAAC),简化网络部署。 报头优化:减少报头开销,提升网络传输效率。

2.PHY 地址:物理层芯片的硬件标识符

PHY(物理层)地址是以太网物理层芯片(PHY 芯片)的硬件地址,用于在 MDIO(管理数据输入 / 输出)接口中唯一标识芯片,是底层网络通信的关键参数。

  1. PHY 地址的作用与应用场景 MDIO 通信标识:在以太网中,MAC 控制器通过 MDIO 接口与 PHY 芯片通信时,需指定目标 PHY 的地址(类似 I2C 总线的从机地址)。 多 PHY 场景:当一个 MDIO 总线上连接多个 PHY 芯片时,每个芯片必须配置唯一的 PHY 地址(0~31,共 32 个可选地址),避免通信冲突。 硬件层面寻址:与 IP 地址的逻辑寻址不同,PHY 地址是基于硬件接口的物理寻址,用于底层寄存器的读写操作。
  2. PHY 地址的确定方式 PHY 地址的配置通常有以下几种方式:

硬件引脚配置:通过 PHY 芯片的专用引脚(如PHYAD0、PHYAD1)接地或接电源,组合不同电平来设置地址(如 2 位引脚可配置 0~3 共 4 个地址)。 自动检测(Auto-Negotiation):部分 PHY 芯片支持在初始化时自动协商地址,但需 MAC 控制器配合。 软件强制配置:在设备驱动中通过 MDIO 接口直接写入 PHY 地址寄存器(仅适用于单 PHY 场景)。

3.PHY芯片调试

下面是RK3568 PHY芯片地址:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述 通过命令读取phy寄存器的值: 在这里插入图片描述 RTL8211寄存器描述: 在这里插入图片描述 bit0.15表示第0号寄存器第15位

对寄存器进行写操作

echo 0x00 0x40 > phy_registers

在这里插入图片描述

4.IP 地址与 PHY 地址的对比与关联

维度IP 地址PHY 地址
所属层面网络层(逻辑寻址)物理层(硬件寻址)
地址范围IPv4: 0.0.0.0~255.255.255.2550~31(5 位二进制)
分配方式动态(DHCP)或静态手动配置硬件引脚、自动协商或软件配置
作用场景跨网络通信、路由寻址MDIO 接口中 PHY 芯片的唯一标识
关联关系通过 MAC 地址间接关联 PHY 芯片的物理通信是底层物理通信的基础

八、RK3568 以太网驱动

在 Linux 内核中开发 RK3568 的以太网驱动,需要完成以下几个关键步骤:

1. 配置MAC控制器驱动

源码路径:kernel/drivers/net/ethernet/stmicro/stmmac 在kernel路径下使用make menuconfig命令

Device Drivers --->
	Network Device Support --->
		Ethernet Drivers Support --->
			STMicroelectronics Devices 
		

在这里插入图片描述

在这里插入图片描述

2. 配置PHY驱动

源码路径:kernel/drivers/net/phy

Device Drivers --->
	Network Device Support --->
		PHY Device support and infrastructure --->
			Driver for Rockchip Ethernet PHYS --->
		

在这里插入图片描述 在这里插入图片描述

3.设备树配置

dts文件:kernel/arch/arm64/boot/dts/rockchip/rk3568.dtsi

/* RK3568 第一个千兆以太网控制器(GMAC0)设备树节点 */
gmac0: ethernet@fe2a0000 {
    /* 兼容性声明:支持Rockchip RK3568的GMAC控制器,基于Synopsys DWMAC 4.20a内核 */
    compatible = "rockchip,rk3568-gmac", "snps,dwmac-4.20a";
    
    /* 内存映射:基地址为0xfe2a0000,大小为64KB(0x10000) */
    reg = <0x0 0xfe2a0000 0x0 0x10000>;
    
    /* 中断配置:
     * - 主中断使用SPI 27,高电平触发
     * - 唤醒中断使用SPI 24,高电平触发
     */
    interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>,
                 <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
    interrupt-names = "macirq", "eth_wake_irq";
    
    /* 引用全局寄存器文件(GRF) */
    rockchip,grf = <&grf>;
    
    /* 时钟配置:共9个时钟源,用于不同功能 */
    clocks = <&cru SCLK_GMAC0>, <&cru SCLK_GMAC0_RX_TX>,
             <&cru SCLK_GMAC0_RX_TX>, <&cru CLK_MAC0_REFOUT>,
             <&cru ACLK_GMAC0>, <&cru PCLK_GMAC0>,
             <&cru SCLK_GMAC0_RX_TX>, <&cru CLK_GMAC0_PTP_REF>,
             <&cru PCLK_XPCS>;
    clock-names = "stmmaceth", "mac_clk_rx",
                  "mac_clk_tx", "clk_mac_refout",
                  "aclk_mac", "pclk_mac",
                  "clk_mac_speed", "ptp_ref",
                  "pclk_xpcs";
    
    /* 复位控制:通过SRST_A_GMAC0信号复位控制器 */
    resets = <&cru SRST_A_GMAC0>;
    reset-names = "stmmaceth";
    
    /* 启用混合突发模式:允许不同长度的突发传输 */
    snps,mixed-burst;
    
    /* 启用TCP分段卸载(TSO):减轻CPU处理负担 */
    snps,tso;
    
    /* 引用AXI总线配置参数 */
    snps,axi-config = <&gmac0_stmmac_axi_setup>;
    
    /* 引用接收队列配置参数:使用1个接收队列 */
    snps,mtl-rx-config = <&gmac0_mtl_rx_setup>;
    
    /* 引用发送队列配置参数:使用1个发送队列 */
    snps,mtl-tx-config = <&gmac0_mtl_tx_setup>;
    
    /* 当前设备状态为禁用,需修改为"okay"启用 */
    status = "disabled";
    
    /* MDIO总线节点:用于连接和管理PHY芯片 */
    mdio0: mdio {
        compatible = "snps,dwmac-mdio";
        #address-cells = <0x1>;  /* PHY地址使用1个cell表示 */
        #size-cells = <0x0>;     /* PHY大小不使用cell表示 */
    };
    
    /* AXI总线配置:
     * - 写操作延迟限制:4个周期
     * - 读操作延迟限制:8个周期
     * - 突发长度支持:0,0,0,0,16,8,4字节
     */
    gmac0_stmmac_axi_setup: stmmac-axi-config {
        snps,wr_osr_lmt = <4>;
        snps,rd_osr_lmt = <8>;
        snps,blen = <0 0 0 0 16 8 4>;
    };
    
    /* 接收队列配置:使用1个接收队列 */
    gmac0_mtl_rx_setup: rx-queues-config {
        snps,rx-queues-to-use = <1>;
        queue0 {};
    };
    
    /* 发送队列配置:使用1个发送队列 */
    gmac0_mtl_tx_setup: tx-queues-config {
        snps,tx-queues-to-use = <1>;
        queue0 {};
    };
};

dts文件:kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi

&gmac0 {
    /* PHY接口模式配置:使用RGMII(简化千兆媒体独立接口),支持10/100/1000Mbps */
    phy-mode = "rgmii";
    
    /* 时钟输入输出模式:设置为输入模式,使用外部时钟源 */
    clock_in_out = "input";
    
    /* 复位GPIO配置:
     * - 使用GPIO3组的PB7引脚
     * - 低电平有效(ACTIVE_LOW)
     */
    snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
    
    /* 复位信号有效电平:确认复位信号为低电平有效 */
    snps,reset-active-low;
    
    /* 复位时序延迟配置(单位:微秒):
     * - 第一个参数:复位前延迟(0μs)
     * - 第二个参数:复位脉冲宽度(20ms=20000μs)
     * - 第三个参数:复位后延迟(100ms=100000μs,针对RTL8211F PHY)
     */
    snps,reset-delays-us = <0 20000 100000>;
    
    /* 分配时钟源:
     * - SCLK_GMAC0_RX_TX:接收/发送时钟
     * - SCLK_GMAC0:主时钟
     */
    assigned-clocks = <&cru SCLK_GMAC0_RX_TX>, <&cru SCLK_GMAC0>;
    
    /* 时钟源父节点:
     * - SCLK_GMAC0_RGMII_SPEED:RGMII模式速度时钟
     * - gmac0_clkin:外部输入时钟
     */
    assigned-clock-parents = <&cru SCLK_GMAC0_RGMII_SPEED>, <&gmac0_clkin>;
    
    /* 时钟速率配置:
     * - 第一个时钟:动态速率(0表示由硬件自动协商)
     * - 第二个时钟:固定125MHz(用于千兆模式)
     */
    assigned-clock-rates = <0>, <125000000>;
    
    /* 引脚控制配置:
     * - default:默认引脚组
     * - 包含MIIM总线、发送总线、接收总线、RGMII时钟等引脚配置
     */
    pinctrl-names = "default";
    pinctrl-0 = <&gmac0_miim
                &gmac0_tx_bus2
                &gmac0_rx_bus2
                &gmac0_rgmii_clk
                &gmac0_rgmii_bus
                &gmac0_clkinout>;
    
    /* 收发延迟配置(单位:纳秒,通过寄存器设置):
     * - tx_delay:发送延迟0x3c(十进制60,具体延迟需参考芯片手册)
     * - rx_delay:接收延迟0x2f(十进制47)
     */
    tx_delay = <0x3c>;
    rx_delay = <0x2f>;
    
    /* PHY句柄引用:关联到rgmii_phy0节点(通常为外部PHY芯片) */
    phy-handle = <&rgmii_phy0>;
    
    /* 设备状态:设置为"okay"表示启用该以太网控制器 */
    status = "okay";
};

4.编译烧录验证

在这里插入图片描述