www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ethernet AVR


Autor: Niki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Es geht wieder um ein Thema, über welches schon viel diskutiert wurde.
Jedenfalls will ich keinesfalls irgendeine fertige, kommerzielle Lösung 
haben sondern "Marke Eigenbau".

Wie der Titel schon sagt, geht es darum, eine ISA Ethernet Karte an 
einen AVR anzuschliessen.

Ich will ohne Umwege über 100 externe Bauteile den Schaltplan auf 
http://avr.jpk.co.nz/eavr/glueless8515_ne2000.gif verwenden. Der ist 
"relativ" leicht auch auf Lochraster aufzufädeln. Der Plan ist mir im 
Prinzip klar: PORTA Datenbus, 8 Bit, PORTC Adressbus, 6 Bit, INT0 
Interrupt5, der getriggert wird, wenn die Karte Daten vom Netz empfängt 
(sofern halt Karte auf IRQ5 gestellt).

Ich will die Karte eben deswegen direkt ansprechen (und nicht auf memory 
mappen) da der AVR nur ein Interface sein soll und keinen TCP/IP stack 
drauf bekommen soll.

Jedoch stellt sich für mich nun die Frage, wie ich so ein Ding 
anspreche.
Zum Empfangen von Daten: Ich bekomme einen Interrupt5 getriggert, 
schreibe dann in den Adressbus die Adresse der Ethernetkarte (z.B. 
0x300) und kann sodann aus deren Speicher (das sind 16k?!) via PORTA 
ganz "normal" lesen?
Hört sich einfach zu einfach an.

Und wie ist das beim Versenden eines Paketes? Wiederum die I/O Adresse 
auf den Adressbus schreiben und sodann über PORTA die Daten schreiben? 
Hört sich ebenfalls einfach an.
Ich denke jedoch auch, dass es hier sicher verschiedene Speicherbereiche 
gibt, einen wo ich lesen, einen wo ich schreiben kann. Ist es zB nur 
möglich gleich ein ganzes Frame zu holen oder kann ich das Byte 
orientiert machen, wie beim UART.
Eine Funktion send_ether() und recv_ether() z.B. (jedenfalls werde ich 
eine NE2000 kompartible verwenden, so einen Standard halt den der linux 
ne2k treiber ansprechen kann)

Dann gibt es allerdings noch ein viel heikleres Problem: Die 
Geschwindigkeit. Da der AVR ja nur Interface werden soll, liegt es nahe, 
dass die Daten konvertiert werden. Ja, genau, in eine art serielles 
RS232 Protokoll. Das ist aber viel zu langsam wenn ich mir Raten von 
10kbit vorstelle.
Das einzige was mir dabei helfen wird ist wahrscheinlich nur so viel zu 
verarbeiten wie geht, den Rest droppen, und vielleicht einen 2/4k 
Ringpuffer zu verwenden?!
Oder gibt es was womit ich der Karte sagen kann "Halt, ich kann im 
Moment nicht mehr verarbeiten". Ich muss jedenfalls damit rechnen, dass 
auf der anderen Seite im schlechtesten Falle 9600 sein werden (ist aber 
kein RS232 proto).


Kann mich da vielleicht irgendwer aufklären?
Wo findet man Infos zu sowas?



Vielen Dank,

Niki



PS: Bei eAVR wird erstens alles gemappt verwendet und zweitens stehn 
noch keine Treiber bereit...

Autor: Martin de Wendt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

schau mal unter www.picoweb.de. Dort findest du ein wenig mehr Infos und 
auch ein datenballt für NE2000. Das mit der Geschwindigkeit ist nicht 
ganz so das Problem.

Martin

Autor: Meiserl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Muß es so kompliziert sein?
Schau mal auf www.siteplayer.com

Autor: Niki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

@Martin: Danke, sowas in der Art hab ich gesucht, werds mir mal anschaun
@Meiserl: Auch danke, aber siteplayer kenn' ich ja schon. Jedenfalls um 
deine Frage zu beantworten: Ja, es muss so kompliziert sein. Ich will 
absolut keine kommerzielle Lösung und will das komplett selbst machen, 
um auch die Zusammenhänge verstehen zu können, das Erfolgserlebnis zu 
haben, bla bla bla

thx n mfg

Niki

Autor: Niki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Martin: Bist du dir sicher dass du diese Seite meinst?
Ich könnt' mir gut vorstellen dass du die irgendwie verwechselt hast, 
denn da ist nichts in dieser Richtung oben, oder finde ich nur nix?

Autor: Niki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, habs zufällig gefunden, das gleiche mit .com.

Das sieht wahnsinnig gut aus was da geboten wird! Genau sowas hab ich 
gesucht!
thx

Autor: Martin de Wendt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

sorry du hast es ja selber gemerkt, habe das .com verwechselt :-(


MdW

Autor: Jens Renner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin auch dabei, einen Mikro-Webserver mit einem mega163 aufzubauen 
(Bild siehe Anhang, sorry für die schlechte Qualität).

Die Sache ist in der Tat recht einfach, zumindest was den elektronischen 
Teil angeht. Ich habe es mir sogar noch leichter gemacht, und erstmal 
die Interrupt-Geschichte weggelassen. Statt dessen betreibe ich das Ding 
in einer Art Polling-Modus, d.h. ich vergleiche ständig Boundary- und 
Current-Pointer, ob Daten eingetrudelt sind. Das ist sicher nicht 
ökonomisch, aber für den Anfang okay.

Der aufwendige Teil ist aber die Implementierung der Stacks und 
Protokolle, weil ohne macht der Webserver nunmal keinen Sinn, bzw. man 
muss sich darauf beschränken, allein die Existenz eingehender Pakete 
festzustellen.

Aber mal eine ganz andere Sache, an der ich gerade verzweifle.
Ich habe folgenden Code in der read-Funktion, in der ich das Daten-Byte 
des ISA-Karte abfrage:

ldi r18, 0 ; set data port for input
out DATA_DDR, r18 ; .equ DATA_DDR = DDRD
;... some address strobes... no function calling
in r17, DATA_IN ; .equ DATA_IN = PIND

Und jetzt kommt's: unabhängig vom an den Pins anliegenden Byte erhalte 
ich in r17 den Wert des Data-Latchs des µC. Aber weshalb?
Der Port ist doch als Eingang konfiguriert (und bleibt es auch), ich 
lese von PIND ein... wo ist mein Fehler?

Grüße

Jens

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.