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...
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
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
@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?
Danke, habs zufällig gefunden, das gleiche mit .com. Das sieht wahnsinnig gut aus was da geboten wird! Genau sowas hab ich gesucht! thx
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
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.