Rockchip RK3588 - 网卡RTL8211F驱动
一、网卡基础知识
在《Mini2440
裸机开发之DM9000
》文章中我们对DM9000
网卡进行了深入的分析,介绍了其硬件组成以及初始化过程。
在网络通信中,网卡通常由MAC
和PHY
两个主要部分组成:
MAC
负责处理数据链路层的协议和控制;PHY
负责处理数据在物理介质上的传输;
本文主要介绍以太网的MAC
(Media Access Control
,即媒体访问控制子层协议)、PHY
(Physical Layer
,即物理层)、MAC
和PHY
之间的MII
(Media Independent Interface
,媒体独立接口),以及MII
的各种衍生版本——GMII
、SGMII
、RMII
、RGMII
等。
1.1 以太网接口电路
从硬件的角度看,以太网接口电路主要由MAC
控制器和物理层接口PHY
两大部分构成。如下图所示:

DMA
控制器通常属于CPU
的一部分,用虚线放在这里是为了表示DMA
控制器可能会参与到网口数据传输中。
但是,在实际的设计中,以上三部分并不一定独立分开的。 由于,PHY
整合了大量模拟硬件,而MAC
是典型的全数字器件。
考虑到芯片面积及模拟/数字混合架构的原因,通常,将MAC
集成进微控制器而将PHY
留在片外。更灵活、密度更高的芯片技术已经可以实现MAC
和PHY
的单芯片整合。可分为下列几种类型:
CPU
内部集成了MAC
和PHY
(难度较高);CPU
内部集成MAC
,PHY
采用独立芯片 (主流方案);CPU
不集成MAC
和PHY
,MAC
和PHY
采用独立芯片或者集成芯片 (高端采用)。
1.1.1 CPU
集成MAC
与PHY
目前来说并不多见:
1.1.2 CPU
集成MAC
,PHY
采用独立芯片
比较常见:
1.1.3 CPU
不集成MAC
与PHY
,MAC
与PHY
采用集成芯片
比较常见,比如我们之前介绍的Mnini2440
开发板就是采用的这种方式,S3C2440
处理其外接DM9000
网卡;
1.2 网卡和网络模型的映射关系
MAC
及PHY
工作在OSI
七层模型的数据链路层和物理层。MAC
对应的是数据链路层,PHY
对应的是物理层,具体如下:

1.2.1 MAC
MAC
(Media Access Control
)即媒体访问控制子层协议。该部分有两个概念:MAC
可以是一个硬件控制器 及MAC
通信以协议。
该协议位于OSI
七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。MAC
硬件大约就是下面的样子了:

在发送数据的时候,MAC
协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;

在接收数据的时候,MAC
协议首先判断输入的信息并是否发生传输错误,如果没有错误,则去掉控制信息发送至LLC
(逻辑链路控制)层。该层协议是以太网MAC
由IEEE-802. 3
以太网标准定义。
以太网数据链路层其实包含MAC
(介质访问控制)子层和LLC
(逻辑链路控制)子层。一块以太网卡MAC
芯片的作用不但要实现MAC
子层和LLC
子层的功能,还要提供符合规范的PCI
界面以实现和主机的数据交换。
以太网MAC
芯片的一端接计算机PCI
总线,另外一端就接到PHY
芯片上,它们之间是通过MII
接口链接的。一个MAC
的结构图如下图所示:

1.2.2 PHY
PHY
(Physical Layer
,物理层))是IEEE802.3
中定义的一个标准模块,STA
(station management entity
,管理实体,一般为MAC
或CPU
)通过SMI
(Serial Manage Interface
)对PHY
的行为、状态进行管理和控制,而具体管理和控制动作是通过读写PHY
内部的寄存器实现的。一个PHY
的基本结构如下图:
PHY
是物理接口收发器,它实现OSI
模型的物理层。IEEE-802.3
标准定义了以太网PHY
。包括MII/GMII
(介质独立接口)子层、PCS
(物理编码子层)、PMA
(物理介质附加)子层、PMD
(物理介质相关)子层、MDI
子层。它符合IEEE-802.3k
中用于10BaseT
(第14条)和100BaseTX
(第24条和第25条)的规范。
注:PHY
寄存器在IEEE802.3
标准的22.2.4 Management functions
节有介绍,但不涉及所有的寄存器,个别寄存器需要到其它章节中看,当然,文档里面也提到该在哪里找到哪个寄存器。
1.3 MII
MII
(Media Independent Interface
)即媒体独立接口,MII
接口是MAC
与PHY
连接的标准接口。它是IEEE-802.3
定义的以太网行业标准。
MII
接口提供了MAC
与PHY
之间、PHY
与STA
(Station Management
)之间的互联技术,该接口支持10Mb/s
与100Mb/s
的数据传输速率,数据传输的位宽为4位。
"媒体独立"表明在不对MAC
硬件重新设计或替换的情况下,任何类型的PHY
设备都可以正常工作。802.3
协议最多支持32
个PHY
,但有一定的限制:要符合协议要求的connector
特性。MII
接口如下图所示:

为了支持更高的传输速率,后来还有GMII
(1Gbps
)、10GMII
、25GMII
、200GMII
和500GMII
等。
1.3.1 RS
与MII
提到MII
,就有可能涉及到RS
,PLS
,STA
等名词术语,下面讲一下他们之间对应的关系。
所谓RS
即Reconciliation sublayer
,它的主要功能主要是提供一种MII
和MAC/PLS
之间的信号映射机制。它们(RS
与MII
)之间的关系如下图:

MII
的Management Interface
是与STA
(Station Management
)相连的。
1.3.2 MII
接口定义
MII
接口主要包括四个部分:
- 一是从
MAC
层到PHY
层的发送数据接口; - 二是从
PHY
层到MAC
层的接收数据接口; - 三是从
PHY
层到MAC
层的状态指示信号; - 四是
MAC
层和PHY
层之间传送控制和状态信息的MDIO
接口。
MII
接口共包含18
个主要信号引脚,分为数据通道、控制信号和管理接口三类:
信号类型 | 信号名称 | 方向(MAC侧) | 描述 |
---|---|---|---|
数据发送 | TX_CLK | 输入 | 发送时钟(由PHY提供,频率:10Mbps=2.5MHz,100Mbps=25MHz) |
TXD[3:0] | 输出 | 4位发送数据(MAC → PHY) | |
TX_EN | 输出 | 发送使能信号(高电平有效) | |
TX_ER | 输出 | 发送错误指示(可选,高电平表示数据错误) | |
数据接收 | RX_CLK | 输入 | 接收时钟(由PHY提供,频率同TX_CLK) |
RXD[3:0] | 输入 | 4位接收数据(PHY → MAC) | |
RX_DV | 输入 | 接收数据有效(高电平有效) | |
RX_ER | 输入 | 接收错误指示(可选) | |
载波侦听 | CRS | 输入 | 载波侦听(高电平表示信道被占用) |
冲突检测 | COL | 输入 | 冲突检测(仅半双工模式下有效) |
管理接口 | MDC | 输出 | 管理时钟(≤2.5MHz),用于配置PHY寄存器 |
MDIO | 双向 | 管理数据线(遵循IEEE 802.3 Clause 22协议) | |
其他 | RESET | 输出 | PHY复位信号(低电平有效) |
CLK_25MHz | 输出 | 可选,MAC为PHY提供25MHz参考时钟(某些PHY需要) |
1.3.2.1 数据发送通道(MAC
→ PHY
):
TX_CLK
:- 来源:
PHY
生成的时钟,频率由当前速率决定(10Mbps=2.5MHz
,100Mbps
=25MHz
); - 作用:同步
TXD
、TX_EN
、TX_ER
信号,上升沿有效。
- 来源:
TXD[3:0]
:- 数据格式:每个时钟周期传输
4
位数据(半字节),组成完整字节需2
个周期; - 时序规则:在
TX_EN=1
时有效,数据按大端序传输(TXD[3]
为最高位)。
- 数据格式:每个时钟周期传输
TX_EN
:- 高电平:表示
TXD
数据有效,PHY
应开始发送数据帧; - 低电平:数据无效,
PHY
发送空闲码(IDLE
)。
- 高电平:表示
TX_ER
:- 可选信号:用于指示当前发送的数据存在错误(如
CRC
错误),需在TX_EN=1
期间触发。
- 可选信号:用于指示当前发送的数据存在错误(如
1.3.2.2 数据接收通道(PHY
→ MAC
)
RX_CLK
:- 频率:与
TX_CLK
同步,由PHY
提供。
- 频率:与
RXD[3:0]
:- 数据有效条件:
RX_DV=1
时,数据为有效帧内容;RX_DV=0
时,可能为前导码或空闲码。
- 数据有效条件:
RX_DV
:- 作用:标识
RXD
数据是否属于有效帧(高电平期间为有效数据)。
- 作用:标识
RX_ER
:- 触发条件:
PHY
检测到接收错误(如帧校验错误或冲突)。
- 触发条件:
1.3.2.3 冲突与载波管理
CRS(Carrier Sense)
:- 高电平:表示网络介质上有数据传输(信道忙);
- 低电平:信道空闲。
COL(Collision Detect)
:- 仅半双工模式有效:高电平表示检测到数据冲突(需
MAC
层重发)。
- 仅半双工模式有效:高电平表示检测到数据冲突(需
1.3.3 MII
接口工作模式
10Mbps
模式:
- 时钟频率:
TX_CLK/RX_CLK = 2.5MHz
; - 数据速率:
4位 × 2.5MHz = 10Mbps
; - 数据对齐:每
2
个时钟周期传输1
字节(8
位)。
100Mbps
模式:
-
时钟频率:
TX_CLK/RX_CLK = 25MHz
; -
数据速率:
4位 × 25MHz = 100Mbps
; -
数据对齐:每
2
个时钟周期传输1
字节(8
位)。
1.4 MAC
层与PHY
层的核心分工
层级 | MAC层 | PHY层 |
---|---|---|
所属OSI模型 | 数据链路层(Layer 2) | 物理层(Layer 1) |
核心功能 | 数据帧封装、流量控制、错误校验(CRC) | 信号调制、电平转换、时钟恢复、介质驱动 |
数据形式 | 数字信号(逻辑0/1) | 模拟信号(电压/光脉冲/电磁波) |
典型操作 | 以太网帧组装、MAC地址过滤 | 差分信号驱动、阻抗匹配、信号整形 |
1.4.1 什么不能仅保留MAC
层
1)信号转换需求
MAC
输出的是数字信号,无法直接驱动物理介质(如电缆、光纤)。例如:
- 以太网双绞线需要 差分曼彻斯特编码信号(
±2.5V
电平); - 光纤需要光脉冲调制(通过激光/
LED
驱动)。
PHY
的核心作用:将MAC
的数字信号转换为物理介质支持的模拟信号(反之亦然)。
2)物理介质适配
不同介质需要不同的电气特性:
介质类型 | PHY处理要点 |
---|---|
双绞线(RJ45) | 差分信号驱动、阻抗匹配(100Ω)、回波抵消 |
光纤(SFP) | 光模块驱动、光功率控制 |
同轴电缆 | 信号放大、噪声抑制 |
若只有MAC
:无法适配多种介质,需为每种介质单独设计硬件。
3)信号完整性与抗干扰
PHY
负责信号增强:长距离传输时,信号会衰减并引入噪声。PHY
通过均衡器(EQ
)和时钟恢复电路补偿信号畸变;例如:
- 千兆以太网
PHY
使用自适应均衡技术消除码间干扰(ISI
)。
MAC
无法处理模拟问题: MAC
层仅处理数字逻辑,无法解决信号衰减、反射、串扰等物理层问题。
4)协议标准化
PHY
实现物理层标准,例如IEEE 802.3
对10BASE-T
、100BASE-TX
、1000BASE-T
的电气特性有严格规范,PHY
确保符合标准。
若跳过PHY
:不同厂商设备间可能因电平、时序差异无法互通。
1.4.2 总结
PHY
的必要性:MAC
层处理数字逻辑,PHY
解决物理信号转换、介质适配和信号完整性问题。两者缺一不可。
类比:MAC
如同“交通规则制定者”,而PHY
是“道路建设者和信号灯控制器”。没有PHY
,MAC
的规则无法在现实世界中落地执行。
最终结论:网卡需要PHY
的根本原因在于数字世界与物理世界的鸿沟——MAC
负责数据组织,PHY
负责让数据在现实介质中可靠传输。
二、硬件原理图
2.1 RK3588
侧
RK3588
芯片拥有2个GMAC
控制器(GMAC
是千兆MAC
),提供RMII
或RGMII
接口连接外置的Ethernet PHY
;
GMAC
控制器支持以下功能:
- 支持
10/100/1000 Mbps
数据传输速率的RGMII
接口; - 支持
10/100 Mbps
数据传输速率的RMII
接口。 GMAC0
的RGMII/RMII
接口复用在VCCIO3
电源域;
RK3588
平台默认支持的是RTL8211F
,以太网模块的硬件相关的驱动代码主要包括GMAC
和PHY
。


2.1.1 RGMII
接口
RGMII
接口分为 发送方向(TX
)和接收方向(RX
),共12
个引脚:
引脚类型 | 信号名称 | 方向(MAC侧) | 描述 |
---|---|---|---|
发送方向 | TX_CLK | 输出 | 125MHz时钟(MAC → PHY),DDR模式,上升沿和下降沿均有效 |
TXD[3:0] | 输出 | 4位发送数据,每个时钟周期传输2次(DDR模式) | |
TX_CTL | 输出 | 控制信号:TX_EN(数据有效) + TX_ERR(错误指示) | |
接收方向 | RX_CLK | 输入 | 125MHz时钟(PHY → MAC),DDR模式,上升沿和下降沿均有效 |
RXD[3:0] | 输入 | 4位接收数据,每个时钟周期传输2次(DDR模式) | |
RX_CTL | 输入 | 控制信号:RX_DV(数据有效) + RX_ERR(错误指示) | |
管理接口 | MDC | 输出 | 管理时钟(≤2.5MHz),用于配置PHY寄存器 |
MDIO | 双向 | 管理数据线,遵循IEEE 802.3 Clause 22/45协议 |
在RK3588
电路原理图中除了如上引脚,我们还看到了:
TX_EN
:RMII
接口使用;REFCLKO_25M
:RMII
接口使用;RXDV_CRS
:RMII
接口使用;
RMII
接口通过减少引脚数量(仅需 7
个核心信号)实现100Mbps
以太网通信,适用于资源受限的嵌入式系统,这里不做过多介绍。
此外还有一个MCLKINOUT
接口,MCLKINOUT
是RK3588
与外部以太网PHY
芯片时钟交互的核心引脚,其灵活的双向设计支持多种PHY
配置方案;
- 时钟源模式:当外部
PHY
芯片无内置振荡器时,RK3588
通过MCLKINOUT
输出参考时钟供PHY
使用; - 时钟接收模式:当
PHY
芯片自带振荡器时,RK3588
通过MCLKINOUT
接收PHY
提供的时钟信号。
2.1.2 时序与DDR
模式
时钟频率:125MHz
(千兆模式下),每个时钟周期传输 8
位数据(4
位×2
次)。
DDR
传输规则:
- 发送端(
MAC
→PHY
)- 上升沿:发送低
4
位(TXD[3:0]
=D[3:0]
); - 下降沿:发送高
4
位(TXD[3:0]
=D[7:4]
);
- 上升沿:发送低
- 接收端(
PHY
→MAC
)- 上升沿:捕获低
4
位(RXD[3:0]
=D[3:0]
); - 下降沿:捕获高
4
位(RXD[3:0]
=D[7:4]
)。
- 上升沿:捕获低
2.2 RTL8211F
Realtek
的RTL8211F
是一款10/100/1000Mbps
的PHY
芯片, PHY
芯片广泛用于机顶盒,瘦客户机,路由器,工业产品等。
RTL8211F
是一个系列的产品,还有很多子型号,不同的型号与主控接口会有区别,适应不同平台的使用。例如:
-
RTL8211F-CG
: 只支持RGMII
, 不支持SGMII
; -
RTL8211FS-CG
: 同时支持SGMII
和RGMII
。
所以针对不同的应用,RTL8211F
均可以提供不同型号的对应的芯片,满足实际应用的需要。
PHY
芯片电路相对简单,有了PHY
芯片后,可以为一个设备增加一个网口,使产品有了与网络互联互通的能力,PHY
芯片与主控芯片(如瑞芯微RK3588
)可以通过RGMII/RMII/MII
进行连接,可以与各种带有不同接口的主控进行连接。
2.3 H5007
网络变压器
在以太网接口设计中,除了PHY
芯片(如RTL8211F
),网络变压器(如H5007
) 是必不可少的组件,
2.3.1 核心功能
网络变压器(H5007
)的核心功能:
功能 | 说明 | 未使用变压器的风险 |
---|---|---|
电气隔离 | 隔离PHY芯片与外部网络(隔离电压通常≥1500V) | 雷击或电源浪涌直接损坏PHY芯片 |
阻抗匹配 | 将PHY输出阻抗(如50Ω)转换为双绞线标准阻抗(100Ω差分) | 信号反射导致眼图闭合,误码率升高 |
共模噪声抑制 | 滤除双绞线引入的共模干扰(如电源噪声、EMI) | 数据被噪声淹没,通信稳定性下降 |
直流偏置隔离 | 阻隔PHY与网线间的直流电位差 | 接地环路电流导致设备损坏或数据错误 |
信号电平转换 | 将PHY输出的低压差分信号(如1.1V)提升至网线标准电平(±2.5V) | 传输距离大幅缩短(从100米降至不足10米) |
2.3.2 数据传输流
开发板的千兆以太网接口数据传输流如下:
RK3588 MAC → RGMII接口 → RTL8211F PHY → H5007变压器 → RJ45插座 → 外部网络
发送路径:
RTL8211F
将RGMII
的4
位DDR
信号转换为串行差分信号(TXP/TXN
);H5007
将TXP/TXN
的1.1V
低压差分信号升压至±2.5V
,并通过阻抗匹配网络驱动双绞线。
接收路径:
H5007
从双绞线接收±2.5V
信号,降压至1.1V
后送入RTL8211F
的RXP/RXN
;PHY
内部均衡器补偿信号衰减,恢复出干净的数字化信号。
三、GMAC
设备树配置
以太网模块的硬件相关的驱动代码主要包括GMAC
和PHY
。其中PHY
驱动一般使用通用PHY
驱动,
如果有需要修改特殊寄存器,请使用对应的PHY
驱动,代码都在drivers/net/phy
。
3.1 mac
配置
DTS
的配置参考Documentation/devicetree/bindings/net/rockchip-dwmac.yaml
,这个配置文件描述Rockchip 10/100/1000
以太网控制器(GMAC
)驱动的设备树(Device Tree
)配置。
以如下配置为例:
gmac: ethernet@ff290000 {
compatible = "rockchip,rk3288-gmac";
reg = <0xff290000 0x10000>;
interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "macirq";
rockchip,grf = <&grf>;
clocks = <&cru SCLK_MAC>,
<&cru SCLK_MAC_RX>, <&cru SCLK_MAC_TX>,
<&cru SCLK_MACREF>, <&cru SCLK_MACREF_OUT>,
<&cru ACLK_GMAC>, <&cru PCLK_GMAC>;
clock-names = "stmmaceth",
"mac_clk_rx", "mac_clk_tx",
"clk_mac_ref", "clk_mac_refout",
"aclk_mac", "pclk_mac";
phy-mode = "rgmii";
pinctrl-names = "default";
pinctrl-0 = <&rgmii_pins /*&rmii_pins*/>;
clock_in_out = "input";
snps,reset-gpio = <&gpio4 7 0>;
snps,reset-active-low;
snps,reset-delays-us = <0 10000 1000000>;
assigned-clocks = <&cru SCLK_MAC>;
assigned-clock-parents = <&ext_gmac>;
tx_delay = <0x30>;
rx_delay = <0x10>;
status = "ok";
};
其中:
compatible
:用于指定硬件设备的兼容性标识符,设备树中的compatible
属性决定了设备驱动如何识别和处理这个硬件设备。可选的配置有rockchip,rk3528-gmac
、rockchip,rk3562-gmac
、rockchip,rk3568-gmac
、rockchip,rk3588-gmac
等;reg
:指定了设备的物理内存映射地址和大小;0xff290000
是以太网控制器(GMAC
)寄存器的起始地址;0x10000
是该寄存器区域的大小,单位是字节(16KB
);
interrupts
: 属性指定了设备中断的类型和配置。在设备树中,它通常是一个数组,其中每个条目表示一个中断源的配置;在这个例子中:GIC_SPI
表示该中断是一个Shared Peripheral Interrupt
(共享外设中断),这种中断由ARM
的通用中断控制器(GIC
)来管理;27
是该中断的编号,表示该中断在GIC
中的具体标识符。IRQ_TYPE_LEVEL_HIGH
表示该中断是一个电平触发(level-triggered
)中断,并且是高电平触发的(即只有在中断信号处于高电平时,才会触发中断请求);
interrupt-names
: 为每个中断指定一个名称。在此例中,"macirq"
是该中断的名称;rockchip,grf
:这是Rockchip
系统的一个通用寄存器文件(GRF
)的引用。这个寄存器文件通常用于控制系统的多个硬件模块,并且需要通过该设备树节点来进行访问;clocks
:定义了该设备需要的时钟源,要求最少5个,最多8个时钟源;clock-names
:列出了这些时钟源的名称,包括stmmaceth
(以太网控制器时钟),mac_clk_tx
(发送时钟),mac_clk_rx
(接收时钟),以及其他与以太网硬件相关的时钟信号;phy-mode
:主要分为RMII
和RGMII
模式;pinctrl
:RGMII
和RMII
模式下配置不一样,另外对于时钟方式,如果是输出时钟的pin
脚,该pin
脚驱动强度一般也是不一样的,例如RMII
模式下ref_clock pin
脚输出时钟时,驱动强度也会配置更大;clock_in_out
:描述了时钟的输入输出方向。对于不同类型的以太网接口(如RGMII
和RMII
),时钟的来源不同;- 如果是
RGMII
,主时钟(125MHz
)是由PHY
提供的,而不是由SoC
(系统单芯片)的PLL
提供; - 对于
RMII
,时钟的输入和输出方向可能不同,具体取决于PHY
和GMAC
的设置。
- 如果是
snps,reset-gpio
:PHY
的硬件复位脚;snps,reset-delays-us
:PHY
的复位时序,三个时间分别表示PHY
的不同阶段的复位时序,不同的PHY
的复位时序是不一样的;- 如果是
snps,reset-active-low
属性,则表示三个时间分别表示Reset pin
脚拉高,拉低,再拉高的时间; - 如果是
snps,reset-active-high
属性,则反之;
- 如果是
tx_delay
和rx_delay
:这两个属性用于控制以太网传输和接收数据时的延迟。RGMII
模式下需要配置该属性,它们的值范围是0
到0x7F
(即0
到127
),默认值分别为0x30
和0x10
;phy-supply
:如果PHY
的电源是常供方式,可以不用配置;否则,需要配置对应的regulator
;
该设备树节点中必须包含的属性包括 compatible
(硬件兼容性),clocks
(时钟源),和 clock-names
(时钟源名称)。
3.2 gmac0
gmac0
定义在arch/arm64/boot/dts/rockchik/rk3588.dtsi
文件;
gmac0: ethernet@fe1b0000 {
compatible = "rockchip,rk3588-gmac", "snps,dwmac-4.20a";
reg = <0x0 0xfe1b0000 0x0 0x10000>;
interrupts = <GIC_SPI 227 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 226 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "macirq", "eth_wake_irq";
rockchip,grf = <&sys_grf>;
rockchip,php_grf = <&php_grf>;
clocks = <&cru CLK_GMAC_125M>, <&cru CLK_GMAC_50M>,
<&cru PCLK_GMAC0>, <&cru ACLK_GMAC0>,
<&cru CLK_GMAC0_PTP_REF>;
clock-names = "stmmaceth", "clk_mac_ref",
"pclk_mac", "aclk_mac",
"ptp_ref";
resets = <&cru SRST_A_GMAC0>;
reset-names = "stmmaceth";
power-domains = <&power RK3588_PD_GMAC>;
snps,mixed-burst;
snps,tso;
snps,axi-config = <&gmac0_stmmac_axi_setup>;
snps,mtl-rx-config = <&gmac0_mtl_rx_setup>;
snps,mtl-tx-config = <&gmac0_mtl_tx_setup>;
status = "disabled";
mdio0: mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <0x1>;
#size-cells = <0x0>;
};
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>;
};
gmac0_mtl_rx_setup: rx-queues-config {
snps,rx-queues-to-use = <1>;
queue0 {};
};
gmac0_mtl_tx_setup: tx-queues-config {
snps,tx-queues-to-use = <1>;
queue0 {};
};
};
3.3 gmac1
gmac1
定义在arch/arm64/boot/dts/rockchik/rk3588s.dtsi
文件;
gmac1: ethernet@fe1c0000 {
compatible = "rockchip,rk3588-gmac", "snps,dwmac-4.20a";
reg = <0x0 0xfe1c0000 0x0 0x10000>;
interrupts = <GIC_SPI 234 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "macirq", "eth_wake_irq";
rockchip,grf = <&sys_grf>;
rockchip,php_grf = <&php_grf>;
clocks = <&cru CLK_GMAC_125M>, <&cru CLK_GMAC_50M>,
<&cru PCLK_GMAC1>, <&cru ACLK_GMAC1>,
<&cru CLK_GMAC1_PTP_REF>;
clock-names = "stmmaceth", "clk_mac_ref",
"pclk_mac", "aclk_mac",
"ptp_ref";
resets = <&cru SRST_A_GMAC1>;
reset-names = "stmmaceth";
power-domains = <&power RK3588_PD_GMAC>;
snps,mixed-burst;
snps,tso;
snps,axi-config = <&gmac1_stmmac_axi_setup>;
snps,mtl-rx-config = <&gmac1_mtl_rx_setup>;
snps,mtl-tx-config = <&gmac1_mtl_tx_setup>;
status = "disabled";
mdio1: mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <0x1>;
#size-cells = <0x0>;
};
gmac1_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>;
};
gmac1_mtl_rx_setup: rx-queues-config {
snps,rx-queues-to-use = <1>;
queue0 {};
};
gmac1_mtl_tx_setup: tx-queues-config {
snps,tx-queues-to-use = <1>;
queue0 {};
};
};
四、GMAC
调试
4.1 PHY
寄存器读写调试
驱动提供了读写寄存器的接口,这里我们以linux 5.10
为例;
例如, 往Reg0
写入0xabcd
;
echo 0x00 0xabcd > /sys/bus/mdio_bus/devices/stmmac-0:00/phy_registers
亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。
日期 | 姓名 | 金额 |
---|---|---|
2023-09-06 | *源 | 19 |
2023-09-11 | *朝科 | 88 |
2023-09-21 | *号 | 5 |
2023-09-16 | *真 | 60 |
2023-10-26 | *通 | 9.9 |
2023-11-04 | *慎 | 0.66 |
2023-11-24 | *恩 | 0.01 |
2023-12-30 | I*B | 1 |
2024-01-28 | *兴 | 20 |
2024-02-01 | QYing | 20 |
2024-02-11 | *督 | 6 |
2024-02-18 | 一*x | 1 |
2024-02-20 | c*l | 18.88 |
2024-01-01 | *I | 5 |
2024-04-08 | *程 | 150 |
2024-04-18 | *超 | 20 |
2024-04-26 | .*V | 30 |
2024-05-08 | D*W | 5 |
2024-05-29 | *辉 | 20 |
2024-05-30 | *雄 | 10 |
2024-06-08 | *: | 10 |
2024-06-23 | 小狮子 | 666 |
2024-06-28 | *s | 6.66 |
2024-06-29 | *炼 | 1 |
2024-06-30 | *! | 1 |
2024-07-08 | *方 | 20 |
2024-07-18 | A*1 | 6.66 |
2024-07-31 | *北 | 12 |
2024-08-13 | *基 | 1 |
2024-08-23 | n*s | 2 |
2024-09-02 | *源 | 50 |
2024-09-04 | *J | 2 |
2024-09-06 | *强 | 8.8 |
2024-09-09 | *波 | 1 |
2024-09-10 | *口 | 1 |
2024-09-10 | *波 | 1 |
2024-09-12 | *波 | 10 |
2024-09-18 | *明 | 1.68 |
2024-09-26 | B*h | 10 |
2024-09-30 | 岁 | 10 |
2024-10-02 | M*i | 1 |
2024-10-14 | *朋 | 10 |
2024-10-22 | *海 | 10 |
2024-10-23 | *南 | 10 |
2024-10-26 | *节 | 6.66 |
2024-10-27 | *o | 5 |
2024-10-28 | W*F | 6.66 |
2024-10-29 | R*n | 6.66 |
2024-11-02 | *球 | 6 |
2024-11-021 | *鑫 | 6.66 |
2024-11-25 | *沙 | 5 |
2024-11-29 | C*n | 2.88 |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2021-11-27 Mini2440之uboot移植之实践单板添加(一)
2021-11-27 Mini2440之uboot移植之源码分析命令解析(五)