|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
01问题分析
0 S: j. v$ k0 h$ R! R" d
2 m+ s( h8 \& K2 k0 Z1 F问题描述1——9 w$ t1 ~1 [% S8 J- f
+ Z9 i. I4 G4 E# p+ o以太网初始化报错 No phy found
4 ^) p) ]6 ~% y" p( l, x* Q$ W2 o4 U, a, L2 k1 a& [# c# x
在执行ifconfig eth0 up命令时,出现"No phy found"异常log。
5 y; i l) b' A+ F
, y; l7 @. P U) \1 @. Y3 y, d5 O( d1 S1 N
- i1 j0 \/ M9 y# ]8 ?) i' o+ K) E6 f# V% \3 }# O! k# F% {8 r i1 k
' {# ^# w5 d( V5 \3 _0 x
8 X" j& U4 T! m d' h, f9 ]; _
9 ^: w/ q" M0 U问题分析:
# c* j) _ H, Y' U
; L* r! l2 C' d1 |2 w出现"No phy found",常见原因是供给phy使用的25M时钟异常,导致phy工作不正常,gmac驱动通过mdio接口也读不到phy的设备信息。- ~( g% `& V% v7 X
* q+ Y/ n& T4 q0 G7 F
( g" G8 j6 r: S# _9 i/ b
+ t* |& Z! K, I, |* c5 S) q. }, z3 R1 P u. A" @
或者MDIO引脚配置不正确或者phy地址不正确;再就是MDIO没做上拉电阻,GMAC读取不到phy设备信息,用示波器量一下MDIO波形是否正确;再或是phy芯片复位失败,需要更换phy芯片复位上拉电阻。$ d& o" p6 z1 e) K* ^
) L- {4 u" q, ~8 f# q! ~ K) x
1 [$ D" G& } F% b2 o
3 s$ z/ h& L& b8 C" z ^- F( _: e4 G+ |. T6 D2 @# P& [# H
& x9 Z: _" Y; l* [; Y% Y. p9 q) w" A5 S r! w. y
- v3 `6 m4 v. G1 q/ |' s A
排查步骤:
1 L8 A4 e1 @& T! D
0 M* [! B% V( w7 W+ T$ D$ N2 X(1) 检查phy供电是否正常;
% G" P9 N2 O1 q2 n. ]2 K z4 w3 d8 F4 f# k- Y* O+ C3 i
(2) 检查phy使用的25M时钟(Soc ephy25M或外部晶振)是否正常;- C, N) G5 W8 H# ~# b
& D, I9 l; k- y8 v! l(3) 检查phy-mode是否按板级实际情况配置(mii/rmii/rgmii);$ O: K1 ]% a( q7 j5 c! o
, v* ?3 [7 j7 E: h9 y F; \" v
(4) 检查MDIO是否有上拉电阻;/ {2 }9 S, T8 d7 p+ W1 p
8 T& c" q; C- a5 F
(5) 检查MDIO引脚配置是否正确;; E- y- \; i1 ~ h
n) q+ I$ L+ P
(6) eMAC phy地址是否和硬件一致;( t' d) \3 X, r5 R" b
8 g0 J, q, ^# x(7) 检查复位上拉电阻是否和原理参考方案一致。1 P+ r- Z9 g0 T0 M3 G+ e/ W6 g
' v: m/ }5 q; c- L6 u) j. L" h
. g B4 o! }- A/ t7 I9 ], {' Q" c( i& i0 M+ D+ x
4 ?7 \- n- g. LMDIO通讯正常验证:
! n; m4 E% z7 m# b) A8 G8 R) \- Z& y& a+ R; X2 |
使用phytool工具读取0x02 0x03寄存器 是否正确读取PHY芯片ID,读取成功,代表MDIO通讯正常。) Y& R5 Z1 C1 m' O. z+ y3 {5 j( ?
* j! }5 z* L: h
$ ? x! K4 r" }4 X0 x# D1 r8 ^, _) J6 d8 h/ j( U5 G
9 i: g/ {7 t E+ A
; d" F( B# t/ C7 E! M
问题描述2——* L- H; ]9 e- t m1 {8 n
& c, A4 `. y* W! U以太网初始化报错NO SUCN DEVICE
/ G4 M) }; t/ P, ~, M) j( a9 l
执行ifconfig -a/ifconfig eth0/ifconfig eth0 up命令,找不到eth0设备。
9 N3 H% `* w- H& t. }1 a& l, |2 c |( I: a# F( _' B% D2 G& m) Z
' [) U9 h4 V0 [# Z6 |; B$ k- _
: s* b. g# e9 ^8 N. B/ K
3 d1 b; ~3 ?5 W" y3 D' H+ T( i' d1 }( B+ e/ d% ~6 `
1 Y3 t+ E, A# c- \问题分析:
1 ^2 q* A2 f+ q/ P+ b v0 d6 k
2 W# w. }% F: y以太网模块配置未生效或存在GPIO冲突。* T8 {9 O9 ^ L: Q2 o+ w) A
' T2 t, u6 d" S* e9 k# n) T8 e: U7 c" T8 f- n
9 _: }) s6 P) G* h1 H9 U
9 J! q9 u5 t8 V3 `! n% ?" E排查步骤:! Z6 S# a9 W7 S. ]$ D. P8 l3 L
/ e' l& Z. T2 x3 w4 k* H" U步骤1:抓取内核启动log,搜索"gmac"关键字段,检查gmac驱动是否probe成功;
4 c9 O3 ]7 Z: P% [1 k% }$ P2 x& Y0 ~ P6 _
步骤2:若内核启动log显示mac控制器probe失败,常见原因是GPIO资源冲突导致。
; h- _, i# s/ U; c. l
' ?# T, n7 C0 [7 Z6 q
3 B1 L2 l: A1 ^! @9 r6 S0 p c0 @
. A& I4 r7 O) [: H' r+ F$ _1 \: ]' }% N7 Y. f( Q1 f& A6 c
解决方法:/ Q1 Z, ?, P; i. c4 x' n
+ D* E! U+ ?- ~" l1 H2 ]: L: A1 {GPIO冲突会有报错信息,根据报错信息,查看GPIO冲突引脚。
/ P7 F8 a& C5 Y k4 p+ ?! s! ?% [9 u
查看以太网模块是否配置。
+ E6 h5 R9 \ @6 Q; ?/ C% Q, w& }: K' o) u o4 v
% t, D- v; x1 e" |- H$ s
, E- x4 D' L8 k0 ^
. F" n( z. ~0 Y d, v
: ]1 P$ Y; I# L
( z* `" ~( P- ^' _
1 r0 f2 o: s$ L* B6 z5 A% ] u) j8 D: a' H7 o" C
问题描述3——
6 l4 W3 T; y- }' h* U; v8 {
% F W4 j% s9 t9 h" G+ z1 i以太网初始化报错Initialize hardware error
4 _# j2 a0 b& ], K) ^
$ v: ~, `7 f ]( c. z; N执行ifconfig eth0 up命令,出现"Initialize hardware error"异常log。
: [! X: G6 ]% C* s$ \" d# a6 Y& I
+ Z, X/ a% j+ t4 j0 l问题分析:
' v$ \8 O* n+ y" C b2 P
! c3 G- e- {0 [2 t# `出现"Initialize hardware error",一般是由于phy没有输出RX CLK至MAC控制器,导致MAC控制器内部soft reset失败,常见原因是phy供电异常或25M时钟异常;或者是检查数据引脚的时钟是否正确,RMILL RX CLK TX CLK 是否是正确时钟。& O+ j: m' Y, J3 D: T( o
5 K: }4 R3 c0 D. e1 }& b% L, H
; H' t! O9 |( D: d- @8 G% r
! r1 e2 m2 o5 }% \8 F
& a3 |9 n% I/ b1 Q
0 l4 P e6 N B. D& }! ]) S; F+ u1 L# @$ N' z6 _( U
. h1 Q( l$ ~) k5 `
" X' n' Y2 U; V6 C/ O8 W
6 D+ y% _8 \4 y* f( I, A4 T* o4 t9 ^) s7 X* q2 s1 e# f7 _
5 \( B7 J' f9 B$ Q
6 B/ b G4 h4 e* Y
排查步骤:
+ Y/ e! `5 ?$ }' l5 z/ i! {4 K' T0 A+ `2 `
用示波器抓取rx_clk时钟波形,查看是否保持25M时钟稳定,如果出现25M/2.5M 来回跳动。即MAC与phy未link成功。5 Y7 H, a, E- a" i+ b
3 ~8 o, Z" C+ c6 ]. {0 v* C F8 K9 ?) z3 Q! X; l4 _& `' h5 p
+ J& J g5 L0 ^* @: a/ B b
3 v. G2 P3 {( B# O) q% @" M解决方法:
/ ^8 b* J7 w' j- |( ^' Y3 Y2 N; _; i1 I. S, c7 A6 U( P. ?
软件上可通过在phy复位之后,设置寄存器0 固定为100M全双工,可link成功。目前可这样解决问题:; x4 F% M4 f6 |! i( c
) K# p8 {- [% _" T( Y' R- m% d7 Y在drivers/net/ethernet/allwinner/sunxi-gmac.c 中 geth_phy_init函数中 phy_connect_direct 之前加入phy_write(phydev, 0x0, 0x2100)。
6 E8 }( f( M8 m3 v) k
. T1 j7 ?) C6 n1 C# a/ E1 g* _" t- X( b! y2 r" W, k
5 {. E5 b- ?9 U. |5 o以上是我们在OKA40i-C开发板的使用过程中常见网卡设计问题,有些可能是因为大家在参考方案时出现了配置问题,或者是因为芯片输出的信号不正常导致。大家在参考OKA40i-C开发板的双网口方案时,可以查看本文章整理的问题点,说不定就是您现在项目中遇见的bug。7 v; M; j/ l4 E9 l* m0 V G
1 ~1 e1 y0 Q/ q, Z# ~' h0 j/ Y1 a, ^/ R! Y, k, U& r. `0 f
1 w- i- O2 B. v, d) x) |7 A" E5 S
) u# ?2 U% X7 u接下来,小编将给大家介绍一些常用的网卡软件问题对应的排查手段。
& f3 i$ v1 \% g6 J- x+ o: V# K5 c" a5 k0 x7 F1 D
' y _ X3 j+ h/ J9 r9 W8 p% C
5 ^! w) T% G1 X1 v" P
02排查手段
: z/ N% d% k7 Y4 t# I' T# Z: C
3 a9 U' Y+ K( R, s这些排查手段可以帮助您在调试phy时有一个基本的调试思路,提到的一些工具可以帮助您快速定位并且解决网卡问题。+ k, N6 Z/ r4 D, i& v! ^
0 g0 {7 ]3 _! l9 Z/ ?/ f% q9 j! n/ @) K- h
3 d, |2 D* }3 L* t/ h2 O
(1) 检查menuconfig及dts以太网配置是否打开;' A4 v E8 _4 o
. ~/ P# b2 @% w0 [/ u f# B
(2) 检查phy-mode配置是否与PHY和GMAC之间的物理接口匹配,如rgmii、rmii等; U3 U# ?5 i) U2 \ k$ I8 \! H
; R7 x" N& I6 t5 ^- Z# A3 a5 p(3) 检查GPIO配置是否正确,如IO复用功能、驱动能力等;
1 z1 _: G' q& W6 d V& R& w- Z2 t: X7 _
(4) 使用phytool工具读取phy ID 验证MDIO是否正确。
) s a+ j% ^0 I, U" Q R l* R) L1 b" v& |+ f9 e$ Y9 e: |
3 D8 ~2 b: N: i- z- H2 `; x1 G
. X8 C$ q% j' ?5 z如下图示例,能够正常读取JL11x1的phy ID则代表MDIO通讯正常。6 a: u8 f8 R2 o2 e4 c
" u" n1 M& y( Z4 W; {6 @ w8 w5 Z. r
7 q# u& P h3 F, S0 E4 F" V
4 R2 X) M' [7 L9 l7 Z" I2 m Q/ n6 u5 D" g, i, ~
使用phytool工具读取phy状态寄存器,查看phy芯片状态。以JL11x1为例,如0x01状态寄存器读取值为0x786d,说明link成功并且工作正常。: D" ]) v o% z; H0 b) @4 \
" v* I5 g1 ?1 p
5 o1 I9 l \5 x9 n( H6 d. b! C& O+ f) S( M# X
% a4 j2 V6 F( m6 w& y8 I& J
0 W6 W; I: {: U: x |
|