RK3568与KSZ8795交换机芯片连接,直接MAC TO MAC方式,这样一下就扩展会4路网口,应该场合比较多,移植过程如下:
参考《Rockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf》
《rockchip RGMII+mv88e6390 管理型交换机功能调试及vlan定制+Mac绑定_marvel 88e6390分配ip-CSDN博客》
《Linux内核(五) [ RK3568 ] PHY驱动框架解析 —— MDIO总线-CSDN博客》
物理连接
RMII 直连如下所示,其中 RX_ERR 需要接地。
MAC0 --RMII-- MAC1
TXD[1:0] -------- RXD[1:0]
TX_EN -------- RX_DV
REF_CLK -------- REF_CLK
RXD[1:0] -------- TXD[1:0]
RX_DV -------- TX_EN
RX_ERR -------- GND
GND -------- RX_ERR
时钟配置
50OHM_GMAC1_TXCLK_M1, 50OHM_GMAC1_RXCLK_M1这2个引脚上都有时钟信号,TX是RK3568生成的,TXCLK是KSZ8795生成的,一定要确认是125MHZ,示波器可以观察到。
clk=2.5Mhz为10M网络;
clk=25Mhz为100M网络;
clk=125Mhz为千兆网络;
DTS
设备树文件修改。设置固件连接,1000兆,全双工,如下 :
tx_delay = <0x2f>;
rx_delay = <0x0a>;
/*phy-handle = <&rgmii_phy1>;*/
status = "ok";
fixed-link{
speed = <1000>;
full-duplex;
};
};
设置完后,如果RX一直为0,说明tx_delay, rx_delay需要配置,这个没有什么捷径,需要多试试,
成功
这样配置出来的网口速率是固定1000Mbps,一直连接状态,如下:
注:这种方式连接,MDIO不是必须的,因为此时通过MDIO读出的PHY寄存器也GMAC1的连接的状态也没有任何关系,我的建议是不连接MDIO接口。 如果要做更高级点的switch应用,如vlan等,可以把ksz8795的spi接口挂到RK3568上,通过RK3568操作KSZ8795的寄存器,如PME ACL EEE等寄存器。