Tool/software:
Kernel version: 6.12.3-lts
Kernel configuration added:
CONFIG_DP83TD510_PHY=y
Device Tree:
It can be seen that the DP83TD510 driver is being used.
Here are some relevant details.
root@imx93-kedge:~# ethtool eth0
Settings for eth0:
Supported ports: [ ]
Supported link modes: 10baseT1L/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT1L/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Link partner advertised link modes: 10baseT1L/Full
Link partner advertised pause frame use: Symmetric
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 10Mb/s
Duplex: Full
Auto-negotiation: on
master-slave cfg: preferred slave
master-slave status: unknown
Port: Twisted Pair
PHYAD: 0
Transceiver: external
MDI-X: Unknown
Supports Wake-on: g
Wake-on: d
Link detected: yes
SQI: 7/7
root@imx93-kedge:~# ifconfig
eth0 Link encap:Ethernet HWaddr 52:F3:CD:DB:86:48
inet6 addr: fe80::50f3:cdff:fedb:8648/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4 errors:422 dropped:0 overruns:0 frame:422
TX packets:179 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:264 (264.0 B) TX bytes:53110 (51.8 KiB)
root@imx93-kedge:~# ethtool -t eth0
The test result is FAIL
The test extra info:
1. Carrier 0
2. PHY dev is present 0
3. PHY internal loopback, enab 0
4. PHY internal loopback, UDP -110
5. PHY internal loopback, MTU -110
6. PHY internal loopback, TCP 0
7. PHY internal loopback, disa 0
root@imx93-kedge:~# ethtool -d eth0
0x004: 0x00008000
0x008: 0x0a0000aa
0x010: 0x01000000
0x014: 0x00000000
0x024: 0x70000112
0x040: 0x603a1000
0x044: 0x0000033e
0x064: 0x40000000
0x084: RCR (Receive Control Register) 0x47c00264
MAX_FL (Maximum frame length) 1984
FCE (Flow control enable) 1
BC_REJ (Broadcast frame reject) 0
PROM (Promiscuous mode) 0
DRT (Disable receive on transmit) 0
LOOP (Internal loopback) 0
0x0c4: TCR (Transmit Control Register) 0x00000004
RFC_PAUSE (Receive frame control pause) 0
TFC_PAUSE (Transmit frame control pause) 0
FDEN (Full duplex enable) 1
HBC (Heartbeat control) 0
GTS (Graceful transmit stop) 0
0x0e4: 0x52f3cddb
0x0e8: 0x86488808
0x0ec: 0x0001fff0
0x0f0: 0xcc801312
0x0f4: 0xcc801312
0x0f8: 0xcc801312
0x100: 0xcc801312
0x104: 0xcc801312
0x108: 0xcc801312
0x118: IAUR (Individual Address Upper Register) 0x00000000
IADDR1 0x0000000000000000
0x11c: IALR (Individual Address Lower Register) 0x00000000
IADDR2 0x0000000000000000
0x120: GAUR (Group Address Upper Register) 0x04400000
GADDR1 0x0440000000000000
0x124: GALR (Group Address Lower Register) 0x11800009
GADDR2 0x0000000011800009
0x144: TFWR (Transmit FIFO Watermark Register) 0x00000100
X_WMRK 64 bytes
0x14c: FRBR (FIFO Receive Bound Register) 0x00000000
R_BOUND (Highest valid FIFO RAM address) 0x00
0x150: 0x00000000
0x160: 0xb0182000
0x164: 0xb018e000
0x168: 0x000007c0
0x16c: 0xb0184000
0x170: 0xb0196000
0x174: 0x000007c0
0x180: 0xb0180000
0x184: 0xb0186000
0x188: EMRBR (Maximum Receive Buffer Size) 0x000007c0
R_BUF_SIZE (Receive buffer size) 124
0x190: 0x00000010
0x194: 0x00000084
0x198: 0x00000008
0x19c: 0x00000008
0x1c4: 0x00000086
0x1c8: 0x00013210
0x1cc: 0x00017654
0x1d8: 0x00010200
0x1dc: 0x00010200
0x1e0: 0x01000000
0x1e4: 0x00000000
0x1e8: 0x01000000
0x1ec: 0x00000000
0x1f0: 0x00000000
0x200: 0x00000000
0x204: 0x000000be
0x208: 0x0000009b
0x20c: 0x0000001d
0x210: 0x00000000
0x214: 0x00000000
0x218: 0x00000000
0x21c: 0x00000000
0x220: 0x00000000
0x224: 0x00000000
0x228: 0x00000002
0x22c: 0x00000019
0x230: 0x00000006
0x234: 0x0000009b
0x238: 0x00000000
0x23c: 0x00000002
0x240: 0x00000000
0x244: 0x0000e223
0x248: 0x00000000
0x24c: 0x000000be
0x250: 0x00000000
0x254: 0x00000000
0x258: 0x00000000
0x25c: 0x00000000
0x260: 0x00000000
0x264: 0x00000000
0x268: 0x00000000
0x26c: 0x00000000
0x270: 0x00000000
0x274: 0x0000e223
0x284: 0x000001c9
0x288: 0x00000004
0x28c: 0x00000000
0x290: 0x000001b8
0x294: 0x00000000
0x298: 0x00000000
0x29c: 0x00000000
0x2a0: 0x00000000
0x2a4: 0x00000000
0x2a8: 0x00000115
0x2ac: 0x00000015
0x2b0: 0x00000000
0x2b4: 0x0000009e
0x2b8: 0x00000000
0x2bc: 0x00000001
0x2c0: 0x00000000
0x2c4: 0x00011e16
0x2c8: 0x00000000
0x2cc: 0x00000005
0x2d0: 0x000001b8
0x2d4: 0x00000000
0x2d8: 0x00000000
0x2dc: 0x00000000
0x2e0: 0x00000147
After configuring static IP addresses on both boards, they are unable to ping each other. Currently, there are no clear directions for investigation. Could you provide some possible directions to look into?
Measurements using an oscilloscope on the side that issues the ping command:
• TX_CLK has a waveform with a frequency of 2.5 MHz.
• TX_D0-D3 also have waveforms (no waveforms when not pinging).On the side that is being pinged:
• RX_CLK has a waveform with a frequency of 2.5 MHz.
• RX_D0-D3 also have waveforms (no waveforms when not pinging).However, there are no waveforms on TX_D0-D3 (although TX_CLK has a waveform).
Supplement the register values
When not pinging:
root@imx93-kedge:/# x=0; while [ $x -le 31 ]; do printf "Register 0x%02X = " $x ; ./phytool read eth0/0/$x $(( x++ )) ; done
Register 0x00 = 0x1100
Register 0x01 = 0x016d
Register 0x02 = 0x2000
Register 0x03 = 0x0181
Register 0x04 = 0000
Register 0x05 = 0000
Register 0x06 = 0000
Register 0x07 = 0000
Register 0x08 = 0000
Register 0x09 = 0000
Register 0x0A = 0000
Register 0x0B = 0000
Register 0x0C = 0000
Register 0x0D = 0x4007
Register 0x0E = 0x1000
Register 0x0F = 0000
Register 0x10 = 0x0001
Register 0x11 = 0x002b
Register 0x12 = 0x0020
Register 0x13 = 0000
Register 0x14 = 0000
Register 0x15 = 0000
Register 0x16 = 0x0100
Register 0x17 = 0x4201
Register 0x18 = 0x0043
Register 0x19 = 0000
Register 0x1A = 0000
Register 0x1B = 0000
Register 0x1C = 0000
Register 0x1D = 0000
Register 0x1E = 0000
Register 0x1F = 0000
Ping:
root@imx93-kedge:/# x=0; while [ $x -le 31 ]; do printf "Register 0x%02X = " $x ; ./phytool read eth0/0/$x $(( x++ )) ; done
Register 0x00 = 0x1100
Register 0x01 = 0x016d
Register 0x02 = 0x2000
Register 0x03 = 0x0181
Register 0x04 = 0000
Register 0x05 = 0000
Register 0x06 = 0000
Register 0x07 = 0000
Register 0x08 = 0000
Register 0x09 = 0000
Register 0x0A = 0000
Register 0x0B = 0000
Register 0x0C = 0000
Register 0x0D = 0x4007
Register 0x0E = 0x1000
Register 0x0F = 0000
Register 0x10 = 0x0001
Register 0x11 = 0x002b
Register 0x12 = 0x0020
Register 0x13 = 0000
Register 0x14 = 0000
Register 0x15 = 0x0018
Register 0x16 = 0x0100
Register 0x17 = 0x4209
Register 0x18 = 0x0043
Register 0x19 = 0000
Register 0x1A = 0000
Register 0x1B = 0000
Register 0x1C = 0000
Register 0x1D = 0000
Register 0x1E = 0000
Register 0x1F = 0000
Pinged:
root@imx93-kedge:~# x=0; while [ $x -le 31 ]; do printf "Register 0x%02X = " $x ; ./phytool read eth0/0/$x $(( x++ )) ; done
Register 0x00 = 0x1100
Register 0x01 = 0x0169
Register 0x02 = 0x2000
Register 0x03 = 0x0181
Register 0x04 = 0000
Register 0x05 = 0000
Register 0x06 = 0000
Register 0x07 = 0000
Register 0x08 = 0000
Register 0x09 = 0000
Register 0x0A = 0000
Register 0x0B = 0000
Register 0x0C = 0000
Register 0x0D = 0x401f
Register 0x0E = 0x7000
Register 0x0F = 0000
Register 0x10 = 0x0001
Register 0x11 = 0x002b
Register 0x12 = 0x0020
Register 0x13 = 0x2300
Register 0x14 = 0000
Register 0x15 = 0x0917
Register 0x16 = 0x0100
Register 0x17 = 0x4209
Register 0x18 = 0x0043
Register 0x19 = 0000
Register 0x1A = 0000
Register 0x1B = 0000
Register 0x1C = 0000
Register 0x1D = 0000
Register 0x1E = 0000
Register 0x1F = 0000