Hallo zusammen, vielleicht kann mir hier im Forum jemand helfen. Ich habe das tolle Webserver Projekt entdeckt und bin recht begeistert. Benutze einen ATmega128 mit 16 MHz und möchte die ISA Netzwerkkarte, Chip Davicom dm9008, verwenden. (SW 1.38) Der Aufbau ist in Anlehnung an die Anleitung von Herrn Radig. (Vielen Dank auch an dieser Stelle.) Das Problem liegt nun an der Netzwerkkarte, diese ist nach dem Datenblatt voll NE2000 kompatibel. Aber die Verbindung klappt noch nicht. Hat schon jemand mit dieser Netzwerkkarte Erfahrungen machen können? Der Ping wird nicht beantwortet, die Link LED an der N.-Karte blinkt kurz auf, das wars. Am Switch wird der Link als aktiv angezeigt, sollte doch dann gehen oder nicht? Grüße thomas t.
Habe auch diese NIC und bin auch dabei gescheitert damit einen Webserver auf die Beine zu stellen. Wenn du etwas rausfindest schreibe es bitte hier ins forum
Hallo Bjoern, kein Problem. Denke das es an der Karte/Interrupt liegt, der Ping scheint ja an der Karte anzukommen. Wird nur noch nicht beantwortet. :-) Hab dem Herrn Radig auch geschrieben vielleicht meldet er sich noch? Grüße thomas t.
Funktioniert bei UM9008/DM9008 und BC912 nur, wenn man das ISA-Bus-Signal IOCHRDY anschliesst und die R/W-Routinen entsprechend modifiziert. Das könnte auch auf andere NE2000-er zutreffen, anders als beispielsweise 3COMs arbeiten die NE2000-er per Design stark mit diesem Signal. Realtek 8019 ist insofern wohl eher die Ausnahme davon, dort kommt man mit ein bischen Timing-gebossel offenbar auch ohne aus. Nicht immer, will mir jedoch scheinen, ich habe da bei IRQ-Polling auch öfter mal Dreck gelesen.
1 | void WriteRTL (unsigned char rtl_addr,unsigned char rtl_data) |
2 | { |
3 | AddrRTL(rtl_addr); |
4 | RTL_WR_OFF(); |
5 | DATA_PORT_RLT_WRITE = rtl_data; // anstatt NOPs |
6 | DATA_DIR_RLT = OUTPUT; |
7 | while (!RTL_READY()) |
8 | ; |
9 | RTL_WR_ON(); |
10 | DATA_DIR_RLT = INPUT; |
11 | } |
12 | |
13 | uint8_t ReadRTL (unsigned char rtl_addr) |
14 | { |
15 | AddrRTL(rtl_addr); |
16 | DATA_DIR_RLT = INPUT; |
17 | RTL_RD_OFF(); |
18 | nop(); nop(); // 2 NOPs nötig! |
19 | while (!RTL_READY()) |
20 | ; |
21 | rtl_addr = DATA_PORT_RLT_READ; |
22 | RTL_RD_ON(); |
23 | return (rtl_addr); |
24 | } |
Hallo A.K., danke für den Hinweis, ich habe darüber schon etwas gesehen gehabt. leider nicht so richtig verstanden, sorry. Wo sollte man ISA-Bus-Signal IOCHRDY anschliessen? Interrupt/Port? Ist ja das Signal welches für die "wait states" auf dem ISA Bus zuständig ist. (Low active) Grüße thomas t.
Hallo A.K., kannst du mir vielleicht deine Sourcen mal schicken? Wie hast du die Anbindung von "I/O CHANNEL READY" gemacht? Danke im vorraus. mfg thomas t.
Signal an einen beliebigen freien Pin vom AVR anschliessen und wie gezeigt in den R/W-Routinen abfragen. In der Initialisierung sollte der interne Pullup des Pins aktiviert werden. Im obigen Source ist RTL_READY() ein Macro, der den Zustand dieses Pins wiedergibt (z.B. PINC & 1<<PC0). Der relevante Teil der Sourcen steht oben. Evtl. kann auch eine vergleichbare Abfrage im Block-Datentransfer nützlich sein, aber da klappt's evtl. auch ohne. Den Sourcecode kann ich zur Verfügung stellen, aber da ich den teilweise deutlich umgebaut habe, wird das weniger helfen als der Auszug oben. Dieses Signal ist active high. Die Karte zieht es runter, wenn sie auf einen Transfer noch nicht rechtzeitig reagieren kann (not ready), zieht es wieder hoch wenn sie dann soweit ist (ready). Einfach die R/W-Zyklen zu verlängern funktioniert nicht.
Hallo A.K. danke für deine Hilfe, werds mal umsetzen. Mit Macros hab ich noch nichts gemacht, gehen folgende Codezeilen in der rtl8019.h : #define DDRC &= ~(1<<DDC0); //PINC 0 als Eingang #define PORTC |= (1<<PC0); // interner Pull-Up an PC0 aktivieren #define RTL_READY() PINC & 1<<PC0 Grüße Thomas t. PS: Wenn es keine Umstände macht würde ich mich über deine Sourcen freuen.
> #define DDRC &= ~(1<<DDC0); //PINC 0 als Eingang > #define PORTC |= (1<<PC0); // interner Pull-Up an PC0 aktivieren So wird das natürlich nix. Bischen C Kenntnisse sollten schon da sein. Source anbei.
Ja hast Recht. Hab meine Fehler auch schon unter die Nase gerieben bekommen. :-) In main.c DDRB &= ~(1<<DDB6); //PINB 6 als Eingang PORTB |= (1<<PB6); // interner Pull-Up an PB6 aktivieren in rtl8019.h #define RTL_READY() PINB & 1<<PB6 und die Karte blinkt schon mal heftigst. :-) Danke für deine Sourcen. Grüße thomas t.
Entschuldigt wenn ich diesen alten Thread wieder ausgrabe. Ich hab mir auch das ISA-CTRL Board zusammen gebaut und verwende dafür eine DM9008F, diese wird nach den änderungen :
1 | void WriteRTL (unsigned char rtl_addr,unsigned char rtl_data) |
2 | { |
3 | AddrRTL(rtl_addr); |
4 | RTL_WR_OFF(); |
5 | DATA_PORT_RLT_WRITE = rtl_data; // anstatt NOPs |
6 | DATA_DIR_RLT = OUTPUT; |
7 | while (!RTL_READY()) |
8 | ; |
9 | RTL_WR_ON(); |
10 | DATA_DIR_RLT = INPUT; |
11 | } |
12 | |
13 | uint8_t ReadRTL (unsigned char rtl_addr) |
14 | { |
15 | AddrRTL(rtl_addr); |
16 | DATA_DIR_RLT = INPUT; |
17 | RTL_RD_OFF(); |
18 | nop(); nop(); // 2 NOPs nötig! |
19 | while (!RTL_READY()) |
20 | ; |
21 | rtl_addr = DATA_PORT_RLT_READ; |
22 | RTL_RD_ON(); |
23 | return (rtl_addr); |
24 | } |
und in der Init. der Netzwerkkarte
1 | DDRD &= ~(1<<6); |
2 | PORTD |= (1<<6); |
auch immer erkannt. (Sourcen 1.38 / 1.39) Auch die LED an der Karte leuchtet und Blinkt wenn Vehrkehr im Netzwerk herscht. (ISA-CTRL<->Fritz Box 7050<->(WLAN)<->PC) Allerdings lässt die Karte sich nicht anpingen und nach kurzer Zeit erscheint "Overrun" im Terminal. Mit einen Netzwerksniffer zeigt er mir auf den ARP Request "Who Has 192.168.1.66" keine Antwort an. Hat irgendjemand eine Idee? A.K. vielleicht? PS: Hab beim kompilieren USE MMC, FTPD, TELNET auf 0 gesetzt MyMAC gelassen wie es ist und MYIP aud 192.168.1.66 eingestellt
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.