前言
随着芯片的国产化推荐,越来越多的国产芯片被大家重视起来,但是国产的一些稍微高性能的芯片资料太少,这里把调实phy的流程记录一下,不做太多的理论分析
一、s905d3的以太网驱动的理解
如果拿到sdk后,默认使用的是内部phy(百兆的网络)如果切换到外部phy需要用户自己构建设备树文件,这里使用的phy是RTL8211芯片,kernel里面已经有相关的驱动。
嵌入式网络硬件分为两个部分,MAC和PHY,一个MAC必须与一个PHY搭配使用,芯片如果没有网络芯片(MAC),那就需要使用外置的MAC+PHY,如下图所示:
SOC内部集成了网络,一般就是说内部有MAC,但是phy一般都是外置的,(晶晨的是内部集成了phy),
MAC通过MII或者MDIO与外部的PHY进行通信。
详细的MDIO与MII接口的定义等可以参考其他文章了解
二、修改设备树
通过查看相关的硬件原理图,排查引脚复用相关的问题,比如:
GPIOZ_6与GPIOZ_12引脚,这两个引脚是ENET的数据接收引脚和数据发送引脚。
引脚的复用如下:
external_eth_pins: external_eth_pins {
mux {
groups = "eth_mdio",
"eth_mdc",
"eth_rgmii_rx_clk",
"eth_rx_dv",
"eth_rxd0",
"eth_rxd1",
"eth_rxd2_rgmii",
"eth_rxd3_rgmii",
"eth_rgmii_tx_clk",
"eth_txen",
"eth_txd0",
"eth_txd1",
"eth_txd2_rgmii",
"eth_txd3_rgmii";
function = "eth";
drive-strength = <3>;
};
};
在DTS的文件中增加如下:
ðmac {
status = "okay";
pinctrl-names = "external_eth_pins";
pinctrl-0 = <&external_eth_pins>;
rst_pin-gpios = <&gpio GPIOZ_15 0>;
mc_val = <0x1621>;
internal_phy=<0>;
};
在修改对应的board相关:
buildroot/bootloader/uboot-repo/bl33/v2015/board/amlogic/configs
找到g12a_u200_v1.h
添加下面两句:
#undef ETHERNET_INTERNAL_PHY
#define ETHERNET_EXTERNAL_PHY
到此基本上外置phy就已经配置好了
注意
如果硬件电路设计正常的,可以通过如下方式,对网络进行一个初步筛查:
黄灯正常说明网络是通的,绿灯正常说明网络传输正常。