|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
01问题分析
* R7 W [: V; W7 G/ y
# K9 |, U/ ]6 k1 ] Y1 c问题描述1——; ~' B7 Z& }6 L" @: T5 ^: g+ D
8 L9 ?3 D A" T) T' H* r3 A以太网初始化报错 No phy found4 ^0 B( B3 V5 }4 N6 V' D: l4 \( e
6 O- I5 ?/ `! ] p
在执行ifconfig eth0 up命令时,出现"No phy found"异常log。0 N6 i4 c! K. l
9 c$ I( w4 z# P4 h! M
9 k$ k! T, h6 ]" d! ?* r
* T1 ]; c' H& [' c5 h5 N- S7 h4 k* S' u
2 {+ x# W; J! b' F, m* V$ W( z3 `* k- H9 ^
' \! o; v$ l" N7 A2 L
问题分析:
* D+ j6 I9 B0 G4 |5 E0 r" m
) F0 z1 ~; {; `1 _" s- t5 \9 j1 |出现"No phy found",常见原因是供给phy使用的25M时钟异常,导致phy工作不正常,gmac驱动通过mdio接口也读不到phy的设备信息。/ y- J- a# o, l3 \0 g- q
7 l/ t0 n: K+ A9 d. @. U N1 m
# ?$ J8 h! f' ^" a- ^
. K5 U$ [/ }5 _4 u! D" O y: M9 S- g* w( u c: \. D
或者MDIO引脚配置不正确或者phy地址不正确;再就是MDIO没做上拉电阻,GMAC读取不到phy设备信息,用示波器量一下MDIO波形是否正确;再或是phy芯片复位失败,需要更换phy芯片复位上拉电阻。& Z' G5 I! c( Z/ D Y6 s+ b. ^
6 e2 b7 h) J5 t$ y" S4 K" E% N
& P# x& k% n2 B; j2 T6 U3 ?8 u X6 j1 ~! @& p7 Y4 L ]' r
% k9 A. x* W7 s9 J" S# |7 x v
* {; E& C% h# z% z
7 M. o& r, p' G+ |# f: ]
2 `6 t* M( M, A
排查步骤:
0 ?& R; _& e1 X8 }* v4 x$ P! ~, D# ]
(1) 检查phy供电是否正常;) L9 O3 k+ q' _; D' ^
$ c2 M6 ?9 X' z* f9 _7 T# R- r2 I& o(2) 检查phy使用的25M时钟(Soc ephy25M或外部晶振)是否正常;
7 d* N- H5 T2 `" P
, [5 O" @! m( G0 g(3) 检查phy-mode是否按板级实际情况配置(mii/rmii/rgmii);
. Q4 ~+ _* S6 w' @( d- ~6 c$ ~
) z! ?: x- y) U6 W% s0 A2 u(4) 检查MDIO是否有上拉电阻;7 Z! |. R- d6 r/ [2 h
4 t- h6 V# Z# @% l(5) 检查MDIO引脚配置是否正确;
5 _3 N; @* d# j4 W- A8 y
0 i# I9 f1 \( |/ I(6) eMAC phy地址是否和硬件一致;* P$ B! l+ ^& }6 k
. k0 d3 E# A8 v4 Z3 `
(7) 检查复位上拉电阻是否和原理参考方案一致。3 i& m& W4 [) n' u* x, z- } ?
! F2 o f0 B' `) P6 M$ ?0 p$ d, w4 g4 a1 _* ?# E% S+ h
% L# ^1 E& H9 o' f& D" I2 K# s J5 [3 Y+ [8 @3 D* p) M
MDIO通讯正常验证:% D( [& j3 }6 V; w2 c
9 P9 M* t4 N4 J) @* K
使用phytool工具读取0x02 0x03寄存器 是否正确读取PHY芯片ID,读取成功,代表MDIO通讯正常。
8 \: T3 O; q) X% o4 g
0 p& C2 |% F% L) z j( `- I- B8 Y5 ~
. T# s: H1 s9 F3 v3 A4 g7 u
- e. J9 y* L7 o9 M1 x9 Q
5 c' K+ k) ^3 D' b% K! U( f# o' ^8 e; q) D9 J
问题描述2——
0 H4 T) H' w) ^0 D3 Z! `$ S. O
以太网初始化报错NO SUCN DEVICE$ ^( p" K2 L* l' [, R5 E: Q
$ [( j5 b4 Z4 d5 V+ C
执行ifconfig -a/ifconfig eth0/ifconfig eth0 up命令,找不到eth0设备。
% p2 l# f" q# o& Q. Z# D/ C1 u
& K+ Y# c' _& Y9 L; t/ {
4 `# H& c. D" i9 V0 E- f( j# o) w# n7 M
: v" }5 P+ F- C3 } R8 R' A; H
: p i/ U: M3 ~' `3 O
. ]" D% x8 Z+ u5 a2 P+ h
问题分析:
5 ~" d* N8 p% n0 k- `2 F& \5 x6 Y. b ]6 Q! {% R' @9 A
以太网模块配置未生效或存在GPIO冲突。; N0 C2 f- ~1 r2 [& B _7 W5 J+ {
- M7 U* h( L, e6 a" ]7 Y
0 x% {# P0 F; `
( @& V) w! j) ? C s3 w, U2 t& r" x# \ z9 s
排查步骤:
. {( e. U% Z M2 ^( `8 @8 w
' Y& u: P N* t# g2 f3 i, N- O步骤1:抓取内核启动log,搜索"gmac"关键字段,检查gmac驱动是否probe成功;
# n! Y3 t# X( y n! j/ X! x2 z! g2 w- D( x* R8 G* l6 G
步骤2:若内核启动log显示mac控制器probe失败,常见原因是GPIO资源冲突导致。- [5 R9 ?# @! A) [) Y- M9 t
$ X6 ^; |, R# I5 y% F7 S" g/ l1 m' |: I; J
/ k# J/ N) h8 }! j$ u* f
. S- j4 E' k0 O4 T" d' b
解决方法:
! a% F( b- J! y. t7 K5 I1 Y L+ P1 \) w: s4 b1 {8 t/ n1 l
GPIO冲突会有报错信息,根据报错信息,查看GPIO冲突引脚。
( t+ K, G. k- s, Q; V
4 _3 o7 j8 F! y; v6 H查看以太网模块是否配置。
/ l/ \. v2 \8 q- _! B
# s: C5 ], A% {. m* W
d0 z9 o7 O) U' q9 w- u. m; l$ C( K! B9 j g
' k3 d2 a& [ A
" t( Y6 r. Z a5 [ f* v
, ]' m" s. B3 ]8 q7 O& \; g' T2 T, X5 A+ ^6 K2 Q
1 t! h5 g2 `" y) k, P, z/ [问题描述3——6 s2 C# [7 R2 s h% H
; w, R" A8 b3 S5 y* h( x
以太网初始化报错Initialize hardware error
( p2 i% V, M& b* y1 K" Z9 _& U R0 x; e5 O" i
执行ifconfig eth0 up命令,出现"Initialize hardware error"异常log。
# |; M! q- G% G, d" L% `/ C
# R5 I( Z9 ~/ q" a7 R问题分析:
& s2 D. k, a' S; Z3 ]- m' g7 d0 W+ H; h9 `1 J# J
出现"Initialize hardware error",一般是由于phy没有输出RX CLK至MAC控制器,导致MAC控制器内部soft reset失败,常见原因是phy供电异常或25M时钟异常;或者是检查数据引脚的时钟是否正确,RMILL RX CLK TX CLK 是否是正确时钟。
) n: _1 z" Z! U- H7 \* D
- _* x% t H: z) N4 R" Q# ?# }. m" L9 N' g+ a8 `' r l* F9 S
5 O, F% M k- I( j: w" m
( J0 f7 h) g, g" _8 C
: Q- b3 e% a3 J1 ]+ K$ k/ Y, w2 D9 O
! h% ~ N/ u. z b* L p9 t% _" p* e& `# ~
6 {; A& L' w' L! }
0 Z! P3 M" [' H; Z* n
$ ?( J$ J! \. r% T' c+ A/ K7 w! v! I9 V9 V/ v/ E/ D
6 a- j+ u( |# T0 ]' q
排查步骤:+ ]* t7 @' u& l n7 c- [( m. K
; e9 u* Q; J- Z" |用示波器抓取rx_clk时钟波形,查看是否保持25M时钟稳定,如果出现25M/2.5M 来回跳动。即MAC与phy未link成功。. w1 ]" A) M/ s! ]6 i- l }
' y, r$ n2 b# y0 M. H2 X) [6 S
! v3 @" d. N9 h& ~4 A }
# m) ?- m3 Q3 S! ~; r* X- |9 \' g% A' @+ u1 F( Z
解决方法:$ P' L# q% z @& X) I
) W. @; c8 W0 @4 _) I软件上可通过在phy复位之后,设置寄存器0 固定为100M全双工,可link成功。目前可这样解决问题:) U6 _! v0 i0 k+ f
* S+ p5 U' t) I1 O0 K# D- I在drivers/net/ethernet/allwinner/sunxi-gmac.c 中 geth_phy_init函数中 phy_connect_direct 之前加入phy_write(phydev, 0x0, 0x2100)。7 o' t% K2 P7 J. e+ _
/ U/ m# B m6 i' m& Z8 j
: c/ Z b$ E+ V8 C) m4 k# w3 {: q; `* B& G4 y: w& C0 Y7 @
以上是我们在OKA40i-C开发板的使用过程中常见网卡设计问题,有些可能是因为大家在参考方案时出现了配置问题,或者是因为芯片输出的信号不正常导致。大家在参考OKA40i-C开发板的双网口方案时,可以查看本文章整理的问题点,说不定就是您现在项目中遇见的bug。5 H7 {1 K4 n2 U- N7 S8 j+ r5 ^) z
7 O; ]1 c6 Y1 c, n) ~+ e
9 i3 {! x: O c' A* h5 w# A6 ?0 R% }% T4 e# Y' F# `
6 U6 `: Z7 I1 {5 { A+ C
接下来,小编将给大家介绍一些常用的网卡软件问题对应的排查手段。' O8 d# o$ a( B" O
5 s) \$ \- g/ t3 a; O2 n1 D
2 J: a2 a5 D: [' U) N2 m2 \6 s% }# E: m/ u. b0 i! r
02排查手段
* t4 g; W2 ?* s+ U2 @+ ^$ ?- T. q/ O* u
这些排查手段可以帮助您在调试phy时有一个基本的调试思路,提到的一些工具可以帮助您快速定位并且解决网卡问题。
8 F% E# u+ ^! t: f6 n. g( {6 i; {7 Y: ?9 C, V% Z3 Q* u4 [
3 S2 e4 u% @! |1 v: j
+ b- H8 L1 [8 ]. O(1) 检查menuconfig及dts以太网配置是否打开;
' ?% o( ~# T: ^7 [+ p& G. S/ z5 ^, b3 [
(2) 检查phy-mode配置是否与PHY和GMAC之间的物理接口匹配,如rgmii、rmii等;
$ U2 V1 F p- l f% P$ `7 A; a! C/ h; i/ W4 E G
(3) 检查GPIO配置是否正确,如IO复用功能、驱动能力等;
8 m4 T( t8 _) F& [0 n* p
) ]( t- J5 H" @3 m7 B- ](4) 使用phytool工具读取phy ID 验证MDIO是否正确。" J8 o# m) p: d6 S# x
; [* j4 `- L' R" W' z+ y) k
2 m" j# B, k4 N( e+ p0 \7 F9 c% M
如下图示例,能够正常读取JL11x1的phy ID则代表MDIO通讯正常。
4 q( G/ [3 g( J# o% n
9 a% E; `4 l2 ~5 H* H
, ~1 M$ O( D) S- n( |! n o X4 z" `9 e% Z! P1 u
8 C# }9 v! W9 {* p( [; c/ t1 O使用phytool工具读取phy状态寄存器,查看phy芯片状态。以JL11x1为例,如0x01状态寄存器读取值为0x786d,说明link成功并且工作正常。
" u, |1 P, q' N3 Y
* ^, d* \8 W2 E0 G2 H1 [
' l; J9 D W6 b0 i/ v
1 U! T% A& e1 U% b# r7 `4 m, C2 }
3 j9 x- U& c4 K3 K* j+ F N3 R4 A
, o; z: g; O* N* ?- s |
|