Part Number: AM4376
Tool/software:
Hello Experts!
We have a strange problem with Ethernet link stability with an AM4376-based design using DP83826 PHYs.
We have a design which is basically a AM4376 with two Ethernet ports, realized with DP83826 with MII connection.
Port 1 PHY is clocked by AM4376 CLKOUT1 signal, Port 2 PHY is clocked by AM4376 CLKOUT2 signal.
AM4376 input clock is an 25MHz oscillator with +/- 50ppm.
The link is getting lost sometimes (~every 10s to every hour).
The problem occurs only, when two devices are directly connected using port 2 of each device, but not when port 1 is involved:
device#1 Port#1 connected to device#2 Port#1 is OK
device#1 Port#2 connected to device#2 Port#1 is OK
device#1 Port#1 connected to device#2 Port#2 is OK
device#1 Port#2 connected to device#2 Port#2 is not OK
A link with "itself" (connecting PHYs port2 RX to port2 TX) is also stable:
device#1 Port#2 connected to device#1 Port#2 is OK
I investigated the PHY registers, and I recognized that register 0x14 (false carrier counter) is incrementing as well as register 0x15 (receive error counter) on port#2.
At some point there are enough errors to trigger the “fast link down on RX_ER” function of the PHY.
After link loss, link is established automatically again. AN result is 100M Full duplex.
The strapping and config via MDIO are identical to both PHYs, so I looked for the differences of both ports and tried to clock both PHYs by CLKOUT1 pin.
This eliminates all errors, link is stable, no error register counting.
So, the issue seems to be “CLKOUT2”-related.
Since a PHY, clocked with CLKOUT2, has stable link with itself (TX connected to RX), it doesn´t look like clk interruptions or something similar.
My assumption is a frequency tolerance/jitter on CLKOUT2. At some time, the added tolerance/jitter of both CLKOUT2 is too large to maintain link.
CLKOUT2 is controlled by an AM4376-internal low jitter PLL (EXTDEV_PLL).
Settings:
CLKINP: 25MHz (the main osc clock input)
Divider N: 9
Multiplier M: 200
Post divider M2: 10
SD_DIV: 2
CLKOUT2 divider: 2
So, the PLL should be locked at 500MHz (25MHz / (9+1)) * 200, PLL output is 50MHz (500MHz / 10), divided by 2 in the CLKOUT2 divider gives 25MHz on CLKOUT2.
SSC is deactivated.
Register contents for EXTDEV_PLL configuration:
[0x44DF2E60] = 0x7
[0x44DF2E64] = 0x1
[0x44DF2E6C] = 0x200c809
[0x44DF2E70] = 0x38a
[0x44DF2E84] = 0x80000
[0x44DF2E88] = 0x0
[0x44DF2E8C] = 0x0
I´m really wondering about this, since in the reference manual it is explicit written that CLKOUT2 can be used to clock an external PHY.
Questions:
Did you see something like this in the past? Is there a known issue with CLKOUT2 frequency precision? Or a special sensitivity of DP83826 to CLK tolerances?
Could you please review PLL settings? Is there something to optimize (e.g. PLL lock at higher/lower frequency, try bypass mode…)?
Thank you!
Christian
