|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
01问题分析
' C5 T4 }8 U& p3 w( q, A- t; j" _) _: c+ Y" l) V) v# F) s
问题描述1——1 J1 Z2 l1 v+ I3 x2 W s
/ a9 e: c! r+ s* r) [! e以太网初始化报错 No phy found
. N& y* V7 q( I2 b. C# ?. e+ @) k, E/ z) w
在执行ifconfig eth0 up命令时,出现"No phy found"异常log。
; _5 I* ]& L. b ~; y
+ q @7 u* ^/ U7 @
( f, H5 D& M! P! j! P& A3 U3 y& s1 v& i, }: \! Y: z
/ h- U$ N9 d1 Y
4 C0 I6 f9 y/ V4 A1 x& P9 I- |8 J" z. f5 `# Y- B
8 Q4 u" R) x+ h问题分析:
: {- @2 b! q8 a6 X; R4 C- ~0 P5 C
) b' B* [$ B% }- X5 Y6 X出现"No phy found",常见原因是供给phy使用的25M时钟异常,导致phy工作不正常,gmac驱动通过mdio接口也读不到phy的设备信息。
& S& ]+ ]: @; h4 b& `
' @) g; q$ r& D- p% H0 b9 Q6 j3 W4 ^5 H% }
0 l1 {& t; ^* T# C! N
) Z5 A# s8 _+ Z+ z% @9 {( Q# K或者MDIO引脚配置不正确或者phy地址不正确;再就是MDIO没做上拉电阻,GMAC读取不到phy设备信息,用示波器量一下MDIO波形是否正确;再或是phy芯片复位失败,需要更换phy芯片复位上拉电阻。9 [+ S0 g3 y! h5 ?* X
% f$ B( U9 ?% N: b$ |
$ G: o3 U# B) L l9 K8 H& U$ w0 P5 I# H
, r; J* B; z& p8 L; |
% T* B* x9 U$ k8 u5 k7 ?
0 h% P" c# N- h1 O4 I4 S" }" I2 {3 m i8 w9 m! `0 T
排查步骤:
! a. `( d: j V2 @7 e! |7 p# G3 c. Q& ?, d i0 O) d- |
(1) 检查phy供电是否正常;
$ J: u% W6 U* _5 C! O0 o4 D9 Y
8 i. d3 S: ?+ _2 I# d(2) 检查phy使用的25M时钟(Soc ephy25M或外部晶振)是否正常;! J) M* u3 h5 R m4 o, J
# G$ E8 y g: R y0 |- e5 x
(3) 检查phy-mode是否按板级实际情况配置(mii/rmii/rgmii);
. S4 S* `, f1 }$ m) z; S5 D) ]
3 ?+ e; D% x: @: B& P(4) 检查MDIO是否有上拉电阻;8 t' f( p, W! b) d7 n
( h6 `$ U- v' ?3 Q: q# U3 K# c% @
(5) 检查MDIO引脚配置是否正确;
& y9 u7 p k9 J9 w7 z1 V7 j/ i% [& c0 {1 U3 f$ }
(6) eMAC phy地址是否和硬件一致;& j2 x$ J5 |; R4 y6 z4 f0 I
5 o7 X, D( A; p8 F( @
(7) 检查复位上拉电阻是否和原理参考方案一致。# W- {% O! I+ ^4 ]' x" s
$ p2 C7 h- }! z8 p8 n7 i; x% N
- J7 q& ]) q& z2 `. X: ~0 K* \' n K7 i' `
( M) a+ P, G/ {# F; sMDIO通讯正常验证:
" o S: j" B* f8 ` l6 s- X8 S C1 Q' t
3 _3 g8 s4 D. j9 h! y8 h4 }+ C5 F使用phytool工具读取0x02 0x03寄存器 是否正确读取PHY芯片ID,读取成功,代表MDIO通讯正常。
! s0 a8 v; n/ i% b$ a* `1 X) N8 k3 q
0 Y2 i% g1 r6 v1 m1 c6 S ~( X
: G5 u4 ~# j, q6 z* D- x& d# W/ O) J# ~3 z9 a
. k$ X$ h3 J" O
问题描述2——
/ A, n$ M# Z+ ^/ q" R$ O* C. c7 Q( h
以太网初始化报错NO SUCN DEVICE! H5 c! G0 N+ ^: E- ]& U8 t
7 h0 r) s$ f; S3 n执行ifconfig -a/ifconfig eth0/ifconfig eth0 up命令,找不到eth0设备。7 J/ {8 e. l S4 ^; {& D0 ?
! s: I; _7 k( E% \
1 a" ~. k( Q, C0 g/ F$ W, F
0 X% T6 g" F; ^% H% {" Y. q
/ c3 ]2 n; N; ]- ` }( x' u- I( W- f; F$ N
/ @7 {& u' T# x9 O+ z5 T
问题分析:! n& C: i/ K! Y
. V+ d. ?$ M4 { e8 ~: Z0 Y% \
以太网模块配置未生效或存在GPIO冲突。1 X5 \" {7 n! r. u) ^7 Z
% g& i- v* L1 S2 I' @# T! Y6 x+ u9 w) R, u4 g O" o
% z. j$ R% ]% o& ]
, T E- y2 C. ^1 U& w3 ?* _
排查步骤:1 u8 X7 _2 |7 S4 ?: @ b3 f
5 M2 A$ B) m7 }: W; k# V
步骤1:抓取内核启动log,搜索"gmac"关键字段,检查gmac驱动是否probe成功;! ~9 v) H$ J9 z: ?, P" [$ C
% ^2 ^6 s% _ b4 m$ s
步骤2:若内核启动log显示mac控制器probe失败,常见原因是GPIO资源冲突导致。 Y2 r$ y/ h$ v9 p
& K& E; ]3 Z& x& d) k% c3 h$ B2 w* m5 |# i# C7 j3 V
/ {) h5 @9 s9 }( A
5 w5 [6 A& V* G. e解决方法:3 X6 ^# s9 ~; _1 |- M6 ?. Q) G
' t6 y( ?( }+ _
GPIO冲突会有报错信息,根据报错信息,查看GPIO冲突引脚。* L, X7 f" L& N
a. m% `% r2 m9 i" Y
查看以太网模块是否配置。& z* H; b9 M1 y$ C; J
( m- W+ `% p3 n6 b, d
, R+ ^% {9 j8 U7 j: H
# q4 ^: q4 D# L9 V$ O1 N. e3 a* C: R4 M2 E% h) ~0 s& b0 A
" \% M6 s& H) t+ i0 G
# C0 C' l3 b# z( `+ a1 k
- c! z# b2 s( }6 \5 p: O9 A$ c6 w$ T }& r" e" Q
问题描述3——; b3 H2 W# \. F5 [, \' X
y+ w) M8 m1 M以太网初始化报错Initialize hardware error
D) ~: U$ b1 x9 @* v1 E& `1 n3 k$ \/ g' L/ @( X$ j1 z
执行ifconfig eth0 up命令,出现"Initialize hardware error"异常log。0 g* F- `8 t3 D; S
8 p- |! y7 q+ v) Y" t! Y4 L
问题分析: H# j$ N2 A2 k# f; N/ `% S9 ]
$ G) H O/ g& {+ \2 m7 n
出现"Initialize hardware error",一般是由于phy没有输出RX CLK至MAC控制器,导致MAC控制器内部soft reset失败,常见原因是phy供电异常或25M时钟异常;或者是检查数据引脚的时钟是否正确,RMILL RX CLK TX CLK 是否是正确时钟。
' ]& r- W }+ }% s! f! j9 x# Z, H4 Z
( @7 Z3 \3 `9 W! H2 @- ^- @: S
! ]) i; l5 p7 E: n9 ?) b( l
B( D& @: `" K4 i, a* @% u6 U# L- F
* J! {4 c7 i* ]5 j
" |! E% p4 e) H3 ^- A* z) k; u6 e
: i2 q8 G& H0 }# u
3 [/ d% x: `! ?
6 w. w# g9 [ s0 V8 l, G* f2 z q4 N; e! U+ D8 O* k, o9 M4 b# i
/ k$ i6 A4 J1 X J5 ?* k排查步骤:
$ K1 L( f) r2 @+ j) H
- {9 Z U/ M# L% O' z- [用示波器抓取rx_clk时钟波形,查看是否保持25M时钟稳定,如果出现25M/2.5M 来回跳动。即MAC与phy未link成功。0 m T8 C; u6 p& a8 w
) u+ }( c7 m6 T# l1 W6 _7 [* K1 w, K5 v4 f3 r; ]9 p2 ^
: G b$ R- [4 \+ n& }8 [; ?
3 C! I$ M& }, v9 [7 |8 B. |
解决方法:! v8 B2 k% |7 k, d" n. [5 r- M
4 D! h# S( @: v5 m
软件上可通过在phy复位之后,设置寄存器0 固定为100M全双工,可link成功。目前可这样解决问题:
8 [* `- n5 c: M* g' S% |& N& j
3 J2 r3 U7 b/ e8 k$ v) @3 x/ Y在drivers/net/ethernet/allwinner/sunxi-gmac.c 中 geth_phy_init函数中 phy_connect_direct 之前加入phy_write(phydev, 0x0, 0x2100)。
) r1 Z$ z* \$ q. S: V( @" h: L
5 U$ ]0 ~" {: `3 }2 A9 C
# G Z) X: h) c9 w7 T' }: ] v
" q- { W6 e0 Z以上是我们在OKA40i-C开发板的使用过程中常见网卡设计问题,有些可能是因为大家在参考方案时出现了配置问题,或者是因为芯片输出的信号不正常导致。大家在参考OKA40i-C开发板的双网口方案时,可以查看本文章整理的问题点,说不定就是您现在项目中遇见的bug。2 J7 ~2 s, P W
8 a% w& I2 v) F) \- N* h: ?% p( d9 Q( u3 r6 e
+ W4 ]$ O+ }5 }
9 o- s, J& W5 I# T$ o/ S4 N接下来,小编将给大家介绍一些常用的网卡软件问题对应的排查手段。! v% \ e8 s: W; f' d3 R
+ Q: O' G2 g# ]: a' n$ c- K+ K3 O3 |+ K& x; ?& H; _
. ~3 R# @ n; V4 L- B( f$ f02排查手段
# n$ J h- p6 M( W/ N
' r2 c; b Y6 _( ~. r+ b这些排查手段可以帮助您在调试phy时有一个基本的调试思路,提到的一些工具可以帮助您快速定位并且解决网卡问题。
" X" l2 m0 H: a" u' ?3 K# N. i
, ~8 h* q* T4 r! _: Y6 w6 v; U
. `9 {& A: c; ~" r: `$ l(1) 检查menuconfig及dts以太网配置是否打开;
* O: m K9 y# E' {8 W; j' A+ H3 S) `
* T% N5 b. p7 |1 J9 j3 q" l& p(2) 检查phy-mode配置是否与PHY和GMAC之间的物理接口匹配,如rgmii、rmii等;
$ J0 G1 R; P+ [% A8 E3 @, g* \& f# ?; D% ]" L; G% x3 F6 _
(3) 检查GPIO配置是否正确,如IO复用功能、驱动能力等;* R6 Z3 u+ F5 n
. Y7 x/ R. }! w) n% R4 H1 ](4) 使用phytool工具读取phy ID 验证MDIO是否正确。2 t6 E% V$ q4 p4 A/ ^9 @4 J" E
8 v1 r* z5 d6 X( d* l; m2 [
0 R/ P5 c8 p1 i `; b, H: x. k2 j' W z9 w0 Z9 ^/ _
如下图示例,能够正常读取JL11x1的phy ID则代表MDIO通讯正常。
+ a4 ]+ L7 V( T4 H
, w0 x) n/ T9 X+ |+ d
* l' [, W3 ?. q% A8 r. `* L1 ]) q, k; [+ Q, L2 [) s
7 Y3 v0 T4 U0 v
使用phytool工具读取phy状态寄存器,查看phy芯片状态。以JL11x1为例,如0x01状态寄存器读取值为0x786d,说明link成功并且工作正常。! d7 i8 I! W/ J. y& g
1 p5 p, s6 Y% R& X
- S- S& B. l7 P7 o
' A, G' d& i4 e
* T) n. z1 i7 P; t
2 ^; K n) E# _, z7 M5 P0 r |
|