Forum: Projekte & Code ENC28J60 Initialisierung ATmega1284P AVR Assembler Beispiele


von Bernhard S. (bernhard)



Lesenswert?

Geschätztes Forum,

ein kleines Beispiel, wie ein ENC28J60 microchip initialisiert werden 
kann.

Es ist kein fertiges Projekt, aber die gelben LEDs leuchten wenn 
Datenpakete empfangen wurden.

Die Registerinhalte werden vor und nach der Initialisierung permanent 
per USART ausgegeben.

Nach Programmstart wird CLKRDY abgefragt, empfängt MISO nicht 01h, dann 
blinkt ROT und GRÜN ganz aufgeregt...  ein OSZI könnte helfen, s.Bild.

Eine kleine Routine beschreibt PHLCON und die beiden LED an der
RJ45-Buchse mit Übertrager blinken ca. 3 Sekunden im Sekundentakt

Bei der Initialisierung wird nach einem Write Control Register (WCR) 
gleich ein Read Control Register (RCR) durchgeführt, um zu prüfen, ob 
das Register mit den korrekten Wert gesetzt wurde.

In einigen Routinen ist eine Fehlerüberwachung eingebaut, bei einem 
Fehler leuchtet ROT und per USART wird der Error-Code und die 
Registerinhalte temp1+2...9 angezeigt.

Bsp: Bit Field Set  (BFS) im Register MACON3, ist lt. Datenblatt nicht 
erlaubt „The Bit Field Set (BFS) command is used to set up to 8 bits in 
any of the ETH Control registers.“

Insbesondere werden bei der Initialisierung folgende Register bedient:

EIE, ECON1, ERXSTL, ERXSTH, ERXRDPTL, ERXRDPTH, ERXNDL, ERXNDH, ETXSTL, 
ETXSTH, MACON1, MACON3, MAIPGL, MAIPGH, MABBIPG, MAMXFLL, MAMXFLH, 
PHCON2, MAADR1, MAADR2, MAADR3, MAADR4, MAADR5, MAADR6

Ob die Einstellungen für eine spätere Verwendung optimal sind, kann ich 
nicht einschätzen, mir fehlt die Erfahrung, vielleicht habt Ihr Tipps.

Txstart_init=0x0000             ; start TX buffer at 0
Rxstart_init=0x1A19 ; give TX buffer space for one full eth.frame 
(~1500)
Rxstop_init =0x1FF0            ; receive buffer gets the rest
MAX_FRAMELEN=1500     ; maximum ethernet frame length

In der LOOP-Schleife, wird u.a. permanent MAADR1... MAADR6 (MAC-Adresse) 
abgefragt, ob die Registerinhalte unverändert bleiben, ein “heimlicher“ 
Reset des ENC28J60 wird somit erkannt.

Ich habe mir erlaubt, CLKOUT in ECOCON zu deaktivieren, ich mag keine HF 
auf dem AVR-NET-IO-Board, wenn sie nicht unbedingt benötigt wird.

Hier fand ich sehr interessante Fehler-Hinweise, wie ist Eure Meinung 
dazu:
http://www.kner.at/home/40.avr/arduino/ethernet/Fehler.html

Das Assembler-Programm ist nicht optimal programmiert, SCL ist niedrig, 
mit Warteschleifen versehen.

Eigentlich könnte die Anpassung an einen anderen µC relativ einfach 
sein, ev. STS / LDS durch OUT und IN.

Für Hinweise und konstruktive Kritik bin ich sehr dankbar.

Bernhard

: Bearbeitet durch User
von Michael U. (amiga)


Angehängte Dateien:

Lesenswert?

Hallo,

ich schaue mir Deine Projekte ja immer gern an, wie kommt mah 2016 auf 
den ENC28J60? ;-)

Ich werfe ja nichts weg, im Anhang Sourcen von 2006, da wollte ich 
unbedingt auch den TCP-Stack selber schreiben.

Theoretisch müßte das, was fertig geworden ist, sogar irgendwie 
laufen...

Vielleicht interessiert es Dich ja irgendwie.

Gruß aus Berlin
Michael

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

TCP Stack in asm?


Hier jedenfalls das passende Buch zu asm und Netzwerk/Web:
https://pbs.twimg.com/media/B0Fj-hZIMAAdCkt.png

von Michael U. (amiga)


Lesenswert?

Hallo,

Mw E. schrieb:
> TCP Stack in asm?

naja, das war vor 10 Jahren und der ENC28J60 war aufgetaucht.
Es blieb beim Versuch, U.Radig war in C wohl schneller. ;-)
Ich habe in die alten Sourcen von mir nicht mehr reingeschaut...

Gruß aus Berlin
Michael

von Bernhard S. (bernhard)


Lesenswert?

@Michael

ein ganz großes Dankeschön für Dein ASM-Beispiel. Hab gerade mal grob 
durchgeschaut... sieht gut aus und ist auch vernünftig dokumentiert.


>wie kommt man 2016 auf den ENC28J60? ;-)

Hatte mir letztes Jahr, eher durch Zufall, 2 Platinen "AVR-NET-IO" 
gekauft, dort sind diese "Burschen" verbaut.

Gibt es einen besseren, ev. sogar Pin-kompatibelen?


Ich denke, dieser IC ist für den Anfang ganz brauchbar, zumal ich mich 
in die LAN / Ethernet Problematik erst einarbeiten muss.


Die Netzwerktechnik-Fibel liegt momentan bei mir auf dem Schreibtisch:

http://www.elektronik-kompendium.de/shop/buecher/netzwerktechnik-fibel

@MwEn, danke für den Tipp

Gruß aus Thüringen

Bernhard

von Michael U. (amiga)


Lesenswert?

Hallo,

Bernhard S. schrieb:
> Hatte mir letztes Jahr, eher durch Zufall, 2 Platinen "AVR-NET-IO"
> gekauft, dort sind diese "Burschen" verbaut.

Hier liegen auch noch 2 NetIO und ein Lochraster-Aufbau rum.
Ein NetIO mit modifizierter Radig-Siftware und einem RFM12 als Empfänger 
für meine Sensoren war letztens wieder im Einsatz, als es dem RasPi die 
SD-Card zerlegt hatte. Angesteckt und ging. :)

> Gibt es einen besseren, ev. sogar Pin-kompatibelen?
Habe ich nie geschaut, mir reichte der ENC damals. Erinnern kann ich 
mich noch, daß es verschiedene Revisionen des ENC gab, jede mit anderen 
Bugs.

Der BIAS-Widerstand war dagegen bei mir nie wirklich kritisch, zumindest 
bei kurzen RJ45-Kabeln (3m zum Switch) lief es immer stabil.

Inzwischen lasse ich das Kabel weg und spiele mit den ESP8266 Modulen...

Gruß aus Berlin
Michael

von Bernhard S. (bernhard)


Lesenswert?

@Michael,

ich kämfe mich momentan durch Deinen Assembler-Code durch.

Er ist sehr hilfreich :-)

Was macht dieses Macro?


.macro  load_p                      ; lädt 16Bit @1 nach @0 High und @0 
Low
        ldi     @0H,HIGH(@1)
        ldi     @0L,LOW(@1)
.endmacro

ARP funktioniert schon ganz gut, schieße permanent Broadcasts ins Netz,

doch manchmal (nach 500 oder 60.000 Paketen) sendet der ENC plötzlich 
keine Pakete mehr.

Er stürzt fürchterlich ab, selbst ein Software-Reset per SPI nimmt er 
nicht an, nur ein Hardware-Reset am Pin.

PS: Wollte Dich privat anscheiben, scheint aber irgendwie nicht zu 
funktionieren?


Bernhard

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.