完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
以太网(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 foundn"); return -1; } if (enable) { ret = regulator_enable(ldo); if (ret) dev_err(dev, "fail to enable phy-supplyn"); } else { ret = regulator_disable(ldo); if (ret) dev_err(dev, "fail to disable phy-supplyn"); } */ 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 = <ð_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>; }; }; 5、PHY 初始化异常 类似如下异常打印: stmmac_open: Cannot attach to PHY 或 eth0: No PHY found PHY 正常识别会有类似如下打印: eth0: PHY ID 01410dd1 at 1 IRQ 0 (stmmac-0:01) active 解决思路: A. 需要先确认硬件是否有异常,对比 RK 发布的以太网 PHY 参考电路,或者找 RK 硬件同事 check 下原理图 B. 需要确认 PHY 的供电是否正常,如 VCC_LAN 等电源脚 C. 如果 PHY 有 reset 脚控制,确认是否正常控制到 D. 测量 MAC 信号脚的电平,需要工作在 3.3V E. 还可以尝试增加以下 delay 时间试试 6、kernel出现如下报错打印 stmmac_open: DMA initialization failed 这种情况只有在“clock_in_out = "input"情况下才出现。 A) 需要确认 GMAC 工作主时钟 MAC_CLK 是否有从 PHY 供给主控: 使用 100M PHY 时,其频率是 50M 使用 1000M PHY 时,其频率是 125M B) 如果有 clock,需要确认 clock 的幅度是否达标,一般需要 3.0V 以上 C) 需要确认 iomux 是否正确 注意:如果用的是100M PHY,MAC_CLK的频率是50M;如果用的是1000M PHY,MAC_CLK的 频率是 125M.125M clock 必须由 PHY 提供,100M clock 可由 RK 主控提供,这是因为 RK 主控分不出 125M clock 或分出的 clock 可能不精准,会造成 GMAC 丢包或无法工作。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
626 浏览 0 评论
887 浏览 1 评论
784 浏览 1 评论
1997 浏览 1 评论
3242 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 16:41 , Processed in 0.839146 second(s), Total 72, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号