Hallo, bei meinem Versuch (nach Ulrich Radig) auf einen "ping" zu antworten habe ich das Problem, das der Interrupt meines ENC28J60 nur bei einem ARP oder Broadcast funktioniert und nicht bei einem ICMP zum Beispiel. Kann mir jemand helfen? Mit Dank, Bernd
Ich verwende auch den ENC28j60, an einem STM32F4 Discovery Board. Ich habe ebenfalls das Phänomen, dass keine PING-pakete empfangen werden. Alles andere funktioniert jedoch einwandfrei. TCP, UDP, ARP, alles kein problem. HTTP, DHCP, DNS, NTP, LLMNR sind alle getestet meine config:
1 | const uint8_t enc28j60_InitScript[] = { |
2 | // Size of junk Data
|
3 | 0x07, 0x48,0x40,0x06,0xFF,0x1F,0x40,0x06, // set buffer pointer for rx, set read pointer to start |
4 | 0x03, 0x40,0x40,0x06, // set spi read address to start |
5 | 0x02, 0x9F,0x01, // switch to register bank 1 |
6 | 0x02, 0x58,0x60, // receive filter: all frames with correct crc |
7 | 0x02, 0x9F,0x02, // switch to register bank 3 |
8 | 0x07, 0x40,0x80,0x00,0xFF,0xE1,0xFF,0xFF, // write own mac address |
9 | 0x02, 0xBF,0x01, // switch to bank 2 |
10 | 0x02, 0x40,0x0D, // Enable Pause Control, enable MAC receive |
11 | 0x02, 0x42,0xB1, // Enable Padding, CRC and Full Duplex |
12 | 0x02, 0x44,0x15, // Set back to back inter packet gap |
13 | 0x03, 0x46,0x12,0x0C, // Set non back to back inter packet gap |
14 | 0x03, 0x4A,0xEE,0x05, // MTU is 1518 |
15 | 0x05, 0x54,0x12,0x00,0x12,0x00, // enable link change interrupt in PHY |
16 | 0x02, 0x5F,0x04, // switch to register bank 0, enable receiver |
17 | 0x02, 0x5B,0xD8, // enable interrupts |
18 | };
|
Danke für deine Info, bist du denn der Meinung das der ENC28J60 nicht für "ping" geeignet ist? Kann ich nicht glauben! Gruß, Bernd
BerndB schrieb: > Hallo, > > bei meinem Versuch (nach Ulrich Radig) auf einen "ping" zu antworten > habe ich das Problem, das der Interrupt meines ENC28J60 nur bei einem > ARP oder Broadcast funktioniert und nicht bei einem ICMP zum Beispiel. > > Kann mir jemand helfen? Bei mir funktioniert Ping. Welche Firmware verwendest du?
Oh danke, den ping sende ich von einem Windows-XP Rechner. Folgendes passiert: Auf ping 192.168.0.91 bekommt mein ENC28J60 ein Interrupt (ARP 0x0806) und ich kann die Anforderung bearbeiten und sende ein Paket mit den entsprechenden Daten als IP 0x0800 opcode = 2 zurück. Darauf schickt der PC ein ICMP-Paket und ich bekomme aber kein Interrupt darauf! Das ist mein Problem! Bernd
BerndB schrieb: > Das ist mein Problem! Dann nimm den Drahthai und lass ihn den Verkehr analysieren. Eventuell ist an deinem ARP-Response Päckchen etwas falsch.
BerndB schrieb: > ENC28J60 nimmt nur ARP Requests oder Broadcast an Kann gar nicht sein. Der ENC28J60 nimmt alles an was er auf der LAN-Leintung bekommt, sogar die Pakete die er gar nicht haben will. Entscheidend ist was der daran hängende Controller damit macht.
>Dann nimm den Drahthai und lass ihn den Verkehr analysieren. Eventuell >ist an deinem ARP-Response Päckchen etwas falsch. Leider nicht! Nach Wireshark ist alles ok, und mit "arp -a" kann ich den Eintrag in der Tabelle (PC) sehen. Bei "Ulrich Radig" wird nach "ICMP" ausgewertet, also muß doch der ENC28J60 das ICMP-Paket empfangen können und einen Interrupt auslösen! Woran kann das liegen das das bei mir nicht klappt?? Gruß, Bernd
Fehler gefunden: ERXFCON stand auf 1010 0001 Wie gesagt nur Broadcast's empfangen.
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.