Forum: Mikrocontroller und Digitale Elektronik ENC28J60 Empfangsprobleme nach Softreset


von Klaus M. (muek)


Lesenswert?

Ich stehe vor einem recht eigenartigen Problem mit dem ENC28J60, aber 
der Reihe nach.

Ich habe für das AVR-NET-IO-Board, bestückt mit einem 644-er, einen 
LAN-BootLoader geschrieben. Der basiert prinzipiell auf dem Radig-Stack, 
es wurde jedoch der ganze TCP-Teil entfernt und die Kommunikation läuft 
nur über UDP/IP, weil für den kompletten Stack im Bootbereich einfach 
nicht genug Platz vorhanden ist.

Das ganze funktioniert auch wirklich problemlos. Der BootLoader startet, 
wartet ein paar Sekunden ob eventuell ein UDP-Telegramm vom PC eintrifft 
um im BootLoader zu bleiben und wenn nicht wird die Applikation 
gestartet, wie das eben bei einem BootLoader so üblich ist!

Die Applikation hat jedoch schon einen kompletten stack implementiert, 
reagiert aber auch auf ein bestimmtes UDP-Telegramm, mit dem man wieder 
den BootLoader starten kann. Das klappt auch wunderbar, aber ...

... wenn aus der Applikation der BootLoader gestartet wird (jmp 0x7000), 
dann wird für den ENC28J60 nur der Softreset durchlaufen und jetzt 
passiert etwas Eigenartiges. Es schaut alles super aus, aber es werden 
keine UDP-Telegramme empfangen. ARP kommen komischerweise durch aber 
anpingen geht auch nicht. Es ist aber nicht so, dass sich das nicht 
irgendwann fangen würde. Nach einiger Zeit (zwischen 30 Sekunden und 2 
Minuten) kommt plötzlich doch ein UDP-Telegramm durch und ab dann 
funktioniert wieder alles prima. Ach ja, UDP-Telegramme senden geht 
sofort nach dem "Softreset", weil ich schicke Testtelegramme zu einem 
UDP-Terminal-Programm am PC !!!

Kann jemand von euch mit dieser Schilderung etwas anfangen ???

Danke und
LG Klaus

von Axel L. (axel_5)


Lesenswert?

Ja, habe das gleiche Problem.

Aber bisher auch keine Lösung.

Gruss
Axel

von Klaus M. (muek)


Lesenswert?

Hi Axel,

na super, da sind wir schon zwei, bin gespannt ob vielleicht doch Jemand 
eine Lösung anbieten kann?

Was ich am Wochenende versuchen werde ist ein "HardReset" des ENC28J60. 
Ich werden den RESET mit dem (bei mir freien) PB1 verbinden und den 
Kontroller so rücksetzen, mal sehen ob das etwas bringt ???

LG Klaus

von ... (Gast)


Lesenswert?

Klaus M. schrieb:
> nur der Softreset durchlaufen

Soviel ich weiß ist, dass im Softreset bestimmte Register nicht 
zurückgesetzt werden. Könnte eine Ursache sein.

von ... (Gast)


Lesenswert?

... schrieb:
> Soviel ich weiß ist, dass im Softreset bestimmte Register nicht
>
> zurückgesetzt werden.

Öhm, anders herum, bei dem Softreset werden alle Register zurückgesetzt. 
Evtl. muss erst eine erneute Initialisierung des ENC erfolgen.

von Klaus M. (muek)


Lesenswert?

> Soviel ich weiß ist, dass im Softreset bestimmte Register nicht
> zurückgesetzt werden. Könnte eine Ursache sein.

Ja klar, nur was konkret ???

Lauf Datenblatt wird zwischen Power-on Reset und System Reset 
unterschieden, wobei der System Reset entweder durch Runterziehen des 
RESET-Pin oder via SPI-Kommando ausgelöst werden kann.

Die Register scheinen jedenfalls immer rückgesetzt zu werden, nur ist 
nach POR der dual port buffer undefiniert und nach einem System Reset 
behält er den alten Zustand. Aber das sollte ja egal sein, weil ja in 
beiden Fällen dann der selbe Initialisierungscode durchlaufen wird.

Also ich verstehe das Verhalten einfach nicht ?

von ... (Gast)


Lesenswert?

Das Errata hat da noch einen Hinweis:
Module: Reset
After sending an SPI Reset command, the PHY
clock is stopped but the ESTAT.CLKRDY bit is not
cleared. Therefore, polling the CLKRDY bit will not
work to detect if the PHY is ready.
Additionally, the hardware start-up time of 300 µs
may expire before the device is ready to operate.
Work around:
After issuing the Reset command, wait at least
1 ms in firmware for the device to be ready.

Danach sollte erst die Initialisierung des ENC beginnen.

von Klaus M. (muek)


Lesenswert?

Das darf doch nicht wahr sein, habe den Fehler eben gefunden. So deppert 
muss man mal sein :-(

Mein BootLoader und die Applikation verwenden unterschiedliche 
MAC-Adressen. Die Applikation war ein modifiziertes Beispiel vom 
MikroC-Compiler und ich habe nicht auf die MAC-Adresse geachtet. Jetzt 
ist das ganze natürlich auch erklärbar, warum es sich nach einer 
gewissen Zeit wie von selbst "bereinigt" und plötzlich alles wieder 
geht.

Mann oh Mann, manchesmal sieht man vor lauter Bäume den Wald nicht mehr!

Trotzdem Danke für die Hinweise und Axel vielleicht hast ja das selbe 
Problem wie ich ;-)

LG aus Wien
Klaus

von Axel L. (axel_5)


Lesenswert?

Klaus,

danke für den Tip, scheine tatsächlich dasselbe Problem zu haben.

Gruss
Axel

von Klaus M. (muek)


Lesenswert?

Hi Axel,

> danke für den Tip, scheine tatsächlich dasselbe Problem zu haben.

das heißt du hast auch einen eigenen LAN-BootLoader entwickelt, was kann 
der denn so ???

Ich bin jedenfalls sehr erstaunt mit welchen Tempo man via LAN eine neue 
Firmware in so einen ATmegaXXX schießen kann. Bei grossen 
FLASH-Bereichen so ab 644 aufwärts, kann das ja über die USB schon 
ziemlich lange dauern und via LAN geht's im "Höllentempo" ;-)

LG Klaus

von Axel L. (axel_5)


Lesenswert?

Ich habe einen hier aus der Codesammlung verwendet. Also nicht selbst 
entwickelt, nur an meine Bedürfnisse angepasst.

Ja, das Programmieren geht wirklich schick. Wobei bisher die Zeit, bis 
der dann wieder ging, schon nervend war. Aber das werde ich am 
Wochenende mal angehen.

Was vor allem schön ist, ist, dass ich die im Haus verteilten Module auf 
die Art sehr schön updaten kann. Dabei starte ich den Bootvorgang über 
Telnet.

Gruss
Axel

von Klaus M. (muek)


Lesenswert?

Axel Laufenberg schrieb:
> Was vor allem schön ist, ist, dass ich die im Haus verteilten Module auf
> die Art sehr schön updaten kann. Dabei starte ich den Bootvorgang über
> Telnet.

Machst es also ähnlich wie ich, nur habe ich meinen BootLoader komplett 
selbst entwickelt und der kann etwas mehr wie die üblichen. So weiß ich 
z.B. ob und welche Applikation geladen ist, auch deren Version etc. und 
alle meine Applikationen hören auch direkt via UDP/IP auf ein spezielles 
Kommando, mit dem ich jeweils den BootLoader wieder starten kann, das 
erspart den Umweg über Telnet. Manche BootLoader sind ja dermaßen 
kompliziert zu bedienen, daß es mich abgeschreckt hat sie zu verwenden.

Na dann viel Erfolg und Spaß mit deinen verteilten Modulen

LG Klaus

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.