|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
01问题分析2 n3 n8 z! T% }6 [' M
2 a" S: t" d7 L0 m. K问题描述1——) |# r, c3 I! h h1 S0 e+ I
& K. a; z" e) w2 L) x* C/ @% S A
以太网初始化报错 No phy found' \# V' H$ w9 t/ w1 Y5 C
' w: L. t6 M) Q$ H% f+ G: y在执行ifconfig eth0 up命令时,出现"No phy found"异常log。
( {. ]0 p) R, e1 u: a* Q* s* q' s. I, z; o1 u5 v' j% g
6 O" J6 U8 U' Z
- k+ S1 X7 }* l6 g k! H% U
% b7 w5 [2 L5 ~
4 Y; I' c% D5 F/ c) x d
$ t& H& A, u, r6 u! M- s
% F4 [2 u3 c7 P4 \9 Y问题分析:4 u0 J3 o' o& |0 c. \; B
# v1 u# y' h; Q$ b# I出现"No phy found",常见原因是供给phy使用的25M时钟异常,导致phy工作不正常,gmac驱动通过mdio接口也读不到phy的设备信息。, A6 c$ g; y* a+ n
* n$ K6 D3 i& x7 T1 y- e: x
4 @9 [! }* v2 ] B/ `# e( T7 H7 T% `
) O( Z. N, J7 e/ ? D
或者MDIO引脚配置不正确或者phy地址不正确;再就是MDIO没做上拉电阻,GMAC读取不到phy设备信息,用示波器量一下MDIO波形是否正确;再或是phy芯片复位失败,需要更换phy芯片复位上拉电阻。
- Q" J# Q2 G7 `- Q
: h* z) C6 ?6 d% v8 l) ]
& `; U8 ?$ ~; u7 g- s, C N$ F3 S4 J- X+ ]# o5 }) B- j
0 q! s; X& r# \6 T
* B. Y t, Y: W
! e: Y- b; F/ [; O
6 x2 w3 Y& W/ a$ o& C" p排查步骤:6 t6 W" Z2 _$ ]" y; I
2 n! y: p1 S/ B( k( Q8 t9 u6 V2 X
(1) 检查phy供电是否正常;6 W! k. ~4 d3 \1 ~9 s
l$ O" W# e: w( ^(2) 检查phy使用的25M时钟(Soc ephy25M或外部晶振)是否正常;
& Y! W6 }2 c a4 x3 e
6 L$ j9 E9 r8 @! Y(3) 检查phy-mode是否按板级实际情况配置(mii/rmii/rgmii);# u3 L; P5 p {. T
( g _9 c! G0 M
(4) 检查MDIO是否有上拉电阻;# I4 |2 {8 v1 ^8 V
4 d O$ n3 A* p, P" ]+ s7 E+ U
(5) 检查MDIO引脚配置是否正确;. x6 S- ^% N8 Y5 I
4 j9 K5 N" x! A(6) eMAC phy地址是否和硬件一致;' A7 v8 n9 X; D5 J ?/ w0 w
5 n( {& U L; _
(7) 检查复位上拉电阻是否和原理参考方案一致。
8 x$ Z) U2 q0 q" a4 n+ f6 t/ E8 ]0 j5 Z+ m6 E
6 ^( U: M6 _) }- ]$ }. i+ E' V- E' ]
& b4 z5 S" L2 R. q- j
MDIO通讯正常验证:+ W+ n! J2 s' ~9 Q. O, h: o" n, r3 }
$ ^# J( D9 `6 D: ]使用phytool工具读取0x02 0x03寄存器 是否正确读取PHY芯片ID,读取成功,代表MDIO通讯正常。; h j* R9 C6 g8 `
0 j& @& |+ \( a: k+ [
+ x, p: u: C; x7 I U3 u
( d( {# x' P" L- G; H6 Z
- R+ [- b0 V: O) p6 T: j& H2 w0 @& Z! Z9 B# t" m, K" r+ d0 @5 _
问题描述2——2 j0 Q2 z7 c# q: L; Y. `# j& C
/ ^+ q1 Z0 F$ p/ C以太网初始化报错NO SUCN DEVICE: @0 |. Z5 s- k
0 E- n( R0 N. X( k. s执行ifconfig -a/ifconfig eth0/ifconfig eth0 up命令,找不到eth0设备。
$ f" f4 V9 d4 o8 D4 c% j
' k+ f; f" a8 }. `
( u! K$ E) m( z+ k
+ m+ J A0 E$ _1 f5 t/ l: E; D4 N( \' l8 u, b
$ r; Z C `. V" r
+ s8 _- n4 f* k. k问题分析:0 y2 U4 G- K0 Q$ G0 q: n
# |6 _8 [, F: [+ i( y以太网模块配置未生效或存在GPIO冲突。
' _+ C y- p; c3 }, ]; ~7 G$ T. S
1 a; e( R4 N. r# ]7 g( ?& ?8 s8 @8 x# z* G* d: m4 X' U) w" f
. e# ^9 v& o7 l. A5 \7 q4 g6 c5 G; e( z" v3 W
排查步骤:
; Z1 G8 Y+ N8 V- K/ C1 b1 B
3 y% [& L: ^! z, S步骤1:抓取内核启动log,搜索"gmac"关键字段,检查gmac驱动是否probe成功;
( }# V* s) A4 g: Y* v" y( [& V
' D y- w/ X: R2 u0 H( L步骤2:若内核启动log显示mac控制器probe失败,常见原因是GPIO资源冲突导致。) F) f+ R0 W& b$ u/ b/ J8 }
$ V# r( R; ?9 z: F$ `& M. y0 y1 A. r8 i
, R5 O9 i" Z6 {5 @9 ~. I/ g( f% I, D: C2 i
解决方法:
2 n" b2 w7 e4 `* }4 e1 z8 t
$ ~+ E- Q+ f/ p G' ]GPIO冲突会有报错信息,根据报错信息,查看GPIO冲突引脚。
6 r( Y% X2 y0 G( E. K& ~
' X2 a) r2 o: B) F( X查看以太网模块是否配置。- g, L. W) |! _
/ I# c" _9 G5 H( f! d" ?5 K8 M$ I
0 u& q( _' y- f4 V, N
% G% w5 n/ H8 _8 V' d3 T' f* P+ x% O/ X; Z% K* x p
0 n+ H8 D, { D! y% b! c
' U: n, f+ J, p9 V' e7 N
% O) ?5 O! f8 l% u7 u2 a9 \$ b6 `
, a! G6 Q% O s0 u4 r问题描述3——
8 A _8 l. x% S
! F( g8 l- b8 v, R; S以太网初始化报错Initialize hardware error; e$ {( v+ F$ r8 r6 F
" u/ ~4 P6 S: S* S9 K执行ifconfig eth0 up命令,出现"Initialize hardware error"异常log。7 R* g, \5 L1 a0 l/ z/ f
9 z3 V7 o# k* S7 K; i0 L问题分析:
8 i7 N8 P" k7 m
( r; c6 ^$ ^& ~# Q9 ~出现"Initialize hardware error",一般是由于phy没有输出RX CLK至MAC控制器,导致MAC控制器内部soft reset失败,常见原因是phy供电异常或25M时钟异常;或者是检查数据引脚的时钟是否正确,RMILL RX CLK TX CLK 是否是正确时钟。
# G+ Z- I5 K* P& Q4 _+ I. M( y8 i% S7 J$ {
! p9 |, H1 J+ v2 j% k
% G# {$ [! _5 c# y3 O3 j h+ o0 c$ m
+ F6 P( G" X2 t3 y: n% {5 o, ?. Y0 G3 Z+ c& \
- N; d* Q; l4 O- a1 A0 l/ N% A1 _, W- p. r5 ?5 M
6 m. X; N! ~% p
5 m" I- o) ]0 T' O
9 c9 g. ]# z/ T
* w5 r2 P0 l9 t/ r排查步骤:
0 w G& l$ M5 o5 L2 y! m
* ] i v# x% |' m9 }0 n用示波器抓取rx_clk时钟波形,查看是否保持25M时钟稳定,如果出现25M/2.5M 来回跳动。即MAC与phy未link成功。
; x. o& F( G/ H- p
* \4 P1 C+ b6 O& p! [( r3 x4 |/ Q x- O/ w' [9 J
9 `5 ~2 n- k& `" y( r
1 o# {/ ]# H: u! R6 s0 t解决方法:
+ o( G& i. V1 K& w0 a+ V9 e/ _ U/ F4 O
软件上可通过在phy复位之后,设置寄存器0 固定为100M全双工,可link成功。目前可这样解决问题:
$ f* l% \8 P, I& u1 s2 m* y4 `7 N7 ~& y8 Z* z2 N
在drivers/net/ethernet/allwinner/sunxi-gmac.c 中 geth_phy_init函数中 phy_connect_direct 之前加入phy_write(phydev, 0x0, 0x2100)。
( O$ g& N- P/ V0 Z1 C6 q 5 s) c/ T" L5 q! X3 q5 ?
: q* ?' c4 N. |- v1 U( y/ l
1 I6 B$ Q+ c, k& ^) Q! t- w2 }以上是我们在OKA40i-C开发板的使用过程中常见网卡设计问题,有些可能是因为大家在参考方案时出现了配置问题,或者是因为芯片输出的信号不正常导致。大家在参考OKA40i-C开发板的双网口方案时,可以查看本文章整理的问题点,说不定就是您现在项目中遇见的bug。
( F) E% }' f, M
P; V3 F' B. B$ j' T# f
{. p ^8 `; F2 J0 h+ J! u! u+ F0 F" p" o+ e: m1 t
/ e! Z4 z4 D2 d4 ~( j8 P4 I接下来,小编将给大家介绍一些常用的网卡软件问题对应的排查手段。8 V" R* N' J; F1 Z$ _
" Q3 @* H1 W- a2 A2 @$ j; ^
) d, p& O R# x7 U# \2 g4 t% C- S8 d9 L9 s2 p
02排查手段
1 G6 w7 t9 z. Z. f( t. C
5 c, v! l5 q# V( u! u' m: N" c3 {这些排查手段可以帮助您在调试phy时有一个基本的调试思路,提到的一些工具可以帮助您快速定位并且解决网卡问题。
D7 l, j( \+ O# w) a
* p1 Y3 [& V! ` e- a& _. K. C8 H' j9 B9 i
6 H1 H/ J s' A
(1) 检查menuconfig及dts以太网配置是否打开;6 L( n, C8 E/ k6 r0 ^$ y
) X0 ^( c% A" r4 \% J0 }5 R(2) 检查phy-mode配置是否与PHY和GMAC之间的物理接口匹配,如rgmii、rmii等;
9 H! Z+ P1 L4 W, y- o
4 ?6 p) A7 L7 h4 b1 @; H D(3) 检查GPIO配置是否正确,如IO复用功能、驱动能力等;
% \ k4 P9 s: K) ~$ h4 ?+ r" a! }
6 E8 }+ C5 \- Z: R) I6 N9 G7 S( q(4) 使用phytool工具读取phy ID 验证MDIO是否正确。
" A7 P) ^6 O, e' q& b; g. e4 ]0 J6 `8 z9 N3 B4 s0 f
& ?5 _7 S; X% R! N, y9 Z
' Z7 p5 d8 E* _# S如下图示例,能够正常读取JL11x1的phy ID则代表MDIO通讯正常。$ e5 q# z9 I! H+ f
8 Z& h" u# p7 ^: [
' M4 z% ^: n; ^ f5 o, C# j* z
- \8 B6 G9 m" Y$ G# T8 |; h7 o6 j2 h9 Z2 N
使用phytool工具读取phy状态寄存器,查看phy芯片状态。以JL11x1为例,如0x01状态寄存器读取值为0x786d,说明link成功并且工作正常。9 W6 l+ K" W \$ T
. H" i* K$ ^6 U; Z2 ~7 L
/ D" p A; z$ [' a1 S# P7 x
& [1 h% ]/ T( f* V! q0 }) @( J% k! M9 E
. n4 B. E( z% _$ [4 t |
|