基于RK3566核心板设计了一块主板,运行 linux系统,外部PHY芯片为RTL8211F,电路如下:
PHY Address:0x01;
时钟方向:PHY->GMAC;
硬件注意事项:C15不能焊接,不然REGOUT无输出。
DTS文件的gmac1节点配置:
&gmac1 {
phy-mode = "rgmii";
clock_in_out = "input";
snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>;
snps,reset-active-low;
/* Reset time is 20ms, 100ms for rtl8211f */
snps,reset-delays-us = <0 20000 100000>;
assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&gmac1_clkin>;
pinctrl-names = "default";
pinctrl-0 = <&gmac1m0_miim
&gmac1m0_tx_bus2
&gmac1m0_rx_bus2
&gmac1m0_rgmii_clk
&gmac1m0_rgmii_bus
&gmac1m0_clkinout>;
tx_delay = <0x15>;//0x4f
rx_delay = <0x0b>;//0x2d
phy-handle = <&rgmii_phy1>;
status = "okay";
};
扫描delay窗口
注意,如果你使用的是 RTL8211 phy ,测试前需要拔掉网线。
先cd 到/sys/devices/platform/fe010000.ethernet路径下(如果是其它型号CPU,路径可能不一样,需要cd到/sys/devices/platform/路径下,执行ls,看看ethernet的节点地址),执行echo 1000 > phy_lb_scan:
[root@RK356X:/sys/devices/platform/fe010000.ethernet]# echo 1000 > phy_lb_scan
[ 324.499147] Delayline scan speed set to 1000
[ 324.802307] dwmac4: Master AXI performs any burst length
[ 324.995121] RX(0x00): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.069120] RX(0x01): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.143318] RX(0x02): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.217058] RX(0x03): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.291182] RX(0x04): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.365274] RX(0x05): OOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.439692] RX(0x06): OOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.514126] RX(0x07): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.588423] RX(0x08): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.662246] RX(0x09): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.736436] RX(0x0a): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.810753] RX(0x0b): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.884578] RX(0x0c): OO O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 325.958615] RX(0x0d): OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.033028] RX(0x0e): OOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.106715] RX(0x0f): O OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.180790] RX(0x10): OOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.255694] RX(0x11): O O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.330342] RX(0x12): OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.404180] RX(0x13): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.478880] RX(0x14): OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.552917] RX(0x15): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.627197] RX(0x16): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.701241] RX(0x17): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.775382] RX(0x18): OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.849567] RX(0x19): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.923875] RX(0x1a): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 326.998120] RX(0x1b): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.072172] RX(0x1c): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.146521] RX(0x1d): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.220793] RX(0x1e): OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.295084] RX(0x1f): OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.369193] RX(0x20): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.443125] RX(0x21): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.517103] RX(0x22): OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.572649] RX(0x23): OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.627328] RX(0x24): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.692315] RX(0x25): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.750556] RX(0x26): OOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.825081] RX(0x27): O OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.899349] RX(0x28): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 327.973604] RX(0x29): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.047691] RX(0x2a): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.121766] RX(0x2b): OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.195996] RX(0x2c): OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.270397] RX(0x2d): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.344610] RX(0x2e): O OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.418732] RX(0x2f): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.492683] RX(0x30): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.566708] RX(0x31): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.641325] RX(0x32): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.715676] RX(0x33): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.789899] RX(0x34): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.864177] RX(0x35): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 328.938021] RX(0x36): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.011932] RX(0x37): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.086259] RX(0x38): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.160702] RX(0x39): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.234671] RX(0x3a): OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.308849] RX(0x3b): O O OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.382627] RX(0x3c): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.456737] RX(0x3d): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.530193] RX(0x3e): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.603881] RX(0x3f): O OOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.677691] RX(0x40): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.752234] RX(0x41): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.826346] RX(0x42): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.900541] RX(0x43): O OOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 329.974665] RX(0x44): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.048713] RX(0x45): OO O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.122411] RX(0x46): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO O
[ 330.196661] RX(0x47): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.270269] RX(0x48): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.340278] RX(0x49): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.404785] RX(0x4a): OO O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.479091] RX(0x4b): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.553397] RX(0x4c): OO O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.627639] RX(0x4d): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.702081] RX(0x4e): O O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.775784] RX(0x4f): O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.849557] RX(0x50): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.923650] RX(0x51): OOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 330.997907] RX(0x52): OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 331.072100] RX(0x53): OOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
[ 331.146657] RX(0x54): OOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOO
[ 331.220555] RX(0x55): OO OOOO OO OOO O OOO OO OOOOOO OOOOOO OOOOO O OOO OO OOO
[ 331.291861] RX(0x56): O O O O O
[ 331.355670] RX(0x57):
[ 331.418520] RX(0x58):
[ 331.481441] RX(0x59):
[ 331.544504] RX(0x5a):
[ 331.607392] RX(0x5b):
[ 331.670305] RX(0x5c):
[ 331.733313] RX(0x5d):
[ 331.796159] RX(0x5e):
[ 331.859232] RX(0x5f):
[ 331.922173] RX(0x60):
[ 331.985100] RX(0x61):
[ 332.048029] RX(0x62):
[ 332.110859] RX(0x63):
[ 332.173682] RX(0x64):
[ 332.236552] RX(0x65):
[ 332.299498] RX(0x66):
[ 332.362418] RX(0x67):
[ 332.425267] RX(0x68):
[ 332.488776] RX(0x69):
[ 332.551743] RX(0x6a):
[ 332.614695] RX(0x6b):
[ 332.677631] RX(0x6c):
[ 332.740684] RX(0x6d):
[ 332.803550] RX(0x6e):
[ 332.866527] RX(0x6f):
[ 332.929389] RX(0x70):
[ 332.992223] RX(0x71):
[ 333.055067] RX(0x72):
[ 333.117963] RX(0x73):
[ 333.180958] RX(0x74):
[ 333.243988] RX(0x75):
[ 333.306878] RX(0x76):
[ 333.369861] RX(0x77):
[ 333.432828] RX(0x78):
[ 333.495779] RX(0x79):
[ 333.559217] RX(0x7a):
[ 333.622451] RX(0x7b):
[ 333.685490] RX(0x7c):
[ 333.748524] RX(0x7d):
[ 333.811657] RX(0x7e):
[ 333.874813] RX(0x7f):
[ 333.937722]
[ 333.937722] Find suitable tx_delay = 0x48, rx_delay = 0x2a
[ 334.140479] Generic PHY stmmac-1:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=stmmac-1:00, irq=POLL)
[ 334.156511] dwmac4: Master AXI performs any burst length
[root@RK356X:/sys/devices/platform/fe010000.ethernet]# [ 334.156594] rk_gmac-dwmac fe010000.ethernet eth0: No Safety Features support found
[ 334.156642] rk_gmac-dwmac fe010000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported
[ 334.157101] rk_gmac-dwmac fe010000.ethernet eth0: registered PTP clock
从扫描结果得知 rx_delay:0x2a,tx_delay:0x48。
测试扫描出来的中间值
将扫描得到的值通过命令配置到 rgmii_delayline 节点,然后测试该配置下 TX/RX 数据传输是否正
常,通过 phy_lb 节点测试,至少这个测试需要先 pass。
[root@RK356X:/sys/devices/platform/fe010000.ethernet]# echo 0x48 0x2a > rgmii_de
layline
[ 989.520595] Set rgmii delayline tx: 0x48, rx: 0x2a
[root@RK356X:/sys/devices/platform/fe010000.ethernet]# echo 1000 > phy_lb
[ 1005.969140] PHY loopback speed set to 1000
[ 1006.280321] dwmac4: Master AXI performs any burst length
[ 1006.684569] Generic PHY stmmac-1:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=stmmac-1:00, irq=POLL)
[ 1006.699426] dwmac4: Master AXI performs any burst length
[root@RK356X:/sys/devices/platform/fe010000.ethernet]# [ 1006.699513] rk_gmac-dwmac fe010000.ethernet eth0: No Safety Features support found
[ 1006.699556] rk_gmac-dwmac fe010000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported
[ 1006.700049] rk_gmac-dwmac fe010000.ethernet eth0: registered PTP clock
[ 1006.700195] PHY loopback: PASS
测试 pass 后,将 delayline 分别填到 dts: tx_delay = <0x2e>; 和 rx_delay = <0x0f>; ,重新烧入
固件,接着继续测试 ping 或者 iperf 性能测试,一般情况下到这一步就可以了。
&gmac1 {
phy-mode = "rgmii";
clock_in_out = "input";
snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>;
// snps,reset-gpio = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>;
snps,reset-active-low;
/* Reset time is 20ms, 100ms for rtl8211f */
snps,reset-delays-us = <0 20000 100000>;
assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&gmac1_clkin>;
pinctrl-names = "default";
pinctrl-0 = <&gmac1m0_miim
&gmac1m0_tx_bus2
&gmac1m0_rx_bus2
&gmac1m0_rgmii_clk
&gmac1m0_rgmii_bus
&gmac1m0_clkinout>;
tx_delay = <0x48>;//0x48
rx_delay = <0x2a>;//0x2a
phy-handle = <&rgmii_phy1>;
status = "okay";
};
详细内容可参考瑞芯微官方文档<Rockchip_Developer_Guide_Linux_GMAC_RGMII_Delayline_CN.pdf>,在sdk的..\docs\Common\GMAC路径下。