[KSZ8031RNL + RMII + STM32F407VET6] Kein Link :(

OP #3790366
Lesenswert?

Hallo Forum,
ich verwende an einem STM32707VET6 als Ethernet den KSZ8031RNL als Phy.

http://www.farnell.com/datasheets/1447923.pdf

Als Softwaregrundlage verwende ich den Ethernettreiber von ST, bei dem 
ich die Adresse des PHYs entsprechend angepasst habe.

Nun zeigt sich folgende Situation:
Ich kann den Phy ansprechen, die Register setzen und wieder auslesen. 
Leider meldet er immer, dass kein Link vorhanden ist. Das angeschlossene 
Notebook zeigt ebenfalls "Netzwerkkabel entfernt".

Durch Zufall hatte ich Slow Oscillator Mode aktiviert: "Slow Oscillator 
Mode
Slow Oscillator Mode is used to disconnect the input reference 
crystal/clock on XI (pin 8) and select the on-chip slow oscillator when 
the KSZ8021/31RNL device is not in use after power-up. It is enabled by 
writing a one to register 11h, bit [5]."

Dabei schaltete sich die Link LED ein, die Auto Neg. Prozess läuft durch 
und der PC sagt, dass eine Verbindung hergestellt ist. Der Phy selber 
meldet jedoch noch immer "Link down".

Dies lies mich vermuten, dass es ein Problem mit dem externen 25MHz 
Quarz gibt. Dieser schwingt aber (mit Oszi gemessen) sauber auf 25MHz. 
Auch das Referenztaktsignal von 50MHz gibt der Phy sauber an den STM32 
weiter. Also eigentlich sollte der Takt stimmen?!

Wenn ich alle Register des Phy auslese, bekomme ich die folgenden Werte:
 @00015551  [ETH     ] REG[0x00] VAL[0x00003100]
 @00015551  [ETH     ] REG[0x01] VAL[0x00007849]
 @00015551  [ETH     ] REG[0x02] VAL[0x00000022]
 @00015551  [ETH     ] REG[0x03] VAL[0x00001556]
 @00015551  [ETH     ] REG[0x04] VAL[0x000001E1]
 @00015551  [ETH     ] REG[0x05] VAL[0x00000000]
 @00015551  [ETH     ] REG[0x06] VAL[0x00000004]
 @00015553  [ETH     ] REG[0x07] VAL[0x00002001]
 @00015558  [ETH     ] REG[0x08] VAL[0x00000000]
 @00015564  [ETH     ] REG[0x09] VAL[0x00000000]
 @00015569  [ETH     ] REG[0x0A] VAL[0x00000000]
 @00015574  [ETH     ] REG[0x0B] VAL[0x00000000]
 @00015579  [ETH     ] REG[0x0C] VAL[0x00000000]
 @00015584  [ETH     ] REG[0x0D] VAL[0x00000000]
 @00015589  [ETH     ] REG[0x0E] VAL[0x00000000]
 @00015594  [ETH     ] REG[0x0F] VAL[0x00000000]
 @00015599  [ETH     ] REG[0x10] VAL[0x00000000]
 @00015605  [ETH     ] REG[0x11] VAL[0x00000000]
 @00015610  [ETH     ] REG[0x12] VAL[0x00000000]
 @00015615  [ETH     ] REG[0x13] VAL[0x00000000]
 @00015620  [ETH     ] REG[0x14] VAL[0x00000000]
 @00015625  [ETH     ] REG[0x15] VAL[0x00000000]
 @00015630  [ETH     ] REG[0x16] VAL[0x00000002]
 @00015635  [ETH     ] REG[0x17] VAL[0x00000402]
 @00015640  [ETH     ] REG[0x18] VAL[0x00000800]
 @00015646  [ETH     ] REG[0x19] VAL[0x00007777]
 @00015651  [ETH     ] REG[0x1A] VAL[0x00007777]
 @00015656  [ETH     ] REG[0x1B] VAL[0x00000000]
 @00015661  [ETH     ] REG[0x1C] VAL[0x00000000]
 @00015666  [ETH     ] REG[0x1D] VAL[0x00000000]
 @00015671  [ETH     ] REG[0x1E] VAL[0x00000010]
 @00015676  [ETH     ] REG[0x1F] VAL[0x00008100]

Hat jemand einen Tipp für mich, was ich falsch mache oder in welche 
Richtung ich noch suchen könnte?
Gast #3794171
Lesenswert?

Ich habe mich geirrt. Mit dem Flag schalte ich gar nicht den Slow 
Oscillator Mode ein (dieser würde in Reg 0x11 liegen)
Ich setze aber ein Bit im Register 0x12, welches laut Datenblatt 
reserviert ist.
Außerdem habe ich festgestellt, dass die TX Leitung zwischen MagJack und 
Phy verpolt war. Dies habe ich nun korrigiert. Leider bekomme ich unter 
normalen Umständen nun noch immer keinen Link hin.
Wenn ich das mysteriöse Flag in Register 0x12 jedoch setze, baut sich 
der Link auf und es scheint so, als ob ich auch Daten aus dem Netz 
empfange...
Aber was verbirgt sich hinter dem Register? - Wieso scheint es mit dem 
gesetzten Bit zu funktionieren?! - Warum funktioniert es nicht wie bei 
allen anderen auch?
OP #3797388
Lesenswert?

HEUREKA!

Nun habe ich den Fehler. Als ich nicht weitergekommen bin, habe ich den 
Cable-Diagnostic Mode aktiviert. Der meldet als Resultat "Cable-Short 
Ciruit / Distance < 1m".
Das Kabel ist ok, also muss es am Phy <> MagJack liegen. Den also 
durchgemessen. Und tataaa: Dieser blöde MagJack hat nicht die 
Standardbelegung (1,2,3,6) sondern verwendet für RX Pin 7, 8.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren