RK3288_Android7.1調試以太網ethernet

1、以太網(ethernet)的調試:
Rk默認已經添加了mac驅動。網卡分爲兩個層次:MAC+PHY
一般說來,MAC就是網絡控制器,如果該驅動OK,就能直接看到ifconfig信息;
PHY是物理層,負責發送和傳輸的底層,如果PHY發生問題,ifconfig同樣有信息,只有up時纔會連接PHY,down時斷開連接。
MAC和PHY通過MII接口傳輸以太網數據,通過MDIO接口訪問PHY的配置寄存器。 PHY連不上第一可能是硬件問題,拿給做硬件的,首先檢查一下供電是否正常(最關鍵),然後檢查一下PHY所有信號是否都很正常(一般連接對了都沒啥問題),
Adb通過 ifconfig -a命令可以查看是否註冊了網卡設備eth0

rk3288:/ # ifconfig -a

sit0      Link encap:IPv6-in-IPv4  
          NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1 
          RX bytes:0 TX bytes:0 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0 
          inet6 addr: ::1/128 Scope: Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1 
          RX bytes:0 TX bytes:0 

eth0      Link encap:Ethernet  HWaddr 46:50:6f:9d:8c:82
          inet addr:192.168.2.27  Bcast:192.168.2.255  Mask:255.255.255.0 
          inet6 addr: fe80::4450:6fff:fe9d:8c82/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:908 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:99 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:72432 TX bytes:12712 
          Interrupt:38 
rk3288:/ # 

我這裏調試的是:Rk3288_Android7.1,kernel版本是4.4, 代碼位置在drivers/net/ethernet/stmicro/stmmac/.
Dts配置:

--- a/arch/arm/boot/dts/rk3288-evb.dtsi 
+++ b/arch/arm/boot/dts/rk3288-evb.dtsi
		
	ext_gmac: external-gmac-clock {
		compatible = "fixed-clock";
		clock-frequency = <125000000>; //1000M網用125M
		clock-output-names = "ext_gmac";
		#clock-cells = <0>;
		};

    &gmac {
         //      phy-supply = <&vcc_phy>; //原理圖phy的供電PHY_PMEB直接使用pmu的ldo腳,   所以這裏注掉,不需要再配置
     phy-mode = "rgmii"; 
     clock_in_out = "input";
     snps,reset-gpio = <&gpio4 8 0>; //復位pin(參考原理圖)
     snps,reset-active-low;
     snps,reset-delays-us = <0 10000 50000>;
     assigned-clocks = <&cru SCLK_MAC>;
     assigned-clock-parents = <&ext_gmac>;
     pinctrl-names = "default";
 	  pinctrl-0 = <&rgmii_pins>; 
     tx_delay = <0x30>;
     rx_delay = <0x10>;
     max-speed = <1000>; //這裏配置最大的限速,1000就是可以達到1000M速度,100就是100M最大限速
     status = "okay";
	};

問題點總結:
1、萬用表量供電腳PHY_PME只有0.4v的供電。
分析:
Phy的供電腳使用pmu(rk808)的VSWOUT2腳(對照原理圖),注意dts添加對應pin的節點配置,這樣rk808驅動才能添加對應的寄存器設置,使該pin輸出3.3v供電:

--- a/arch/arm/boot/dts/rk3288-evb-android-rk808-hdmi.dts 
+++ b/arch/arm/boot/dts/rk3288-evb-android-rk808-hdmi.dts

 	  +                       vcc_lan: SWITCH_REG2 {
      +                                 regulator-always-on;
      +                                 regulator-boot-on;
      +                                 regulator-min-microvolt = <3300000>;
      +                                 regulator-max-microvolt = <3300000>;
  	  +                                 regulator-name = "vcc_lan";
   	  +                                 regulator-state-mem {
  	  +                                         regulator-off-in-suspend;
 	  +                                 };
      +                       };

2、報錯rk_gmac-dwmac: probe of ff290000.ethernet failed with error -1。
分析:
dwmac-rk.c驅動的上電函數phy_power_on讀取不到phy-supply的有效ldo,直接返回-1報錯,就會無法正常識別到網卡設備eth0,需在驅動drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c中注掉phy_power_on的上下電操作,直接返回0即可。

	static int phy_power_on(struct rk_priv_data *bsp_priv, bool enable)
	{
	/*	struct regulator *ldo = bsp_priv->regulator;
	int ret;
	struct device *dev = &bsp_priv->pdev->dev;

	if (!ldo) {
		dev_err(dev, "no regulator found\n");
		return -1;
	}

	if (enable) {
		ret = regulator_enable(ldo);
		if (ret)
			dev_err(dev, "fail to enable phy-supply\n");
	} else {
		ret = regulator_disable(ldo);
		if (ret)
			dev_err(dev, "fail to disable phy-supply\n");
	}
	*/
	return 0;
	}

3、開機起來只識別到100M的速率,相關log打印:rk_gmac-dwmac ff290000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off)
分析:
dts配置:

max-speed = <1000>; //這裏配置最大的限速

4、如果PHY的供電腳PHY_PMEB使用GPIO控制開關的話,dts部分還需要對照原理圖加上以下的GPIO的配置。

vcc_phy: vcc-phy-regulator { 
		compatible = "regulator-fixed"; 
		enable-active-high; 
		gpio = <&gpio0 8 GPIO_ACTIVE_HIGH>; 
		pinctrl-names = "default"; 
		pinctrl-0 = <&eth_phy_pwr>; 
		regulator-name = "vcc_phy"; 
		regulator-min-microvolt = <3300000>; 
		regulator-max-microvolt = <3300000>; 
		regulator-always-on; 
		regulator-boot-on; 
	}; 
	& pinctrl {
		eth_phy { 
			eth_phy_pwr: eth-phy-pwr { 
			rockchip,pins = <0 8 RK_FUNC_GPIO &pcfg_pull_none>; 
		}; 
	};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章