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?
genau dies interessiert mich auch. Ich verwende zwar ganz anderen Soc, aber ich habe genau das gleiche Problem.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.