Hallo, ich habe ein Freertos mit dem Webserver Beispiel für den LPC1768 am laufen und es funktioniert auch, jetzt ist mir aber aufgefallen, dass wenn ich mir den Ping in Wireshark anschaue ich dopelte Replys bekomme (in der eingabeaufforderung sehe ich das nicht, unter Linux schon :-P ). Das rührt wohl daher, dass uIP im EMAC_ISR den Reply erneut versendet. Entferne ich dort die Zeile: // TX_DESC_PACKET( ( emacTX_DESC_INDEX + 1 ) ) = TX_DESC_PACKET( emacTX_DESC_INDEX ); bekomme ich nur einen Reply ABER ich erhalte zwischen REquest und reply einen Frame voller 5en. Das komische ist, dass wenn ich sage das die Länge der Daten nicht mehr größer als 0 ist (im Code steht man KANN das dazu benutzen um die Daten ein zweites mal zu senden) erhalte überhaupt keine Replys mehr..... Kennt sich jemand näher mit uIP aus und kann mir helfen?
das doppelte Senden ist ein bekanntes und auch dokumentiertes Feature der uIP Lib. Damit wird der Naggle Algorithmus ausgetrickst der in vielen Betriebssystemen läuft und kleinere Pakete erst sammelt bevor sie quittiert werden. Durch das doppelte Senden werden die Pakete im TCP Stream dann sofort quittiert, ansonsten wird die Quittierung meist 200 ms zurückgehalten. Wenn man das in der LPC FreeRTOS/uIP Implementierung auskommentiert muss man noch an einer anderen Stelle eingreifen weil da mit zwei Buffern gearbeitet wird die immer im Wechsel benutzt werden.
habe die mod. emac.c mal angehängt, in der vSendEmacTxData() habe ich etwas verdreht. Nachtrag: ich habe das auf dem LPCXpresso mit LPC1769 gemacht, der hat den PHY LAN8720. Das musst du evtl. anpassen wenn du einen anderen hast. Die Initialisierung war auch nicht ganz richtig, lief glaube ich nicht mit 10 MBit in den älteren Beispielen. in emac.h noch hinzufügen:
1 | #define DP83848C_DEF_ADR 0x0100 /* Default PHY device address */ |
2 | #define DP83848C_ID 0x20005C90 /* PHY Identifier */ |
3 | #define LAN8720_ID 0x0007C0F0 /* PHY Identifier */ |
4 | |
5 | #define PHY_ID LAN8720_ID
|
Vielen vielen Dank, Du hast mir gerade den Tag und damit auch das ganze Wochenende gerettet! Läuft wunderbar. DANKE...............WUHU!!!!
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.