程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)

Rockchip RK3588 - 网卡RTL8211F驱动

一、网卡基础知识

在《Mini2440裸机开发之DM9000》文章中我们对DM9000网卡进行了深入的分析,介绍了其硬件组成以及初始化过程。

在网络通信中,网卡通常由MACPHY两个主要部分组成:

  • MAC负责处理数据链路层的协议和控制;
  • PHY负责处理数据在物理介质上的传输;

本文主要介绍以太网的MACMedia Access Control,即媒体访问控制子层协议)、PHYPhysical Layer,即物理层)、MACPHY之间的MIIMedia Independent Interface,媒体独立接口),以及MII的各种衍生版本——GMIISGMIIRMIIRGMII等。

1.1 以太网接口电路

从硬件的角度看,以太网接口电路主要由MAC控制器和物理层接口PHY两大部分构成。如下图所示:

DMA控制器通常属于CPU的一部分,用虚线放在这里是为了表示DMA控制器可能会参与到网口数据传输中。

但是,在实际的设计中,以上三部分并不一定独立分开的。 由于,PHY整合了大量模拟硬件,而MAC是典型的全数字器件。

考虑到芯片面积及模拟/数字混合架构的原因,通常,将MAC集成进微控制器而将PHY留在片外。更灵活、密度更高的芯片技术已经可以实现MACPHY的单芯片整合。可分为下列几种类型:

  • CPU内部集成了MACPHY (难度较高);
  • CPU内部集成MACPHY采用独立芯片 (主流方案);
  • CPU不集成MACPHYMACPHY采用独立芯片或者集成芯片 (高端采用)。
1.1.1 CPU集成MACPHY

目前来说并不多见:

1.1.2 CPU集成MACPHY采用独立芯片

比较常见:

1.1.3 CPU不集成MACPHYMACPHY采用集成芯片

比较常见,比如我们之前介绍的Mnini2440开发板就是采用的这种方式,S3C2440处理其外接DM9000网卡;

1.2 网卡和网络模型的映射关系

MACPHY工作在OSI七层模型的数据链路层和物理层。MAC对应的是数据链路层,PHY对应的是物理层,具体如下:

1.2.1 MAC

MACMedia Access Control)即媒体访问控制子层协议。该部分有两个概念:MAC可以是一个硬件控制器 及MAC通信以协议。

该协议位于OSI七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。MAC硬件大约就是下面的样子了:

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

img

在接收数据的时候,MAC协议首先判断输入的信息并是否发生传输错误,如果没有错误,则去掉控制信息发送至LLC(逻辑链路控制)层。该层协议是以太网MACIEEE-802. 3以太网标准定义。

以太网数据链路层其实包含MAC(介质访问控制)子层和LLC(逻辑链路控制)子层。一块以太网卡MAC芯片的作用不但要实现MAC子层和LLC子层的功能,还要提供符合规范的PCI界面以实现和主机的数据交换。

以太网MAC芯片的一端接计算机PCI总线,另外一端就接到PHY芯片上,它们之间是通过MII接口链接的。一个MAC的结构图如下图所示:

1.2.2 PHY

PHYPhysical Layer,物理层))是IEEE802.3中定义的一个标准模块,STAstation management entity,管理实体,一般为MACCPU)通过SMISerial Manage Interface)对PHY的行为、状态进行管理和控制,而具体管理和控制动作是通过读写PHY内部的寄存器实现的。一个PHY的基本结构如下图:

9.jpg

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

MIIMedia Independent Interface)即媒体独立接口,MII接口是MACPHY连接的标准接口。它是IEEE-802.3定义的以太网行业标准。

MII接口提供了MACPHY之间、PHYSTA(Station Management)之间的互联技术,该接口支持10Mb/s100Mb/s的数据传输速率,数据传输的位宽为4位。

"媒体独立"表明在不对MAC硬件重新设计或替换的情况下,任何类型的PHY设备都可以正常工作。802.3协议最多支持32PHY,但有一定的限制:要符合协议要求的connector特性。MII接口如下图所示:

为了支持更高的传输速率,后来还有GMII1Gbps)、10GMII25GMII200GMII500GMII等。

1.3.1 RSMII

提到MII,就有可能涉及到RSPLSSTA等名词术语,下面讲一下他们之间对应的关系。

所谓RSReconciliation sublayer,它的主要功能主要是提供一种MIIMAC/PLS之间的信号映射机制。它们(RSMII)之间的关系如下图:

MIIManagement Interface是与STAStation 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 数据发送通道(MACPHY):
  • TX_CLK
    • 来源:PHY生成的时钟,频率由当前速率决定(10Mbps=2.5MHz100Mbps=25MHz);
    • 作用:同步TXDTX_ENTX_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 数据接收通道(PHYMAC
  • 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.310BASE-T100BASE-TX1000BASE-T的电气特性有严格规范,PHY确保符合标准。

若跳过PHY:不同厂商设备间可能因电平、时序差异无法互通。

1.4.2 总结

PHY的必要性:MAC层处理数字逻辑,PHY解决物理信号转换、介质适配和信号完整性问题。两者缺一不可。

类比:MAC如同“交通规则制定者”,而PHY是“道路建设者和信号灯控制器”。没有PHYMAC的规则无法在现实世界中落地执行。

最终结论:网卡需要PHY的根本原因在于数字世界与物理世界的鸿沟——MAC负责数据组织,PHY负责让数据在现实介质中可靠传输。

二、硬件原理图

2.1 RK3588

RK3588芯片拥有2个GMAC控制器(GMAC是千兆MAC),提供RMIIRGMII接口连接外置的Ethernet PHY

GMAC控制器支持以下功能:

  • 支持10/100/1000 Mbps数据传输速率的RGMII接口;
  • 支持10/100 Mbps数据传输速率的RMII接口。
  • GMAC0RGMII/RMII接口复用在VCCIO3电源域;

RK3588平台默认支持的是RTL8211F,以太网模块的硬件相关的驱动代码主要包括GMACPHY

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_ENRMII接口使用;
  • REFCLKO_25MRMII接口使用;
  • RXDV_CRSRMII接口使用;

RMII接口通过减少引脚数量(仅需 7个核心信号)实现100Mbps以太网通信,适用于资源受限的嵌入式系统,这里不做过多介绍。

此外还有一个MCLKINOUT接口,MCLKINOUTRK3588与外部以太网PHY芯片时钟交互的核心引脚,其灵活的双向设计支持多种PHY配置方案;

  • 时钟源模式:当外部PHY芯片无内置振荡器时,RK3588通过MCLKINOUT输出参考时钟供PHY使用;
  • 时钟接收模式:当PHY芯片自带振荡器时,RK3588通过MCLKINOUT接收PHY提供的时钟信号。
2.1.2 时序与DDR模式

时钟频率:125MHz(千兆模式下),每个时钟周期传输 8位数据(4位×2次)。

DDR传输规则:

  • 发送端(MACPHY
    • 上升沿:发送低4位(TXD[3:0] = D[3:0]);
    • 下降沿:发送高4位(TXD[3:0] = D[7:4]);
  • 接收端(PHYMAC
    • 上升沿:捕获低4位(RXD[3:0] = D[3:0]);
    • 下降沿:捕获高4位(RXD[3:0] = D[7:4])。

2.2 RTL8211F

RealtekRTL8211F是一款10/100/1000MbpsPHY芯片, PHY芯片广泛用于机顶盒,瘦客户机,路由器,工业产品等。

RTL8211F是一个系列的产品,还有很多子型号,不同的型号与主控接口会有区别,适应不同平台的使用。例如:

  • RTL8211F-CG : 只支持RGMII, 不支持SGMII

  • RTL8211FS-CG : 同时支持SGMIIRGMII

所以针对不同的应用,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插座 → 外部网络

发送路径:

  • RTL8211FRGMII4DDR信号转换为串行差分信号(TXP/TXN);
  • H5007TXP/TXN1.1V低压差分信号升压至±2.5V,并通过阻抗匹配网络驱动双绞线。

接收路径:

  • H5007从双绞线接收±2.5V信号,降压至1.1V后送入RTL8211FRXP/RXN
  • PHY内部均衡器补偿信号衰减,恢复出干净的数字化信号。

三、GMAC设备树配置

以太网模块的硬件相关的驱动代码主要包括GMACPHY。其中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-gmacrockchip,rk3562-gmacrockchip,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:主要分为RMIIRGMII模式;
  • pinctrlRGMIIRMII模式下配置不一样,另外对于时钟方式,如果是输出时钟的pin脚,该pin脚驱动强度一般也是不一样的,例如RMII模式下ref_clock pin脚输出时钟时,驱动强度也会配置更大;
  • clock_in_out:描述了时钟的输入输出方向。对于不同类型的以太网接口(如RGMIIRMII),时钟的来源不同;
    • 如果是RGMII,主时钟(125MHz)是由PHY提供的,而不是由SoC(系统单芯片)的PLL提供;
    • 对于RMII,时钟的输入和输出方向可能不同,具体取决于PHYGMAC的设置。
  • snps,reset-gpioPHY的硬件复位脚;
  • snps,reset-delays-usPHY的复位时序,三个时间分别表示PHY的不同阶段的复位时序,不同的PHY的复位时序是不一样的;
    • 如果是snps,reset-active-low属性,则表示三个时间分别表示Reset pin脚拉高,拉低,再拉高的时间;
    • 如果是snps,reset-active-high属性,则反之;
  • tx_delayrx_delay:这两个属性用于控制以太网传输和接收数据时的延迟。RGMII模式下需要配置该属性,它们的值范围是00x7F(即0127),默认值分别为0x300x10
  • 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-30I*B1
2024-01-28*兴20
2024-02-01QYing20
2024-02-11*督6
2024-02-18一*x1
2024-02-20c*l18.88
2024-01-01*I5
2024-04-08*程150
2024-04-18*超20
2024-04-26.*V30
2024-05-08D*W5
2024-05-29*辉20
2024-05-30*雄10
2024-06-08*:10
2024-06-23小狮子666
2024-06-28*s6.66
2024-06-29*炼1
2024-06-30*!1
2024-07-08*方20
2024-07-18A*16.66
2024-07-31*北12
2024-08-13*基1
2024-08-23n*s2
2024-09-02*源50
2024-09-04*J2
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-26B*h10
2024-09-3010
2024-10-02M*i1
2024-10-14*朋10
2024-10-22*海10
2024-10-23*南10
2024-10-26*节6.66
2024-10-27*o5
2024-10-28W*F6.66
2024-10-29R*n6.66
2024-11-02*球6
2024-11-021*鑫6.66
2024-11-25*沙5
2024-11-29C*n2.88
posted @   大奥特曼打小怪兽  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2021-11-27 Mini2440之uboot移植之实践单板添加(一)
2021-11-27 Mini2440之uboot移植之源码分析命令解析(五)
如果有任何技术小问题,欢迎大家交流沟通,共同进步

公告 & 打赏

>>

欢迎打赏支持我 ^_^

最新公告

程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)。

了解更多

点击右上角即可分享
微信分享提示