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
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
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
@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
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
@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