在调试网口的过程中会出现很多bug现象,这里我总结了我遇到过的网口问题以及对应的解决思路,希望能给大家一些调试帮助(后续遇到其他的bug会实时更新!!!!!)
文章目录
eth0网络节点无生成
原因分析
确认MAC控制器驱动是否正常加载
eth0节点生成的情况下,MAC控制器也有可能加载不成功
PHY 初始化失败
如果 GMAC 的驱动开机 log 上出现打印:No PHY found 或者 Cannot attach to PHY,表示找不到 PHY。
驱动会通过 MDIO 先读取 PHY 的 ID,可以测量 MDC 和 MDIO 波形,波形是否正常,该总线类似于
I2C,MDC 频率要求是小于 2.5M。
原因分析:
- 检查 MDC/MDIO IOMUX 寄存器值是否正确
- PHY 供电是否正常
- Reset IO 配置不正确
- Reset IO 时序不满足 PHY datasheet 要求,不同 PHY 的时序要求不一致
- 测试 MDIO/MDC 波形是否异常,其中 MDC 时钟频率要求小于 2.5M
终端报错:stmmac_open: DMA initialization failed
原因分析
大部分是在clock_in_out = "input"的情况下会出现(一般原因是时钟异常导致)
- 时钟方向以及配置与硬件不匹配
- 确认PYH提供的时钟是否正常(频率、电压幅度)
- IOMUX是否正常
不能识别网线插拔
原因分析
- 确认数据引脚复用关系
- 确认PHY是否正常工作
- 测量MAC_CLK、RX_CLK、TX_CLK引脚信号
千兆时都为125MHz,百兆时都为25MHz,十兆时为2.5MHz
RX数据为0/TX数据为0
TX数据为0
通过 ifconfig -a 查看 eth0 节点的 TX packets 是否在不断增加,如果为0,则有可能网线没有 link 上。
假设 TX packets 是在不断增加,表示 TX 数据在 GMAC 有发出数据。
将板卡与 PC 连在同一个局域网内,在板卡上 ping PC,同时在 PC 端通过抓包工具(比如 Wireshark)抓包查看,如果有抓到板卡发过来的数据,表示 TX 数据是通的。如果没有抓到,需要确认 TX 在哪个链路位置上出现了异常,可以测试 GMAC 的 TX Clock 与 TX Data 的波形,来排除是 MAC 还是 PHY 出现了问题。
原因分析:
- 检查 TX Clock/TX Data 的 iomux
- TXC 时钟是否正确
- RGMII 模式时,Tx Delayline 配置是否正确
RX数据为0
连接上网线后通过 ifconfig -a 查看 eth0 节点的 RX packets 是否在不断增加,如果为0,表示 GMAC RX 没有收到数据。
原因分析:
- 检查 RX Clock/RX Data 的 iomux
- RXC 时钟是否正确
- RGMII Tx Delayline 配置是否正确
- RGMII 模式时,Rx Delayline 配置是否正确
RX有数据,但都是错误包
原因分析
- 125MHz时钟频率是否达标
- 分析线路干扰
获取IP地址失败
原因分析
- 调整rx_delay、tx_delay
- 调整IO驱动强度
- 尝试手动设置IP地址
连接外网域名地址失败
原因分析
- 添加DNS配置
网络速率慢
原因分析
- VDD10_EPHY电压纹波不超过100mv
- 测量RX_CLK、TX_CLK、MAC_CLK,确保频率和电平正确
解决方法
使用RK提供的iperf工具测试能达到800M(Windows的iperf 对 Linux的iperf)
若使用Ubuntu服务器下载的iperf也只有300M