mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Webserver 3C5x9 I/O-Adresse


Autor: Wolfram Hildebrandt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Wie lautet die I/O-Adresse für ISA-Netzwerkkarten für den Webserver von 
mikrocontroller.com bei 3Com Netzwerkkarten?

Die Realttekkarten müssen auf 0x300 stehen.
Wie sieht es mit den 3C5x9 Karten von 3Com aus?

Ich bekomme zur Zeit gar keinen Zugriff auf die Karte. Die steht bei mir 
momentan auf 0x300.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht nicht jede Version der 3c509, die B-Version geht, die A-Version 
nicht. Ich meine auch, dass man das DOS-Config-Programm bemühen muss, 
non-PNP oder so.

Autor: Wolfram Hildebrandt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe eine 3C509B-TPO-Karte.
Die Karte muss pnp deaktiviert haben, JR45 eingeschaltet, IRQ egal (da 
alle Pins verbunden sind). Das ist klar.

In den Kommentarzeilen wird von Adresse 0x310 geredet, aber auch von 
einem soweit ich weiss, nicht verwendeten Interrupt. Von daher zweifelte 
ich.

Leider kann ich die Karte nicht selber umstellen, weil meine ISA-Rechner 
nicht mehr laufen oder irgendwo durch Null teilen.
Die I/O-Adresse kann ich auch nicht mehr unter Windows umstellen, da der 
pnp-Modus deaktiviert ist.

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die I/O Adresse ... ist etwas kompliziert (und das Ganze ist auch schon 
etwas her).

Erst mal die Phasen der Initialisierung. Die sind zwar nicht (mehr) 
besonders  sinnvoll abgestuft da sie aus den Zeiten der allerersten 
Versuche stammen, können aber helfen den Code zu unterteilen.
Phase 1.  Vorbereiten der I/O Register des AVR.
Phase 2.  Hardware Reset auf den "virtuellen" ISA Bus geben.
Phase 3.  Warten bis Karte Resettet hat.
Phase 4.  Die Karte wird "aktiviert".
Phase 5.  Auslesen der MAC Adresse und I/O Adresse aus dem 
Karten-EEPROM.
Phase 6.  Mit der I/O Adresse programmieren.
Phase 7.  Auslesen der hersteller-ID und Karten-ID.
Phase 8.  War mal debug...
Phase 9.  Programmieren der Karte mit der aus dem EEPROM gelesenen
          MAC Adresse.
Phase 10. Vorbereiten der Karte auf Empfang und Senden.
Phase 11. Sendden und Empfangen freigeben.

Aktivieren der Karte (Phase 4):
Nach dem Reset/Power on wartet die Karte darauf, dass ein bestimmtes 
Datenmuster auf den ID-Port geschriben wird.
Dieser Port ist der Port im I/O Bereich 1x0h auf den als letztes eine 
00h geschrieben wurde (in activate_3c5x9_nic passiert das gleich zwei 
mal).
In der Schleife wird das Bytemuster erzeugt und ausgegeben.
/*
 * Die Netzwerkkarte muss erst "aktiviert" werden damit sie, 
 * und nur sie auf dem
 * Port 0x1x0 Befehle entgegennimmt und Informationen zurückgibt.
 * Dazu muss ein bestimmtes Bytemuster auf den Port (ID_PORT) im Bereich
 * 0x1x0 (x=1...F) ausgegeben werden, auf den als letztes der Wert NULL
 * geschrieben wurde.
 */
static void activate_3c5x9_nic(void)
{
  uint16_t id;
  uint16_t loop;
  // ----------------
  // Write ID loop
  id   = 0xFF;
  outportb(ID_PORT, 0);     // Enable IDport
  outportb(ID_PORT, 0);     // Enable IDport
  for(loop=0; loop < 255; loop++)
  {
    outportb(ID_PORT, id);
    id <<= 1;
    if(id & 0x100)
       id ^= 0xCF;
  }
}
Nach dem Aktivieren kann über den ID-Port das EEPROM der Karte auslesen.
Das Auslesen erfolgt bitseriell.
/*
 * Um von ID_PORT EEPROM-Daten zu lesen müssen diese 16-bit Werte nach
 * Anforderung in einer Schleife vom Bit #0 des ID-PORT eingelesen werden.
 * Höchstwertiges Bit zuerst.
 */
uint16_t readLoop(uint8_t eadr)
{
    uint8_t loop;
    uint16_t st = 0;  // to keep the compiler happy

    // Fordere NIC-Controller auf die Daten von der 
    // EEPROM Adresse eadr zu lesen.
    outportb(ID_PORT, 0x80+eadr);
    delay(100);     // Warte bis Daten im EEPROM Datenregister
                    // zur Verfügung stehen

    for(loop = 0; loop < 16; loop++)
    {
        st <<= 1;
        st |= inportb(ID_PORT) & 1;
    }
    return st;
}
Das setzten der I/O-Adresse auf welche die Karte dann endgültig hört 
erfolgt auch über den ID-Port.
    // Setze Basis I/O Adresse auf 0x310.
    // "Activate the adapter at the preconfigured 
    // I/O base address and return to the ID_WAIT state."
    outportb(ID_PORT, 0xE0+((0x310-0x200)>>4));  // 0F1H für 310H
    outportb(ID_PORT, 0x0);

Genauers aus dem Datenblatt zu den 3c5x9b Karten.
Gibt z.B. hier (einfach nach 3c5x9b.pdf suchen).

http://www.janw.dommel.be/PIC18F452_3COM_3C509B_Et...

P.S.
To make the attorney/prosecutor happy...
Das ist 1. nicht meine HP und habe diese URL angegeben weil sie die 
erste war die auf ein Suchanfrage von einer Suchmaschine im Internet 
zurückgeliefert wurde. 2. Ich habe keinerlei Informationen über weitere 
auf dieser Seite vorhandenen oder verlinkten Daten. 3. Falls diese Daten 
gegen geltendes Recht verstoßen sollten, distanziere ich mich explizit 
davon.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus der Firmware 1.39 Datei 3c5x9.c Zitat:

Auf dem AtMega32 Board von Holger Buss.

Auftrennen der Verbindung von A9 mit A8 (ISA Slot Pin A22-A23, Lötseite)
und verbinden mit A4 (ISA Slot Pin A27, Lötseite).
Wenn A9 mit A4 verbunden ist, dann ist der
ID-Port der 3c5x9 = 0x100 und der Datenport = 0x310

Ansprechen des IDPorts über Adresse 0x00.
Ansprechen der Datenregister über Adresse 0x10-0x1F.

Die Karte muss vorher mit 3c5x9cfg.exe konfiguriert sein.
Aktuelle Einstellungen: INT3, I/O 310H, TP, PnP aus, Full-Duplex aus.

Autor: Elektrikser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieses Zitat habe ich in einem anderen Forum auch schon gepostet. 
Anscheinend hat es dem TO nicht geholfen...

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die I/O kann im Quellcode über den IDPort (fast) beliebig zwischen 0x200 
und 0x3F0 gelegt werden. Welche gehen steht im Datenblatt (Siehe Oben).
Änderung: Einfach 0x310 durch den gewünschten Wert ersetzen.
#define IOPORTADDR 0x310

  // Setze Basis I/O Adresse auf IOPORTADDR.
  // "Activate the adapter at the preconfigured 
  // I/O base address and return to the ID_WAIT state."
  outportb(ID_PORT, 0xE0+((IOPORTADDR-0x200)>>4));  // z.B. 0F1H für 310H
  outportb(ID_PORT, 0x0);


    Das DOS-Konfigurationsprogramm schreibt nur in das Karten-EEPROM.
    Man braucht es nicht!

Die daraus resultierenden notwendigen Änderungen des restlichen Codes 
kann ich Euch aber auf die Schnelle nicht sagen.

Autor: Wolfram Hildebrandt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm. Wenn die IO-Adresse erst ab



  // Setze Basis I/O Adresse auf IOPORTADDR.
  // "Activate the adapter at the preconfigured
  // I/O base address and return to the ID_WAIT state."
  outportb(ID_PORT, 0xE0+((IOPORTADDR-0x200)>>4));  // z.B. 0F1H für 
310H
  outportb(ID_PORT, 0x0);

hier interesseant ist, dann wird es erst mal weitere fehler geben.

Bei mir hört es früher schon auf und zwar hier:

    printf_P(PSTR("Phase 3\n"));

    // Erst mal warten, nic initialisiert sich
    delay(100);

    printf_P(PSTR("Phase 4\n"));

    // Aktivierungssequenz schicken
  activate_3c5x9_nic();

    printf_P(PSTR("Phase 5\n"));

  // read the mac address of this card from eeprom address 10,11, and 12
    st = readLoop(10);
    printf_P(PSTR("node %02X-"),st);

    // Every nic i have seen has "00" in the msb mac field
    if((st & 0xff00) != 0)      // no nic, i guess
         return 1;



Es wird Phase5 Node0xFFFF oder so ähnlich ausgeben.

Wenn er bis hier nur aus dem EEPROM ließt, funktioniert das wohl erst 
mal nicht. Auf µC.com wird die Hardwareanpassung beschrieben. Demnoch 
soll (und habe) ich nicht nur:

"Auftrennen der Verbindung von A9 mit A8 (ISA Slot Pin A22-A23, 
Lötseite)
und verbinden mit A4 (ISA Slot Pin A27, Lötseite)."

sondern auch noch die zweite Verbindung zum ATmega32 trennen.
Hat das Einfluss auf das EEPROM?

Autor: Wolfram Hildebrandt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die Widersprüche zur Layoutrennung habe ich in ein PDF gepackt und 
angehängt.

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann wird evtl. die I/O-Adresse 0x100 nicht richtig auf den "AT-Bus" 
gelegt.
0x1x0 (IDPort) ist notwending um die eigentlich Adresse setzen zu 
können.

Legende: A=1, a=0
0x100 = Nur Adressleitung A8 = 1
0x310 = A9, A8 und A4 = 1


Zum Nachmessen für 0x100 in init_3c5x9 vor der Ausgabe des Textes 
"printf_P(PSTR("Phase 2\n"));" eine Endlosschleife einbauen und dann die 
Adressleitungen mit einem Multimeter nachmessen.

Zum Testen ob 0x3100 richtig angelegt wird vor die Enlosschleife ein
"    PORT_REGISTER(0x310);" eintragen und messen. Erst dann muss man 
weitersehen ob RD und WR richtig anliegen. Ich tippe stark auf ein 
Hardwareproblem (Brücke oder Unterbrechung).

Autor: Wolfram Hildebrandt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu dem PDF von mir: Der bei µC.com zusätzlich getrennte Anschluss ist 
nur der REF-Pin. Das spielt also hierbei wohl keine Rolle. Der ADC wird 
ja erst später verwendet.

--
@ Werner B.
Ich werde das Layout komplett prüfen und deine Vorschläge nachmessen.

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Layout:

Du musst BEIDE trennen (hat mich einige Zeit geköstet das ohne Layout im 
bestückten Zustand rauszufinden).

Autor: Wolfram Hildebrandt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, die sind leider bei mir schon getrennt.
Ich merke gerade, dass mein Brenner in Köln ist und ich 40km davon 
entfernt bin. Werde das erst nächste Woche testen können. Ich verspreche 
mir davon aber nicht viel, da dann eigentlich nur der mega32 defekt sein 
könnte.

Ich habe hier noch eine RTL8019AS Karte mit EEPROM herumliegen.
Aber der Duron findet die Karte mal wieder nicht.
Ich habe bisher 5 Netzwerkkarten gekauft.

Ist die RTL8019AS unproblematischer?

Autor: Wolfram Hildebrandt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt nach Wochen endlich die Messungen ausgeführt.
Der ID-Port wird richtig angelegt, aber der PORTC funktioniert nicht 
richtig.
Bit 4,5,6 sind immer auf 5V.
Werde den µC nächste Woche einmal austauschen.
Wie der jetzt zerstört wurde, kann ich mir nicht erklären. Ich messe 
lieber noch einmal die ganze Schaltung durch.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jaja, das gute alte Datenblatt hat Antwort.
Du musst die JTAG-Funktion der Pins abschalten, dann verhalten sie sich 
wie ganz normale Pins.

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.