Forum: Mikrocontroller und Digitale Elektronik Ethernet Link Status überprüfen (STM32F107, LAN8710A, lwIP)


von Bernd (Gast)


Lesenswert?

Hallo Forum,

ich suche den richtigen Weg, zu überprüfen, ob ein Ethernet Link besteht 
bzw. ob nach einer Unterbrechung wieder ein Link besteht und erneut eine 
Verbindung aufgebaut werden kann. Mein Projekt ist dieses hier:
Beitrag "Re: STM32 Fehler in Webserver Software von STM"

Da Ethernet recht komplex ist, bin ich mir über den richtigen Weg nicht 
ganz im Klaren.

Im Reference Manual zum STM32F107 habe ich bei der MAC Beschreibung 
nichts gefunden, wie ich den Link Status auslesen kann. Hab ich was 
übersehen?

Im PHY (LAN8710A) gibt es über die SMI Schnittstelle im Basic Status 
Register (Register 1) ein Link Status Bit (Bit 2). Wenn ich das im 
Beispielcode von ST richtig sehe, dann wird das SMI Interface nur für 
die Konfiguration des PHYs benötigt und nicht während der normalen 
Netzwerkkommunikation. Kann ich also dieses Register pollen und auf den 
Link Status prüfen, ohne die Netzwerkkommunikation zu stören?
Über den PHY Interruptpin gibt es auch ein Link Down Event. Aber ich 
kann ja zwischen den auslösenden Events am Controller nicht mehr 
unterscheiden. Ich kann es dann nur so machen, dass das Link Down Event 
das einzig aktive Event ist.

Kann ich im TCP/IP Stack (hier lwIP) noch etwas über den Link Status 
erfahren?

Beim Bootup läuft die Ethernet Konfiguratuion aus dem ST Beispiel nur 
durch, wenn auch ein Link da ist.

Wenn man ohne Kabel bootet, fehtl ja die ganze Konfiguration. Dann kann 
ich mit dem Pollen des Link Status Registers auch nichts stören und 
anschließend die gesamte Konfiguration anstoßen.

Auf welcher Ebene (MAC im uC, PHY Register, lwIP) überwacht man nun 
korrekter Weise den Link Status, um ggf. darauf reagieren zu können?

von Franzis I. (reparateur)


Lesenswert?

genau dies interessiert mich auch. Ich verwende zwar ganz anderen Soc, 
aber ich habe genau das gleiche Problem.

von Jojo S. (Gast)


Lesenswert?

Den physical Link für eine Verbindung zu prüfen ist aber nur die halbe 
Miete und liefert keine genaue Aussage über den Status. Wenn die 
Netzwerkverbindung aus mehreren Segmenten besteht dann überwachst du nur 
die erste direkte Verbindung, wenn z.B. an einem Switch das Kabel von 
einem zweiten Segment zum Zielrechner rausgezogen wird dann ist für dich 
noch die Welt in Ordnung, die Verbindung ist trotzdem weg. Eine sichere 
Verbindungserkennung braucht dann einen zyklischen Watchdog.

von Bernd (Gast)


Lesenswert?

Guter Einwand. Leuchtet mir ein. Aber was ist dann die Bedingung, um den 
Watchdog zurück zu setzen? Empfangene Daten? Und wenn es die nicht 
zyklisch gibt?

von Matthias (Gast)


Lesenswert?

Du musst Dir das Datenblatt des LAN8710A genau durchlesen.

Bei MII-Anbindung gibt es auch einen LinkState. Bei RMII bleibt nur das 
MDIO-Interface.

Für die internen Dinge des Phy-Chips muss Du den Phy-Treiber beim 
IP-Stack suchen. Der sollte eigentlich einen Zugriff auf die 
MDIO-Schnittstelle enthalten.

Das mit dem Link-Zustand läuft über eine Statusregister. Entweder 0/1 
oder
15 (weiss ich grad net auswendig). Diese Register sind wohl bei allen 
Phys standardisiert, so dass der Hersteller keinen Unterschied macht.

Den Linkzustand muss man ggf. pollen (wenn der Treiber das nicht macht).
Ich hab mir dazu auch schonmal einen Phy-Treiber modifiziert, allerdings 
bei einem anderen IP-Stack.

Aufpassen muss man nur mit dem AutoNegotiation. Das muss man u.U. per 
Reset und Restart-auto Negotiate (siehe Registerbeschreibung im 
Datenblatt) selber neu starten. Dauert dann auch ein paar Sekunden, bis 
der Link steht.

Das MAC-Interface vom Controller (zumindes bei meinem damals) hatte 
keine Möglichkeit den Link-Zustand abzufragen. Alledings musste man da 
irgendwas neu starten, wenn ein Link mal gefehlt hat, falls sich die 
Linkparamter geändert haben. Der MAC hat dazu ein (paar) Register, in 
denen man diese dann eintragen muss.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.