|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
01问题分析
5 D F3 O% P' }# J. j
- I* r1 L( I' Q# Q1 d' I问题描述1——, b( V6 _- n# D! [3 _6 _" y
" z. n$ O0 x6 W7 b9 F3 N7 C以太网初始化报错 No phy found
/ x7 T+ W2 Y# s, W6 R7 o$ f. @1 }4 k5 _
在执行ifconfig eth0 up命令时,出现"No phy found"异常log。1 W1 q$ f# z, x
( I; i: T- {( O% H6 N" \) C
- k' l* }! ]6 A3 a! {0 I+ |2 z4 J! Q% n8 Q
% O/ |7 Q' M: _8 l" y1 q5 y
, U7 w0 A. p1 W, w$ e
6 J% q8 d5 E; i) ]4 L
: | s6 p M- [/ o, X
问题分析:
( Z, e5 p, |9 ]) l9 J1 L1 K* l# C9 @7 w: F0 s
出现"No phy found",常见原因是供给phy使用的25M时钟异常,导致phy工作不正常,gmac驱动通过mdio接口也读不到phy的设备信息。/ ^" b' o; u0 \) H% o3 Z
( c' i" F/ {; S6 ~( d! g2 g# w1 ^! Y* ]) W
; F- Q+ {" k" [' N6 v9 z; X6 j- L
" R- d3 r4 {6 n3 t4 ]或者MDIO引脚配置不正确或者phy地址不正确;再就是MDIO没做上拉电阻,GMAC读取不到phy设备信息,用示波器量一下MDIO波形是否正确;再或是phy芯片复位失败,需要更换phy芯片复位上拉电阻。, [9 p" O( y( t6 P( `
) R/ Z' z: F# E' u7 N1 ~7 N" G1 _* N4 w- o' P4 x
3 u- ]1 [" Y- v# w, ^' }! j
1 V& Q) _" `& [2 c. p3 W
+ n1 _+ N1 ^4 w1 ]8 |4 E, n2 U! m) t$ |, Y
. |/ U1 t# R# o2 _! R
排查步骤:
# v: R$ X8 N3 ^
; c% B! M$ X" v% b(1) 检查phy供电是否正常;
w9 a/ b7 A% l% G, g% ]( e1 T$ K: \- U4 I; a
(2) 检查phy使用的25M时钟(Soc ephy25M或外部晶振)是否正常;9 D8 ~. h Y7 A+ n0 X
; T }" v5 v$ I+ s; g" U) @( l
(3) 检查phy-mode是否按板级实际情况配置(mii/rmii/rgmii);6 G3 x$ I' i2 V3 H1 H% X
! i* \- n+ U0 j3 o, ?3 K D% b$ }, m5 N
(4) 检查MDIO是否有上拉电阻;6 A. P( ]7 x8 B8 K& C5 Y$ F8 R
5 ?1 i+ M# `. }( x0 ^
(5) 检查MDIO引脚配置是否正确;! _) m; j/ f- O) `, ~
' N+ a/ I9 A- s# M2 o" _7 ]
(6) eMAC phy地址是否和硬件一致;) H$ `% ], V8 r: x
: D# z0 H c' A
(7) 检查复位上拉电阻是否和原理参考方案一致。
0 T# T* l' J5 h. X7 k3 \" w7 N4 g, E) q5 ~2 R
+ w1 |9 r+ x4 g' x
) v( {8 K0 n0 Y8 t8 Z* z! `. P8 l+ M2 e
MDIO通讯正常验证:, H6 `8 o6 _; i8 ~! A
& x( k5 e& S4 }" r2 S
使用phytool工具读取0x02 0x03寄存器 是否正确读取PHY芯片ID,读取成功,代表MDIO通讯正常。- m# X9 C) S7 a+ O9 O0 H" Z6 D
& p$ d6 D r( `! w
3 [) R4 l% j9 a, q: }- h7 X! X% w
# M0 ^3 c0 `; N6 v# |( a8 h" p l$ T$ e$ _8 n. v" v* _4 R
问题描述2——
" J4 o: j% J$ }; D* H L- K
( l3 K3 \) a4 b) w7 e以太网初始化报错NO SUCN DEVICE
4 m0 P; g) h0 |: _! d! C
$ j" z% f; E* j% D执行ifconfig -a/ifconfig eth0/ifconfig eth0 up命令,找不到eth0设备。9 u' m$ X" h* \4 a
! a+ y$ w- r9 Z+ A9 q) V" z" ~ p8 l
* \$ z# O8 c$ ?) Q+ S/ H) ?' P3 z/ X, Q! j* X, u7 y( ]5 x
8 s& o# L- P4 U. f) R$ D9 S+ z
4 `+ y. P! o, i! f5 ?% F% U9 u% G- J问题分析:2 C2 Q! }; B" \$ T1 s
+ Z+ Z: M/ g" c: E以太网模块配置未生效或存在GPIO冲突。
' r( S/ @+ n3 D5 `. L! s; W" J& S: T' r0 q- [% U6 _6 y
( ^1 M3 E; g- t
2 j. a' T% n0 K
% X( A a2 o! q) ]2 Q" ]# a排查步骤:. L# S; M1 Y7 n! Q! H7 a- G
6 {+ m" r% ^! F4 g! ~1 R$ K) x/ [ A
步骤1:抓取内核启动log,搜索"gmac"关键字段,检查gmac驱动是否probe成功;: k1 j2 E; h- d' e: z4 t
9 \! L6 v! G1 Y" ]) G步骤2:若内核启动log显示mac控制器probe失败,常见原因是GPIO资源冲突导致。
# u( ~0 Z9 j; G9 S/ _4 O4 o I2 T! e3 \! F1 |1 y) g( @1 O: ~
. e3 S* N9 i2 I& R, p! x& }' _/ l1 E# p* ^, d- y2 e# g- k
# L9 u/ s# ]5 l V7 S6 O3 x
解决方法:
b5 Z. v0 L/ \$ `) B5 t$ R# l% S" K* k* J+ W
GPIO冲突会有报错信息,根据报错信息,查看GPIO冲突引脚。
0 O g" c. f, o7 W- _0 }5 ~
: ~% Z1 D4 f0 S8 r3 ]查看以太网模块是否配置。0 N( ? e$ F7 L. ?6 y
! t$ w5 N( S7 H/ @( b
8 T7 w0 g# X. e6 P% I P# d
! D( T! T& r/ ^0 h6 U7 R7 n
( [" B! f0 T8 g$ ^! i# V. s5 E1 K/ P! s, |) B
2 o) {. \" [! _ d+ Z
7 i( G2 R/ X3 O! `. O- D! |5 c% L5 N9 d* V; _" @/ y0 u7 T
问题描述3——
1 Y9 u% z/ {$ K3 v! P: w5 y& v1 k/ [
以太网初始化报错Initialize hardware error/ H& @, `" U- z
% y5 \4 V: ]" _1 C+ ^3 a! M执行ifconfig eth0 up命令,出现"Initialize hardware error"异常log。
3 d3 m1 ^3 u+ w
: m% ~, O" u2 Q问题分析:
7 R* p* `8 C& g* y& f: B5 E( x: x' |) u- S5 H/ R/ j
出现"Initialize hardware error",一般是由于phy没有输出RX CLK至MAC控制器,导致MAC控制器内部soft reset失败,常见原因是phy供电异常或25M时钟异常;或者是检查数据引脚的时钟是否正确,RMILL RX CLK TX CLK 是否是正确时钟。* o3 p5 a2 o& _' q
. k$ P, D3 m: |( ?
$ g8 K: d* C5 S4 u9 V9 u m( g, U" D
! a) s5 Q6 E0 p# c, C
$ }1 Q' b' s9 e* X2 D: R$ l' |/ g1 T! I
/ ?3 n/ ]# q- {/ `
) S. j' d- r" p5 d o
+ W, e+ A) U: Y9 l5 b. x$ g
C6 q* p- {4 ~, o) R3 @1 k
9 V5 O3 |4 |# l* [! C w) F
2 K! m, g1 w& ~% b! A0 T排查步骤:
/ _6 _1 |9 z z! f+ ^( a ?0 a' C. ?( N4 ^* U7 o
用示波器抓取rx_clk时钟波形,查看是否保持25M时钟稳定,如果出现25M/2.5M 来回跳动。即MAC与phy未link成功。
. `7 m* L' Q) ]5 O \
6 { r2 t) V: }( d; W* N% v' `% X% Q% q
: t& N/ Q+ K4 A: j; p
1 I6 P4 ^! d) D: A' `& L( j4 y( n A
解决方法:
" f; C) z. e( \3 m& A
- m3 |4 x8 v, f5 {9 E' t0 L软件上可通过在phy复位之后,设置寄存器0 固定为100M全双工,可link成功。目前可这样解决问题:
/ u; ~( ?! J; u0 J0 ^7 r
6 N/ P0 M6 p! L在drivers/net/ethernet/allwinner/sunxi-gmac.c 中 geth_phy_init函数中 phy_connect_direct 之前加入phy_write(phydev, 0x0, 0x2100)。, \) v% D, m' I/ y M! v% f5 e
7 s# v* H& S5 }& b6 W _
9 J) A. l% a6 p, d/ }9 ~) T/ }. n3 i
以上是我们在OKA40i-C开发板的使用过程中常见网卡设计问题,有些可能是因为大家在参考方案时出现了配置问题,或者是因为芯片输出的信号不正常导致。大家在参考OKA40i-C开发板的双网口方案时,可以查看本文章整理的问题点,说不定就是您现在项目中遇见的bug。2 D( i) D7 h# i8 a% ~$ T8 G
- ?/ f" {/ n' e0 T' v. {& w
7 m" C" B5 Q2 x) N: F$ d8 _; e
3 @2 Q1 I5 ]* c$ B) R( K0 l. T& m4 L" F4 @( A8 l
接下来,小编将给大家介绍一些常用的网卡软件问题对应的排查手段。+ h- P, K& b4 k9 S) B. s2 n1 _+ e
k+ D+ R9 Q* y6 F/ g2 q) b: c7 W
% }6 m2 l! [! \2 _/ ]# R8 u# J5 [ F% F( J4 ?; c; s3 t
02排查手段
) s8 N9 `4 Z' X8 S) t7 J( q/ }
2 x" o/ C+ K$ E* F) k, W8 Q4 l这些排查手段可以帮助您在调试phy时有一个基本的调试思路,提到的一些工具可以帮助您快速定位并且解决网卡问题。. L& ]) j$ }5 A- E$ [
3 L8 s% L7 i* {1 |0 R4 p- S( G% g: H" F, S& k
$ K1 u: {! @/ E) c! ]" |8 E" H
(1) 检查menuconfig及dts以太网配置是否打开;# X2 E; h" y1 g, W) ]. X% D; S4 Y- ^
$ ^& R5 K+ [- X3 i, ]
(2) 检查phy-mode配置是否与PHY和GMAC之间的物理接口匹配,如rgmii、rmii等;
" r: u7 k3 K( n! G
; {) L+ o, u0 b% Y: o) I% d C* {(3) 检查GPIO配置是否正确,如IO复用功能、驱动能力等;2 V7 Y3 ]% r/ j, ~( Y0 N
2 z9 F, h' v$ v' e+ {
(4) 使用phytool工具读取phy ID 验证MDIO是否正确。- X/ Z% x, ?6 B0 S6 A
6 V' |1 E& a! }0 \1 M; R
; V2 K) e% a& r6 `# F# x# [* F# [5 L: E4 j
如下图示例,能够正常读取JL11x1的phy ID则代表MDIO通讯正常。- n+ U$ ^8 a t9 C% W/ N( s9 C
+ N* B# X* |" Y+ s% c. k0 s
. i% K& p2 r6 a; I+ q7 L
4 O! R: g% V S4 q. g1 c8 @
6 A1 n! d. B9 N7 d使用phytool工具读取phy状态寄存器,查看phy芯片状态。以JL11x1为例,如0x01状态寄存器读取值为0x786d,说明link成功并且工作正常。
7 d* B4 z& e+ }( s
7 U' V f6 D: ~6 f& K" b1 W/ O) {! b+ x. S) a( g8 l& U5 C) S v
7 _& f6 A: n2 F r0 }# }% ?2 {* k) A; r4 V
9 ?& d7 Y& C6 I2 E2 x0 `- v4 _$ S7 P# Z$ |; \- p
|
|