流程:
1、首先保证PHY的25MHz外部晶振正常工作;
2、PHY产生125MHz时钟信号(CLKOUT)—>MAC;
CLKOUT
:O ,125/25MHz Reference Clock Generated from Internal PLL.
This pin should be kept floating if this clock is not used by MAC.
3、MAC通过MDC、MDIO进行配置PHY;
如果没有MDC和MIDIO信号,或者不稳定,就要考虑PHY–>MAC (CLKOUT引脚)的125M时钟信号是否匹配,注意测量时钟的幅值和频率,通常需要串一个电阻例如22欧,进行匹配。
有些情况是RTL8211给MAC的125MHz参考钟过冲太大,将CPU对应的时钟输入管脚击穿了(可以测一下该管脚的对地阻抗是否正常,来判断是否是此原因)。
对于MAC端来说,驱动配置时,
-
phy-mode
: 根据板上所使用的 PHY 的接口进行配置,一般千兆 PHY 为 RGMII, 百兆 PHY 为 RMII。 -
clock_in_out
: input 表示由 PHY 提供,output 表示由 GMAC 提供。 -
clock-frequency
:只有在时钟方向为input时才会使用到,RMII接口时,设为 50M,RGMII接口时设为125M。125M由外部 PHY (
CLKOUT
)提供,这是因为 RK 主控分出的 clock 不精准,会造成 GMAC 丢包或无法工作。由外部输入的时钟相对于内部 PLL 产生的时钟更加独立,不受内部分频策略的影响,因此更加稳定。而对于 PHY 来说,本身就需要一个 25M 的晶振作为时钟源。 -
tx_delay/rx_delay
: RGMII 接口才需要去配置时序,因为时钟频率更高后更容易受到 PCBlayout走线,电磁干扰等影响,需要更加精确调整。如果有出现测试吞吐率不足的情况,可以适当调整这两个值,范围是 0x0—0x7F。 - 从kernel 4.4 版本开始,各驱动尽可能使用官方 Linux kernel 的代码,官方kernel 中已包含了支持 RK 所使用的 GMAC 的代码框架(很多RK的驱动已经上传到官方kernel,也包括GMAC)。所以往后芯片的 GMAC 驱动会套用此框架。
-
代码位置在 drivers/net/ethernet/stmicro/stmmac/。
RK 平台相关代码主要位于dwmac-rk.c中。
RGMII
: Reduced Gigabit Media Independent Interface
RGMII相比于GMII减小将近一半的管脚数(
24
→
12
),通过以下两种方式:
-
1000Mbps
模式下,在时钟的
上
/
下边沿
均采样数据 -
取消不重要的如
CRS
,
COL
等信号
在RGMII接口中
MAC
在
TXC
上一直提供时钟信号,而不像在GMII接口中那样,
10/100Mbps
模式下时钟是由
PHY
提供(
TXCLK
),而
1000Mbps
模式下时钟是由
MAC
提供(
GTXCLK
)。在RGMII中应用到源同步时钟,即数据与时钟信号是同步的。这要求在PCB设计中,要对时钟信号额外增加
1.5~2 ns
的延迟以保证接收端的建立/保持时间满足要求。在
RGMII v2.0
规范中有定义MAC/PHY内部延迟(
RGMII-ID
),由此避免PCB设计中再要增加这个延迟。
在RGMII接口中:
-
1000Mbps
模式,数据在时钟的
上
/
下边沿
均采样 -
10/100Mbps
模式,数据仅在时钟
上升沿
采样
RXCTL
和
TXCLT
为复用的传输控制信号。
RXCTL
在时钟的上升沿代表
RXDV
,在时钟的下降沿代表(
RXDV
xor
RXER
);
TXCTL
在时钟的上升沿代表
TXEN
,在时钟的下降沿代表(
TXEN
xor
TXER
)。
RGMII v1.3
采用
2.5V CMOS
电平,
RGMII v2
采用
1.5V HSTL
电平。
根据板上所使用的 PHY 的接口进行配置,一般千兆 PHY 为 RGMII, 百兆 PHY 为 RMII。