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
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
TCP Stack in asm? Hier jedenfalls das passende Buch zu asm und Netzwerk/Web: https://pbs.twimg.com/media/B0Fj-hZIMAAdCkt.png
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
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.