一、网卡简介
YT8531C-CA是一款高度集成的以太网收发器,符合 10BASE-Te、100BASE-TX 和 1000BASE-T IEEE 802.3 标准。
提供了通过 CAT5E UTP 电缆传输和接收以太网数据包所需的所有物理层功能。
二、代码配置
RK源码已经对YT8531C-CA进行过适配,GKI下只用在dts配置一下GMAC、给上供电就行;GMAC配置直接参考rk的rk3576-evb1.dtsi或者rk3576-evb2.dtsi就行,例如:
&gmac1 {
/* Use rgmii-rxid mode to disable rx delay inside Soc */
phy-mode = "rgmii-rxid";
clock_in_out = "output";
snps,reset-gpio = <&gpio2 RK_PB4 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 = <ð1m0_miim
ð1m0_tx_bus2
ð1m0_rx_bus2
ð1m0_rgmii_clk
ð1m0_rgmii_bus
ðm0_clk1_25m_out>;
tx_delay = <0x20>;
/* rx_delay = <0x3f>; */
phy-handle = <&rgmii_phy1>;
status = "okay";
};
&mdio1 {
rgmii_phy1: phy@1 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <0x1>;
clocks = <&cru REFCLKO25M_GMAC1_OUT>;
};
};
注意:
1)上面的配置是3576的,3588上面一些配置命名会有所不同;
2)DTS中GMAC和MDIO是绑定关系,即GMAC0⽤MDIO0,GMAC1⽤MDIO1,不要乱搭使用;
3)clock_in_out不要乱配,125M是主控给的就配output,是phy给的就配input;
4)ðm0_clk1_25m_out和 clocks = <&cru REFCLKO25M_GMAC1_OUT>这两个东西配不配取决于25M的时钟是phy的,还是外部加的,如果是phy的就不用配,直接看原理图有没有上25M的晶振。
三、问题排查
1、GPIO复用
出现这种问题,一般看不到gmac的相关内核打印;
需要自行cat pinmux-pins与原理图对应;
2、Cannot attach to PHY 以太⽹初始化失败
开机 log 上出现打印:No PHY found 或者 Cannot attach to PHY 表示初始化失败、找不到phy设备;
可以排查以下几个地方:
1)PHY 供电是否正常
2)Reset IO 配置不正确;
3)MDC 时钟频率是否存在且⼩于 2.5M;
4)MDIO有没有波形,用示波器的触发模式去抓,上电会发2段读操作的波形;
若log中还出现 MDIO device at address 2 is missing.类似的打印;则标明phy硬件address跟软件不匹配导致;phy硬件address原理图可以看到,如下:
可以排查以下几个地方:
1)改成通⽤⼴播地址 0 试试看;
2)网卡芯片11管脚的AVDD33是否真正拉高了,如果是2.几V或者更低,也会出现这种情况;
3)dts配置的snps,reset-delays-us = <0 20000 100000>;拉低看中间的数值,当前20ms ,即示波器观察低电平时间应该为20ms,在1~3s范围慢慢加延时验证;
3、有网络节点但网络不通
log正常⽆报错且ifconfig也有节点出来,但是⽹络却不通也没有IP;
1)先看百兆网络是不是正常的;多数情况是硬件配置错误或者DTS有误;按照第二点代码配置好好排查一下;
2)如果百兆正常,千兆不行,那大概率是tx、rxdelay的问题,可以按照RK的文档⽂档扫下回环,⽂档:Rockchip_Developer_Guide_Linux_GMAC_RGMII_Delayline_CN.pdf;
但是这个文档很旧,可以直接去改dts的gamc节点里面的 tx_delay = <0x20>;rx_delay = <0x3f>; 先慢慢加减tx_delay ,单刷内核快速验证;一般来说,参考RK的dts移植不会有问题,YT8531的tx_delay 直接用0x20就行;