|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
01问题分析
& l$ j- P- j" N& E8 K3 g% O
0 i: Y& g- U' Q; d6 m3 {0 m问题描述1——
' M u! | i* l" m' ]0 z& f1 m
" o$ k/ u6 S- D3 Z以太网初始化报错 No phy found
! {5 b2 S. h" g; k7 `: X
, P" ^( G! e8 C9 H在执行ifconfig eth0 up命令时,出现"No phy found"异常log。- q. g4 P0 a# ?4 v% N% _
+ ?8 C$ |" z# V J) m
: p( R0 _% S9 ~4 Q5 L% [ c
, {8 d" J0 I. y9 h. a9 t' W# \5 Y- V
5 K+ P2 w# V9 I
- M2 o' } `8 L1 j; ]# F1 D- |) u( j
问题分析:4 J& M+ ]8 l& K f
( T4 P, v' `1 a( f9 C( f. i
出现"No phy found",常见原因是供给phy使用的25M时钟异常,导致phy工作不正常,gmac驱动通过mdio接口也读不到phy的设备信息。# j7 M% @2 k6 w% a2 N3 O+ `
& }$ `* @5 `6 F8 D' U1 l5 _! s2 z/ o! c+ H% d; z
' W& G( I$ l- h# w
( D) A' F% J2 ]: u或者MDIO引脚配置不正确或者phy地址不正确;再就是MDIO没做上拉电阻,GMAC读取不到phy设备信息,用示波器量一下MDIO波形是否正确;再或是phy芯片复位失败,需要更换phy芯片复位上拉电阻。
. s5 Y: k+ G) w; G. l, E5 v' `0 u, Z, z, Z. I- b% w6 a' Y& Y
8 r. I1 b/ ^ n# z
$ @0 s- I! L% Q) \' k: Z- T- n2 T5 L
- ~0 r$ g- I; |- m9 L
) L+ b% Z6 U+ C" `! y
& w( q3 P$ y6 i7 _排查步骤:) B, _8 ^) l0 K1 W" S# H9 Y0 u" b
( R) V* ]! F% J! L6 F$ X2 u(1) 检查phy供电是否正常;
0 ~8 h' h1 j6 C; L; @# |5 n9 o
$ h j8 x1 _# z f5 e& M(2) 检查phy使用的25M时钟(Soc ephy25M或外部晶振)是否正常;$ j! m G3 }# s( y( X. i
: k5 j4 f9 ~9 a; p- c(3) 检查phy-mode是否按板级实际情况配置(mii/rmii/rgmii);, {( r5 B& [: d
% s& i; N& `& X0 ~3 O(4) 检查MDIO是否有上拉电阻;8 o7 S, c$ }" r6 ~: I7 Q# L; E
3 o$ P, W* s* a+ d ^( Y/ ]
(5) 检查MDIO引脚配置是否正确;
! R; f$ ?& m& M* Z# m# m: G+ q3 U8 I8 {8 g% E( o( K9 `
(6) eMAC phy地址是否和硬件一致;7 h1 z! C; r0 D! j z+ c
8 L% j! v8 c2 u
(7) 检查复位上拉电阻是否和原理参考方案一致。5 \/ ~" a$ u5 V. r+ M
+ m6 U: g; J; {" W) a; X( y( ]: y, ?0 k& [
$ R% ?+ A0 E" X/ R
, M- A% Y0 ]/ Y: b5 t/ P1 I, d" l! ~MDIO通讯正常验证:
$ J2 i) l2 y0 H! d7 d. T
% g% i6 o& |5 Z$ {0 h使用phytool工具读取0x02 0x03寄存器 是否正确读取PHY芯片ID,读取成功,代表MDIO通讯正常。
( a) T+ U4 X! p* V2 a# ~& y2 a# r; r3 b' m! M% X
( `: e9 \% m/ G& B2 P+ \
" @. e0 w6 g1 l* \2 P6 X s/ j4 Y1 M3 F H( R0 q' p- l
# X/ W5 }+ G0 C: H2 f) R* T问题描述2——
: g- Z7 T1 o v6 H/ {9 C' c, A# ?2 g) T
以太网初始化报错NO SUCN DEVICE
5 p7 k* s) Y) O2 b4 p! b' C1 M# j; G. T0 P) i4 C0 r
执行ifconfig -a/ifconfig eth0/ifconfig eth0 up命令,找不到eth0设备。0 _, Y" ^& c' `6 L/ V# r
. z# X0 C8 P. @$ u# ^; p& ~5 e
3 v* `/ N# q$ q" N' U: o* l" r; u9 ~: Y6 ^, n, l; j
$ B6 Q6 ~4 l. \" o* P
9 q% X7 G( o4 `7 ?. P8 M) `% [1 ?2 K; L2 g" B3 C; F6 P
问题分析:8 T0 A9 q3 F2 f1 a
C+ i( U' R: E/ _6 u4 [$ |
以太网模块配置未生效或存在GPIO冲突。, d N( p) `0 V6 J! C
R1 F- j0 K5 w, N P {( p7 S" E
( T d! }9 P/ f
6 ~ d: q5 T4 }6 N# ?- x
' c1 Q/ [# Q* g; [排查步骤:$ v/ t/ \1 j, l, a! u) N
5 ?9 o0 N' v7 k* u* [
步骤1:抓取内核启动log,搜索"gmac"关键字段,检查gmac驱动是否probe成功;
z8 i6 ?/ T$ b, p/ N; W
9 G& L. `/ s1 x$ @2 ^步骤2:若内核启动log显示mac控制器probe失败,常见原因是GPIO资源冲突导致。
/ I6 H9 ~) s3 z3 Y( ~% l( u- R
7 B$ \6 m; D1 f! m& T k+ A [8 h( a% c" C$ N. ~2 Q! D
% G* [# x! E2 }* G* c解决方法:. i$ h6 U9 l3 t# }: U& v9 F
4 N( Q% k4 g4 e2 C j
GPIO冲突会有报错信息,根据报错信息,查看GPIO冲突引脚。/ Z: E, D) K* f( F1 q% ~% N. p- R' z
3 G0 ?+ p* j6 u# W
查看以太网模块是否配置。
* O* {5 P% J% @" ~& d2 N* w+ G _. C( G' M. {" P2 v
, L! N+ r6 h) s; P* Q$ I) G, e V' s Q: r
8 u2 H1 [ b5 G0 Q
$ M5 S4 ]: C5 N2 g9 e& Z) Z/ N8 D- F
S& J6 d) l$ C" X
2 U! y' G n5 `( I4 i' h0 ?
问题描述3——
4 }; _3 f. Q# I* J" i! l& k# c" {' Y6 Y( \+ i5 ~! m
以太网初始化报错Initialize hardware error
, I/ Q8 C6 Z+ m D A$ n# g: F8 p2 L
$ w4 `$ Z4 T( T$ N! ~执行ifconfig eth0 up命令,出现"Initialize hardware error"异常log。
0 q% S: b& W" E. X, N
' Z4 K! P3 @/ f. M: Z问题分析:
+ q, J1 E/ h; r$ }4 q+ H
, G$ @' A$ h9 P" Z- }; L# a出现"Initialize hardware error",一般是由于phy没有输出RX CLK至MAC控制器,导致MAC控制器内部soft reset失败,常见原因是phy供电异常或25M时钟异常;或者是检查数据引脚的时钟是否正确,RMILL RX CLK TX CLK 是否是正确时钟。- o: a$ U! t) F+ ~% Q2 T( F
1 F3 B! k9 N& d& O% F4 f% x5 q& j4 [
% m* _7 V( z# H0 O/ K& L$ l" s" J4 y' f. |% h4 g% U+ o0 C" x; e
0 ^* Z& w1 F! t6 Y! D. R
4 x" K" v7 t+ l; n- h
8 U6 V4 o: Y' a7 c- u1 M8 S
3 i- O! ]0 k# F3 i2 f
/ |* M9 Q9 p4 R# i9 N& K* P7 f6 A: T4 K1 v( R6 @& G
4 Y: @" [. ~% e- a3 c
8 G& y' j4 T2 ?& G; z2 j/ k, V( Y$ l% Y6 q, @+ P& Y
排查步骤:' ^7 |9 V: ?; N8 S( k. u$ V+ ~) ~
) c; e& F. S u s用示波器抓取rx_clk时钟波形,查看是否保持25M时钟稳定,如果出现25M/2.5M 来回跳动。即MAC与phy未link成功。
: ^0 I2 z' N2 V& N& w5 N
" S/ t, Y G1 c2 A! ?# g( s- w1 G; ]; y
5 `' u' N: ` H# [
; N, ~( _, A9 G2 I( Q2 _解决方法:
# G7 ]- k9 d3 X- M) Z, X3 u, {7 M3 X# f
软件上可通过在phy复位之后,设置寄存器0 固定为100M全双工,可link成功。目前可这样解决问题:
# H' ~& i# k# i' k
2 @/ `# s7 n+ N( P% y" t7 q) t在drivers/net/ethernet/allwinner/sunxi-gmac.c 中 geth_phy_init函数中 phy_connect_direct 之前加入phy_write(phydev, 0x0, 0x2100)。5 p$ R8 B+ j1 q: W9 [
- l9 v% E: j# S0 T1 Q
; W" s6 L! h, y% I; b# J: G. s/ g* r7 {, V% z9 M* K: a
以上是我们在OKA40i-C开发板的使用过程中常见网卡设计问题,有些可能是因为大家在参考方案时出现了配置问题,或者是因为芯片输出的信号不正常导致。大家在参考OKA40i-C开发板的双网口方案时,可以查看本文章整理的问题点,说不定就是您现在项目中遇见的bug。" j8 f8 |( v# g! b' t1 p, `
7 M1 O! g% B4 K' f+ s* M6 K
& v) y u- k, G [7 ]! X- S8 c8 X
9 ?, }6 q7 Q" n" K: n0 D, @( V, q& l/ Q6 @
接下来,小编将给大家介绍一些常用的网卡软件问题对应的排查手段。9 H. i0 F+ a* N( C8 |
8 e! s7 T' P7 g! Z5 U+ n; U4 m( L/ @8 Z# l8 }7 l! C
9 f# D. I" l% l3 m+ q: e/ X! c02排查手段
0 E* d: m- P2 j7 {9 a
# P0 Z. Q0 z" x0 I- q! B这些排查手段可以帮助您在调试phy时有一个基本的调试思路,提到的一些工具可以帮助您快速定位并且解决网卡问题。
8 q4 V H, [5 p1 H: L- ?% s. J3 }& e6 a% H; p5 N
2 ` Z8 z8 A' B) i+ x3 l3 X- R: I' B) w) c N0 c
(1) 检查menuconfig及dts以太网配置是否打开;8 M" j3 J" U9 f5 D
7 X) e& W* a6 j; O(2) 检查phy-mode配置是否与PHY和GMAC之间的物理接口匹配,如rgmii、rmii等;
6 q$ ^' I5 D( g% n3 Q
3 |- T* ]0 t4 ~& B2 H(3) 检查GPIO配置是否正确,如IO复用功能、驱动能力等;2 T" _3 Y4 h9 H
) M( H7 K! T) M1 ~4 j(4) 使用phytool工具读取phy ID 验证MDIO是否正确。
& w0 L; y8 n* y6 m
4 m+ a9 X7 O. M p v+ h" l9 @
0 }1 E6 o( H5 S4 }' B6 k' R! P, ~1 m3 }) B. r" F
如下图示例,能够正常读取JL11x1的phy ID则代表MDIO通讯正常。
- J3 ^. U8 L* h$ I
5 a; v& u v3 P2 J
7 g& | q! a1 y& }$ l8 P
' \) C* K2 k4 ~* p! A
/ `/ x3 V9 w9 E) Q) T/ Z使用phytool工具读取phy状态寄存器,查看phy芯片状态。以JL11x1为例,如0x01状态寄存器读取值为0x786d,说明link成功并且工作正常。
4 K" w5 E2 g" N% c& S
4 i- e- A) t9 d# X7 G& o
7 J7 x" k% b$ ?- x4 u) p9 U0 j* P2 w: m
4 L- x% j. t- q& q# t# d/ o* V* P7 z1 Q/ ^. i) ?' N
|
|