|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
01问题分析1 X, _9 C- s/ W" D
- }; H! V8 q, J
问题描述1——. n7 i' D: M3 h" T) r
8 e5 W- V* O+ R! S& z# T: c
以太网初始化报错 No phy found. y2 m# i( ]4 F& |
7 a+ t! v( e5 C# E在执行ifconfig eth0 up命令时,出现"No phy found"异常log。6 W% ?8 {1 {1 {3 F# d2 J. ?0 u
- |7 F/ R( a. R2 d5 B( g! T7 |
& G ?4 w0 a* ?4 u3 T8 S1 H( e
5 X, }% e( h* i" V) y; Z
" j ?+ A7 B- n/ q+ w3 C A# D D3 D0 d) T
9 m5 w6 G+ C' |- j0 H
' D3 q8 T% R3 p) J9 H问题分析:
. P: q( }3 {; R( q3 C9 n
' N" A3 s2 P: I1 K6 M0 M出现"No phy found",常见原因是供给phy使用的25M时钟异常,导致phy工作不正常,gmac驱动通过mdio接口也读不到phy的设备信息。
9 D9 Q% Q+ W5 d. ?1 _2 U5 x3 d
0 k X* W; f9 D1 X" o# @
* D V/ Z1 T! D: ^: ]# @5 E- D& E/ w! A& O( h* D; L7 P* i' R& F
; L- u0 D f o) A) S4 o% C0 z) M
或者MDIO引脚配置不正确或者phy地址不正确;再就是MDIO没做上拉电阻,GMAC读取不到phy设备信息,用示波器量一下MDIO波形是否正确;再或是phy芯片复位失败,需要更换phy芯片复位上拉电阻。
3 N( x3 ]% D# _1 B+ K# D- \: [
2 [ n5 h7 d- ^' ~ O. w, z
" f2 d2 O1 c( w( ^8 g
6 l2 S3 G2 \+ U. w5 p/ J: C
' K* r2 c. N: u# q; t# k; m5 `( z3 f- }3 t! L& L
% F& M( F$ z5 c- `& N- r
排查步骤:
7 b2 [& t" L3 y# T& X% }9 _0 @0 Y3 D( y# C
(1) 检查phy供电是否正常;
( O0 Q: D1 v( g- M& |, F! q/ [ W- p/ Y( C* u5 C
(2) 检查phy使用的25M时钟(Soc ephy25M或外部晶振)是否正常;4 \( ]' u+ e1 K
; ]0 y$ L+ y% w(3) 检查phy-mode是否按板级实际情况配置(mii/rmii/rgmii);
0 M& R" Y. T5 ?
, A/ y% Z; H* Y7 I# P(4) 检查MDIO是否有上拉电阻;
6 y0 B4 y1 P: t$ V, f$ L0 i4 ^0 k$ |
+ |7 k% P; m. H# `2 M" E `(5) 检查MDIO引脚配置是否正确;8 Y4 j0 U% R- W5 e+ p, U
- `& i7 q$ s8 d2 W! x& o: A
(6) eMAC phy地址是否和硬件一致;0 g( [1 ?/ x1 M0 ^# v- O
F5 L2 s9 L# o) X$ T5 Y(7) 检查复位上拉电阻是否和原理参考方案一致。9 l/ S# u: j# X. F) B! ~6 j: l+ V
d; @+ H6 d( s* \( ]7 F6 P$ }# U# p4 |; U( g" M
) F" e) ~" e7 e1 \
1 H' u X5 t+ e; `) P5 _
MDIO通讯正常验证:
8 }7 h% [3 j5 r" |
4 x$ N9 \- |* d3 G4 Y+ D使用phytool工具读取0x02 0x03寄存器 是否正确读取PHY芯片ID,读取成功,代表MDIO通讯正常。
* U& ?* S6 }& T* y2 y
, C, \" E& B) z9 ]* I- ^5 H& w% m$ f1 d1 }, S4 k9 v
# L) f% J4 q& M D0 H( o3 a
9 y4 H& f: S2 m& _8 p: L% Z
* H( u; z4 E) J. `问题描述2——2 g9 p6 P& i. a4 T- D( Q. Z; E
" G q" H: ^! G3 e2 I! F* x. H以太网初始化报错NO SUCN DEVICE
8 a V3 Y* O8 k: l0 ~5 |
6 p$ g8 s& ]6 g. G5 R5 w2 S执行ifconfig -a/ifconfig eth0/ifconfig eth0 up命令,找不到eth0设备。/ _) w$ A0 U" J' M
4 s) E w4 N* f/ ^ d
* A) s5 n( N3 g: q8 I3 \
' c/ P p3 ^4 t( \, T5 `1 I5 x6 J" \) M
9 R( c& b1 N7 G& n/ G3 X
! B ?1 j7 `6 z3 o# z- G9 z问题分析:: u% ?( S2 ^* b) ]
5 |, C% l- j" w; P. V P s' g8 T以太网模块配置未生效或存在GPIO冲突。
7 h5 q9 B; P3 l6 X- \4 N5 B3 O7 J8 b# F' Z. S9 M3 e
, _" Z5 n5 a' E/ B9 q" s
- Q0 r0 Z$ P$ b) c7 A* l {
& r! u( F# R u
排查步骤:
! \8 W8 u9 Y T, `( F3 a& y( p( b
1 }7 F$ w$ _) J. ^& m) ?7 F步骤1:抓取内核启动log,搜索"gmac"关键字段,检查gmac驱动是否probe成功;
, h; d* O8 e- `0 ^6 V0 J% C- Z2 j
步骤2:若内核启动log显示mac控制器probe失败,常见原因是GPIO资源冲突导致。
& Q$ K, o- y' R9 Z b3 m* d- \
2 J' n( l' {9 ]0 P, N0 I5 U9 ~- z3 V" p
6 K# s, _/ d6 [' I! ?5 A1 ?! j3 q; O# j4 @5 b
+ D9 y, C. J- y. Z& |) u
解决方法:
. m. P; F" H4 t- m Z
+ \8 P+ s+ K5 Y/ X& mGPIO冲突会有报错信息,根据报错信息,查看GPIO冲突引脚。
+ d! [* u6 k! }: @* W. x4 ]% u, C7 Z* u3 r3 Y
查看以太网模块是否配置。
# y0 j7 x' h& I# h$ {
7 v: {4 z5 n6 i5 f7 @4 p, Z
* Y# n1 n7 C# ? i3 W' F7 l0 H% q8 ]
" d+ M4 u9 m+ r/ O, ?8 Y( I0 L( ]; ` l3 D
* s8 r7 X- o! L0 A
& T/ X8 W0 l4 T" f2 v
( P. o; K% h* l9 \7 l0 X& f! q; b/ u9 Z
问题描述3——% _" u7 | \9 \, O u
. Q/ E: |3 k6 R% m4 I
以太网初始化报错Initialize hardware error
" ?/ f0 b- }8 f" o# P& e5 T" d- e) d9 t' H: d3 N6 j/ `: X
执行ifconfig eth0 up命令,出现"Initialize hardware error"异常log。7 M! ?. E( I' ?7 S9 v
+ a' L/ V6 Z0 A. ?2 v: S# N问题分析:( ]% t* B/ _- z( ?
% v& c, X f+ b! I4 M8 h# G出现"Initialize hardware error",一般是由于phy没有输出RX CLK至MAC控制器,导致MAC控制器内部soft reset失败,常见原因是phy供电异常或25M时钟异常;或者是检查数据引脚的时钟是否正确,RMILL RX CLK TX CLK 是否是正确时钟。* q& g1 M1 g: m) T5 N1 W
1 w, Y5 Y, v3 L( l! i0 W# H
; V* q! _! h0 r( x u4 J3 p8 [
+ e+ w9 y" f0 l. T, D6 E H6 W7 b! \4 \2 Y8 z
5 o8 W6 b. I# f+ V) w
( ?. w7 u6 J2 Q
, C# J0 h6 i/ _, ^
2 x% [- ]4 i3 `% h) {
6 \) y. X Y; z6 \
/ ?) t5 G8 S# J* T; h
9 u5 A' T. H! z
! A; Z* x9 h2 V* M1 o3 B0 i4 P排查步骤:
6 p! P, [6 |4 r& M: C
. `' v' X8 _' Q用示波器抓取rx_clk时钟波形,查看是否保持25M时钟稳定,如果出现25M/2.5M 来回跳动。即MAC与phy未link成功。
) y; K# N) X1 A$ p
/ |7 c) }0 C i5 ]. n
# U" Z& E3 O7 M8 A8 k/ \% K
9 l! g6 w' f+ u0 Z4 h. \
4 I4 f0 T# T4 V/ t+ M H; K解决方法:. T! N9 H8 R4 U, e8 B7 l$ _
6 s( X! c [. V! K9 M) u4 i6 F软件上可通过在phy复位之后,设置寄存器0 固定为100M全双工,可link成功。目前可这样解决问题:* F3 t) C9 K1 k- f
+ J! H* n3 N- M+ H在drivers/net/ethernet/allwinner/sunxi-gmac.c 中 geth_phy_init函数中 phy_connect_direct 之前加入phy_write(phydev, 0x0, 0x2100)。$ }- ]4 E& h {( ~
; r' r3 F* H* b, k8 F9 W
: j# H( o2 e6 r/ k3 Y6 d Z6 W# R$ g
1 Q, ?# V" w4 e# c以上是我们在OKA40i-C开发板的使用过程中常见网卡设计问题,有些可能是因为大家在参考方案时出现了配置问题,或者是因为芯片输出的信号不正常导致。大家在参考OKA40i-C开发板的双网口方案时,可以查看本文章整理的问题点,说不定就是您现在项目中遇见的bug。
' \ S' s6 h6 U7 m" d) i% j5 I/ k# a1 l3 b. [) N
+ ^1 ^: f% D' Q, Q/ m* ^
- @/ n& h$ c, g8 k4 j7 `6 J1 k( g5 M0 f6 y
接下来,小编将给大家介绍一些常用的网卡软件问题对应的排查手段。+ Y/ h* E. j% c
: \4 J0 q% P" e' c5 d7 v
3 T6 R' m: J8 ~4 ?+ s3 e
4 n, S+ I( F5 Y5 {02排查手段" Q' h6 g4 a- C' }; D9 H. V
0 c7 U- C1 q7 P' @! i
这些排查手段可以帮助您在调试phy时有一个基本的调试思路,提到的一些工具可以帮助您快速定位并且解决网卡问题。
: n6 P' k/ I+ a1 B" M
% Q6 }, J# `. p
$ q1 W- h& `3 u1 K8 F
/ x- o+ D6 c# a) g9 [( f(1) 检查menuconfig及dts以太网配置是否打开;% f ?- @8 e9 j
1 v) k0 i8 }% }/ x! H(2) 检查phy-mode配置是否与PHY和GMAC之间的物理接口匹配,如rgmii、rmii等;- u1 O" E" _$ e* W. u( r0 `
* Q9 O# A" f( K3 {1 c2 ^(3) 检查GPIO配置是否正确,如IO复用功能、驱动能力等;
, Z8 I( e( q3 O0 D9 K
# A& i8 f% b7 W1 p( W: E(4) 使用phytool工具读取phy ID 验证MDIO是否正确。
2 O- q- A! ~! w
" r2 g% F i2 B$ k
) R8 [* M) Q; h% r% g! E. Z' X
& R) s4 d% Z9 o6 E5 K* ~6 |; w% c如下图示例,能够正常读取JL11x1的phy ID则代表MDIO通讯正常。
0 U8 Q( D. r$ `" j# [3 }9 _- M2 S) I, N$ t3 y' a2 k2 i; Y& e* [
, k& P9 K. n+ n! a* i- u
# d, y9 x* {5 Z# y$ s* l( y
5 q+ S! s( A4 ]$ T; p, B9 y使用phytool工具读取phy状态寄存器,查看phy芯片状态。以JL11x1为例,如0x01状态寄存器读取值为0x786d,说明link成功并且工作正常。# \; i+ m8 {1 o2 `6 r: f# p. [
" \/ z5 C" ?, Q( E1 c
* C( `+ P1 d( A) r; m) D( ]& G# _' q% X3 I' [/ A
! g! A3 m& A( e
! I0 }4 u O5 T, c0 C! A D6 X
|
|