|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
01问题分析
$ G! H; S2 v1 l" A
2 K( Y) m) Q& |) M问题描述1——; J0 f5 F( w1 }+ ]8 k0 ]; W% b
2 D4 s! r$ s9 s$ U: \
以太网初始化报错 No phy found
: q* _4 w! _! H( |; x7 n5 a% Q( o/ }+ k" y: t" G+ J! u
在执行ifconfig eth0 up命令时,出现"No phy found"异常log。6 {7 V7 B2 X& u; B2 N$ \3 x
* V# w! W2 j% C3 q3 q
$ W! U# D5 }. e' A$ ]9 b- p9 }, ]) \* S# \3 b$ T2 \% G
/ U: f- O+ [8 M1 b- d
* r% k3 D2 X( Y' ^; h8 U* r2 r
# H7 h2 q4 e( T+ T3 L6 l( {8 F
) L' q! C$ M$ T! h问题分析:
( C# b& h6 j: }) s: m
+ Y4 T: a3 F% ~4 N3 D出现"No phy found",常见原因是供给phy使用的25M时钟异常,导致phy工作不正常,gmac驱动通过mdio接口也读不到phy的设备信息。
# R$ E, X5 K! u s4 v
" m7 y+ }- J0 Y' T& P6 O
. J, s& w6 c% ^8 o! I3 L/ y# e4 R( U M& F
& Z7 E5 R- V6 |8 x8 H0 a _, H或者MDIO引脚配置不正确或者phy地址不正确;再就是MDIO没做上拉电阻,GMAC读取不到phy设备信息,用示波器量一下MDIO波形是否正确;再或是phy芯片复位失败,需要更换phy芯片复位上拉电阻。
. Z5 W: m0 Q' w5 S* p! W6 q7 U0 w/ Z# {, R" _, s/ T% L5 |+ b1 c
& F% H) m3 k& W( e; {4 E# @9 O
- U$ f* i1 H5 [& `
8 D2 t3 v. z; P$ ?0 z
- ?% R! K' K: I6 I; Y' w3 r3 Q; R, z* y7 q/ R
6 g" @0 x8 Z. a% `9 h
排查步骤:
L2 u+ C' e7 |% W9 ?6 g2 @/ i5 x, `* l0 {/ f" d* e; u0 Q
(1) 检查phy供电是否正常;
# e2 g$ Q, e5 V" e" r i3 t2 F* a+ G* K4 A
(2) 检查phy使用的25M时钟(Soc ephy25M或外部晶振)是否正常;7 K+ C! S. O2 t4 U( K" u, a
% B" k3 D' j$ M+ C9 ^5 z$ A4 b(3) 检查phy-mode是否按板级实际情况配置(mii/rmii/rgmii);5 C& D! x& s+ k1 L: M5 z
& J; H8 ]5 _" q/ |! Z% k(4) 检查MDIO是否有上拉电阻;
5 d J: m( N2 @' j) t$ s) @% {( n2 ~" M m; c- [, V& @
(5) 检查MDIO引脚配置是否正确;
/ q2 R! U! ?" N1 _; ?% z8 e. V; ^1 i' o" \
(6) eMAC phy地址是否和硬件一致;& U3 ?/ G; t, w8 m
( y7 | [% @2 ]6 X2 D(7) 检查复位上拉电阻是否和原理参考方案一致。9 c t# Z- m6 a# C
; [7 @3 F1 o. J' _' t0 S+ x0 d; ~( P, E+ h& \5 B! O
7 j. `. `" d5 ?- T
1 m2 _* \: M8 D7 b% j
MDIO通讯正常验证:" |& R% U5 g" u# m4 w/ Q4 O
1 V4 M0 \5 v1 `4 y使用phytool工具读取0x02 0x03寄存器 是否正确读取PHY芯片ID,读取成功,代表MDIO通讯正常。
; w6 |* y2 W R2 Y5 y
4 T8 G$ V) |$ A& \0 \& u- Q- H! H0 ]9 V; B$ p" S
( f* m/ Z) j. V! O
( b1 v) X5 K# V0 h4 Q/ Z" B
: H2 P9 `- l" p) b: B9 q问题描述2——
1 g8 t" A* ^( x' W4 w$ L3 L
) Q4 U. e' t/ m- c! f6 a$ y以太网初始化报错NO SUCN DEVICE
, @& v2 L$ |& a1 e1 Y! W: a: r; b: H; S" s7 U$ E4 X
执行ifconfig -a/ifconfig eth0/ifconfig eth0 up命令,找不到eth0设备。
; w4 D; l3 n+ C
' W; ]6 F. S2 k3 t. h* o/ b
9 {# K; S! `& \ Y t7 P+ r$ Y! V. W* J1 f1 ?9 G& L
7 }1 y( t' l& x- a$ B
8 |! F3 M% ]: u) e* q5 L
: a# D( V9 ]# [$ Y- y N- c8 K
问题分析:9 L' f8 [/ U2 L d% D
' a8 S; t6 g9 W3 S- i* T
以太网模块配置未生效或存在GPIO冲突。7 L/ r/ Q! Z# h( l$ k
5 g& W/ W0 w/ [ v6 k5 |' B
/ y6 O; h8 k) f- o2 {
0 M3 g9 k+ L/ f
" J, V. ]6 D$ \* G4 q! j* ?排查步骤:4 @/ S' j& T4 Z3 M$ ? T
& o. @. k# m6 K: `" B步骤1:抓取内核启动log,搜索"gmac"关键字段,检查gmac驱动是否probe成功;( b; C, I/ L, L* C7 E& s6 w
, c1 u% l' p4 n2 r5 F4 P6 \4 ~* R
步骤2:若内核启动log显示mac控制器probe失败,常见原因是GPIO资源冲突导致。- t' b$ I2 R, J: b$ G
, i6 [) D+ r( T: v4 D6 m
5 A& S6 e+ B) @) l
. n5 H( w. R& R( o3 c M
% U! ^6 }2 @1 A" Y
解决方法:
$ R+ c# L) Y6 H% g4 M2 s9 L/ R& j
GPIO冲突会有报错信息,根据报错信息,查看GPIO冲突引脚。6 A1 i9 X- ]4 Y9 U! {% j- r8 I
# E: X0 r9 v- @0 `. s& S/ l4 c+ x查看以太网模块是否配置。* P! n" ]4 v4 A
; A* I( c0 f1 S2 S' Z
$ a! H& X! R" M
( q( N! q( Q4 z& N6 Q3 X3 P
; @6 O3 W9 |* o2 y/ f
8 I) C a& p. _. J1 s( D% b
& { W8 ~+ W- y' K$ ]9 V# c( D
0 H; O% @6 |5 Y
# l5 g/ ]3 `; B% R0 {* t% W问题描述3——. ]7 y! _& E+ O/ z) w
& h8 V+ I, S" w7 L, c
以太网初始化报错Initialize hardware error( u1 j+ X1 i- s
5 j( t% a) ]3 F" F执行ifconfig eth0 up命令,出现"Initialize hardware error"异常log。" X4 n- k7 c8 v9 d
" ?+ h0 S" s6 d) f g! P( a
问题分析:
' u) }% e4 g' k5 C$ y8 l$ b2 Q7 ^6 E7 f. H' s F C. q n7 G& B" z# l
出现"Initialize hardware error",一般是由于phy没有输出RX CLK至MAC控制器,导致MAC控制器内部soft reset失败,常见原因是phy供电异常或25M时钟异常;或者是检查数据引脚的时钟是否正确,RMILL RX CLK TX CLK 是否是正确时钟。
% I- B0 |" Y0 G4 I% e' \7 p$ v' n6 Y' J! T
6 t% k: M+ X& A+ N) I8 c
% Q2 d5 M, f4 w$ v: V
; I& L# `/ v4 P' q
( s" F* q c7 f$ y5 C- q
. R K4 C7 X7 \7 i# S" p
z N/ |& f* j
! N% E+ J0 U2 M5 [: f0 j; w% V+ K+ b, n) `9 ^* K
, x( o0 z, \* K# ^: w
% Z1 {. Q% B6 q0 U
3 a! V1 Y* c9 ^! H
排查步骤:& }% O# m) t/ l; @5 i' ~
% b* f# g6 B, U P: I! X* c用示波器抓取rx_clk时钟波形,查看是否保持25M时钟稳定,如果出现25M/2.5M 来回跳动。即MAC与phy未link成功。
. Y3 i6 H8 R+ F- Q. C2 R3 }2 w2 T3 n2 N9 j
% j1 [4 J5 _: u+ u
0 _+ m/ ~7 u2 q# ^7 w9 y3 d- P. ]* ~1 L& T4 q
解决方法:
3 u/ W) T; B5 h. d* U6 i
5 L- B; j# |3 B软件上可通过在phy复位之后,设置寄存器0 固定为100M全双工,可link成功。目前可这样解决问题:
) y, K; k6 b0 D8 u7 S. ? T& N; V2 d! k8 j& s2 H1 C& \
在drivers/net/ethernet/allwinner/sunxi-gmac.c 中 geth_phy_init函数中 phy_connect_direct 之前加入phy_write(phydev, 0x0, 0x2100)。' u- \: m1 @$ ^' f
# U& T% ]1 Z6 g3 @. f
( }& q0 c! t' G3 a1 `* l" i8 I1 m5 w( t$ K
以上是我们在OKA40i-C开发板的使用过程中常见网卡设计问题,有些可能是因为大家在参考方案时出现了配置问题,或者是因为芯片输出的信号不正常导致。大家在参考OKA40i-C开发板的双网口方案时,可以查看本文章整理的问题点,说不定就是您现在项目中遇见的bug。! h1 B1 `7 W7 j
' _( N, ?7 `/ G, s8 J$ L% S( @9 |- o
6 i6 y) n7 ]* \- j& S- N+ K5 I$ L! i7 d, q" c) q9 m
4 g3 ~2 O! \$ ~& F
接下来,小编将给大家介绍一些常用的网卡软件问题对应的排查手段。% x, {& p6 G3 N- V& S; n/ q
# _/ T" [8 F2 H/ c$ R5 n" r, z1 I% A9 K9 C% W% U% @5 I
+ f1 ?7 p# V1 D8 N" W$ i7 j* U02排查手段 P& i0 q; ^' M+ H; e
3 f1 s9 o' f3 y) ]+ g$ e这些排查手段可以帮助您在调试phy时有一个基本的调试思路,提到的一些工具可以帮助您快速定位并且解决网卡问题。
! [( V" D8 U1 i# Z& B2 v
. w7 T+ d2 |- f3 n8 a) h* U5 A$ @/ }$ U
+ }& @7 X5 [/ T4 H! y
(1) 检查menuconfig及dts以太网配置是否打开;
( K* }4 @( t c. {
# s# b8 q2 f v7 \(2) 检查phy-mode配置是否与PHY和GMAC之间的物理接口匹配,如rgmii、rmii等;
) N3 [7 ^# f6 Y" c, x
1 p! h: T6 {5 l" O7 e* f$ K(3) 检查GPIO配置是否正确,如IO复用功能、驱动能力等;
9 G7 }- I8 [- \3 y' Q5 ^( _' X" K& a2 ^ k2 J s
(4) 使用phytool工具读取phy ID 验证MDIO是否正确。* G. T3 ]5 O4 h3 |$ {" l+ B
0 N; m# X3 C% C, Z$ D
# X$ x1 h; u$ o# C$ \4 U9 @/ q
# T2 _; }, z3 A7 U, w3 m# w如下图示例,能够正常读取JL11x1的phy ID则代表MDIO通讯正常。% ^' i) B( R/ w( k6 N( @
' V2 {2 l- p! j9 S
+ A$ ~- M* O* _" d/ {9 j- Y- T) s" |# U. u4 u. p
8 ] h7 W u0 D ~8 R
使用phytool工具读取phy状态寄存器,查看phy芯片状态。以JL11x1为例,如0x01状态寄存器读取值为0x786d,说明link成功并且工作正常。
" s$ K5 q/ v9 o
. d( B' q7 M7 Y$ E* \6 M* p+ A7 e& ]5 n
3 ]# P& ^& |) g7 a) F
3 @. l4 p3 @5 Q3 X# R
% d! J" V2 H, i( { |
|