Forum: Mikrocontroller und Digitale Elektronik STM32 Ethernet Interrupt link_callback


von Matthias F. (frank91)


Lesenswert?

Hallo alle miteinander :P

Ich versuche gerade auf meinem STM324x91-Eval Board das Ethernet zum 
laufen zu bringen. Die Beispiele habe ich größtenteils verstanden.
Jetzt versuche ich das ganze nachzubauen.

Der Phy hat hierbei einen Interrupt Ausgang um zu erkennen, dass der 
Stecker eingesteckt oder ausgesteckt wurde.

Die dazugehörige Interruptroutine sieht wie folgt aus:
1
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
2
{
3
  /* Get the IT status register value */
4
  if(BSP_IO_ITGetStatus(MII_INT_PIN))
5
  {
6
    ethernetif_set_link(&gnetif);
7
  }
8
  BSP_IO_ITClear();
9
}

wobei "ethernetif_set_link(&gnetif);" den Phy ausließt und auf das 
seinen neuen Status prüft.

Jetzt zu meinem Problem....
Der Interrupt wird erst gar nicht ausgelöst. Mit kommt es so vor, als 
würde der Phy seinen Interrupt Ausgang nicht benutzen.

In den Cube Einstellungen habe ich "LWIP_NETIF_LINK_CALLBACK" aus Enable 
gesetzt.

Muss ich sonst noch irgendwas machen um den Interrupt zu aktivieren??

von Little B. (lil-b)


Lesenswert?

Matthias F. schrieb:
> Der Interrupt wird erst gar nicht ausgelöst. Mit kommt es so vor, als
> würde der Phy seinen Interrupt Ausgang nicht benutzen.

Hast du das nachgemessen?

Der STM erkennt den Interrupt des Phys über ein EXTI-Interrupt. Wie ist 
dieser bei dir Konfiguriert?

Matthias F. schrieb:
> In den Cube Einstellungen habe ich "LWIP_NETIF_LINK_CALLBACK" aus Enable
> gesetzt.

Ich benutze weder Cube noch lwIP, aber das Flag klingt stark nach 
Applikations-interface, und nicht Hardware Interface

von Matthias F. (frank91)


Lesenswert?

Little B. schrieb:
> Matthias F. schrieb:
>> Der Interrupt wird erst gar nicht ausgelöst. Mit kommt es so vor, als
>> würde der Phy seinen Interrupt Ausgang nicht benutzen.
>
> Hast du das nachgemessen?

Jain. Der Pin ist leider nicht direkt mit dem Controller verbunden und 
nur schwer erreichbar. Er ist an einen Port Expander, welcher über I²C 
ausgelesen wird angeschlossen.

Weder wenn ich den Port expander kontinuierlich auslese, noch wenn ich 
ihn als interrupt aktiviere kann ich hier eine Änderung festellen. Der 
Pin ist immer auf High.
Im beigelegten Beispiel funktioniert dies aber. Ich erkenne aber nicht 
an welcher Stelle des Codes hier etwas anderst gemacht wird.

> Matthias F. schrieb:
>> In den Cube Einstellungen habe ich "LWIP_NETIF_LINK_CALLBACK" aus Enable
>> gesetzt.
>
> Ich benutze weder Cube noch lwIP, aber das Flag klingt stark nach
> Applikations-interface, und nicht Hardware Interface

Mit dieser Einstellung ist es möglich eine eigene Callback Routine zu 
schreiben, wenn der Stecker ein oder ausgesteckt wurde. Allerdings 
funktiniert dies nur der Phy mittels "ethernetif_set_link(&gnetif);" 
ausgelesen wird (Siehe erster Post.)
Ich dachte, dass diese Einstellung vlt auch den Phy gleich richtig 
konfiguriert. Aber das ist wohl nicht so.

Im Datenblatt des Phy steht, dass der Interrupt erst noch freigeben 
werden muss. Aber ich weiß nicht, wie das in Lwip geschehen soll.

von Matthias F. (frank91)


Lesenswert?

Ich hab ne Möglichkeit gefunden den Interrupt Ausgang des Phy zu messen. 
hier zeigt sich keine Änderung. Im Beispiel von STM erkennt man aber 
deutlich, dass dieser Pin seinen Pegel ändert, wenn man den Lan Stecker 
ein oder aussteckt.

Im Datenblatt des Phy habe ich entdeckt welche Register man setzen muss 
um den Interrupt zu aktivieren.
Genau diesen teil habe ich auch in meiner Bibliothek gefunden. Dort 
werden genau diese Register gesetzt.
Die Codezeilen sind dabei genau die selben wie im Beispiel...
Ich verstehe es nicht :-/

von Matthias F. (frank91)


Lesenswert?

Ich habe den Fehler :-D

In der stm32f4xx_hal_conf.h befindet sich folgende Zeile:
1
#define PHY_MICR_INT_OE                 ((uint16_t)0x0002U)  /*!< PHY Enable output interrupt events              */

es müsste aber so aussehen:
1
#define PHY_MICR_INT_OE                 ((uint16_t)0x0001U)  /*!< PHY Enable output interrupt events              */

obowhl dies im Cube richtig einstellt ist wird es falsch in die 
Bibliothek übernommen....

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.