主要配置项
除去复位等信号,我们主要关注两大块的配置:
时钟配置
MAC 采用125M时钟,PHY采用25M时钟。
主要配置时钟源,这个和具体硬件连线强相关。例如125M时钟可以来源于soc内部的PLL,也可以由对端PHY 提供。
由对端PHY 提供时,由于MAC 和PHY是两个器件,对于125M这个时钟的走线要注意,毕竟是高速时钟。
而网上一些资料显示rk家内部的125M时钟在某些型号上存在问题,在做实际上要和厂家确认。
delay的配置
分为tx_delay 和rx_delay,可以由phy和mac侧进行配置。
例如我们上图中 phy侧硬件启用了rx_delay,则rx由PHY侧进行 配置;而tx由MAC进行配置。
RK家提供了测试工具,可以尽快测试出合适的delay值。
delay值的影响:比如默认delay值为0x44,在通过hub和PC互联时没有问题,而和pc直接连接时,协商就有问题,有时不能协商,有时为100M
所以已经要用测试工具找到合适的delay值。
配置实战
&mdio0 {
rgmii_phy0: phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
motorcomm,clk-out-frequency-hz = <125000000>;
reg = <0x1>;
};
};
&gmac0 {
// Use rgmii-rxid mode to disable rx delay inside Soc
phy-mode = "rgmii-rxid";
clock_in_out = "input";
snps,reset-gpio = <&gpio4 RK_PA2 GPIO_ACTIVE_LOW>;
snps,reset-active-low;
// Reset time is 20ms, 100ms for rtl8211f
snps,reset-delays-us = <0 20000 100000>;
pinctrl-names = "default";
pinctrl-0 = <&gmac0_miim
&gmac0_tx_bus2
&gmac0_rx_bus2
&gmac0_rgmii_clk
&gmac0_rgmii_bus
&gmac0_clkinout>;
tx_delay = <0x35>;
// rx_delay = <0x4f>;
phy-handle = <&rgmii_phy0>;
status = "okay";
};
针对上述配置的解释:
1. 这里有两个部分,一部分为mac,一部分为phy,两者通过phy-handle进行了关联
2. 在gmac里面,启用了管脚 gmac0_clkinout,即125M时钟由PHY通过此管脚提供给GMAC
3. 在phy侧,启用clk-out-frequency-hz 125M时钟的配置,以便PHY驱动进行时钟的输出使能配置。这个具体的配置项字段要看具体phy的驱动。
UDP丢包测试
测试丢包
测试命令
iperf -s -u
iperf -c 192.168.10.10 -u -i 1 -b 1000M -t 60
结果丢包7.x%
buffer修改
而修改接收buffer
echo 6291456 >/proc/sys/net/core/rmem_default
则丢包问题解决。
修改/etc/sysctl.conf
net.core.rmem_max=6291456 6M
net.core.rmem_default=6291456
linux 与windows差异
在linux下,iperf -s -u 默认的窗口大小只有204K,通过命令
iperf -s -u -w 4M也不能增大此窗口,只能通过上述命令修改。
而在windows下,则可以通过iperf -s -u -w 4M 对接收buffer进行临时修改测试。