RK3288_Android7.1调试以太网ethernet
以太网(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 -asit0 Link encap:IPv6-in-IPv4 NOARP MTU:1480 Metric:1RX 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: HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX 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:82inet addr:192.168.2.27 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::4450:6fff:fe9d:8c82/64 Scope: LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX 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.dtsiext_gmac: external-gmac-clock {compatible = "fixed-clock";clock-frequency = <125000000>; //1000M网用125Mclock-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 = <ð_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 丢包或无法工作。
RK3288_Android7.1调试以太网ethernet相关推荐
- 实时的工业以太网Ethernet Powerlink
近十年来,随着互联网技术飞速发展,以太网成为商业通信中的主导网络技术.以太网的通信速率要比目前任何工业现场总线高很多,因它是IT界标准网络技术,成千上万的公司参与开发生产有关产品,使其成本低廉,可选择 ...
- Infiniband vs 以太网Ethernet 对比
IPOIB 默认情况下,InfiniBand 不使用 IP 进行通信.但是,IP over InfiniBand(IPoIB)在 InfiniBand 远程直接访问 (RDMA)网络之上提供一个 IP ...
- 以太网Ethernet解码概述
目录 1. 申明 2. 目的 3. 背景知识 3.1 Ethernet协议的作用和历史 3.2 Ethernet承载IP的例子 4. 代码demo 5. 专栏知识链接 6. 写在最后 1. 申明 本文 ...
- Infiniband 和 以太网Ethernet 对比
目录 概述 对比 Ethernet infiniband 带宽 时延 可靠性 组网方式 类比 infiniband 的缺点 infiniband 的应用场景 参考 概述 以前IB特有的技术比如RDMA ...
- 以太网(Ethernet)技术的理解!!
目前最流行的物理和数据链路层协议是以太网(ethernet) 以太网是如何工作的? 以太网的传输速率 10-Mbps.100-Mbps. 1000Mbps.10-Gbps 我们通常会有一个误区,大家都 ...
- 利用iptables对以太网ethernet进行网速限制,更好地共享网络
iptables中有个limit模块,用它来限制packet,从面达到限制网速的目的. 什么是MTU? MTU是Maximum Transmission Unit的缩写.意思是网络上传送的最大数据包, ...
- 以太网(Ethernet)通信简单理解
简单的讲,以太网就是以固定的14字节开头的,以数据包(帧)传输数据的网络,数据在局域网中传输时,采用的是广播型式,比如局域网上有3台电脑ABC,A要发数据给B,其实就是群发数据出去,C当然也是能收到的 ...
- ETH—Lwip以太网通信
第39章 ETH-Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- 【STM32】标准库-以太网外设-LAN8720A-LWIP-无操作系统
TCP/IP模型 TCP/IP 只有四个分层,分别为应用层.传输层.网络层以及网络访问层(物理层) 实际上,还有一个 TCP/IP 混合模型,分为五个层.它实际与 TCP/IP四层模型是相通的,只是把 ...
- 西门子PLC 以太网通讯
云锋 个人主页给TA发消息加TA为好友发表于:2011-03-04 14:44:55楼主 实际工程中用过的PLC 以太网通信案例,需要把PLC型号.与PLC通信的设备.通信的各种参数及情况.通信实现的 ...
最新文章
- VMware 虚拟机
- 真的有能开光追的手游了!自带实机演示的那种,OPPO这次玩“大”了
- 【机器学习】深度盘点:详细介绍 Python 中的 7 种交叉验证方法!
- python爬取的内容不是中午_大年初六中午,全国各区县哪里最冷?
- VGG19续读【精细】,为什么叫做VGG19?==>【每一层可以看做是很多个局部特征的提取器,可以用作局部特征提取】
- SpringBoot之项目启动
- el-option传两个值_俗话说买房看地段,买窗看K值:如何区分K值、U值和R值
- 匿名类型(C# 编程指南)
- 第八讲 拍卖的博弈分析练习题
- android 软件 加密方法,Android中WIFI常见的几种加密方式(详细)
- c 关闭html,运行node Server.js后如何关闭?
- 【手掌识别】基于matlab形态学手掌长宽检测【含Matlab源码 1382期】
- html加载gif动画效果,html – 使用CSS动画加载图像VS使用GIF图像加载
- 简单提高MIDI音量的方法
- 三、单因素方差分析例题(R语言)
- 北航软件工程硕士_21考研择校 | 北京航空航天大学软件工程怎么样?
- 前端性能优化-优化大量图片加载超大图片加载(附懒加载实现方案)
- oracle job remove,如何删除oracle Job命令实例
- ② 判断语句、循环语句
- uni-app 退出app操作