mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 3Com 3C509B-TPO REV-A


Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich baue mir den Webserver von mikrocontroller.com zusammen und muss 
jetzt bei der 3Com Netzwerkkarte die I/O Port und IRQ einstellen.

Ich habe mir eine Boot-Diskette mit MS-DOS 6.22 gebaut und die 
3c5x9cfg.exe auf die Diskette kopiert. Wenn ich die aber ausführe ... 
bekomme ich den Fehler:

A:\3c5x9cfg.exe
Configuration and Diagnostic Program  Version 3.2
Copyright (C) 1991-1999, 3Com Corporation.  All Rights Reserved.


run-time error R6003
- integer divide by 0


Was mache ich falsch?
Kennt einer andere Tricks oder Quellen wie man das einfacher macht? Oder 
was man beachten muss? Danke.

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. http://support.microsoft.com/kb/98760/de

2. Versuch die Karte einfach mal OHNE sie zu konfigurieren. Eigentlich 
schreibt das 3c5x9cfg nur die Parameter ins EEprom der Netzwerkkarte. 
Das Einstellen der Parameter macht dann der Treiber zur Laufzeit.
Evtl. musst du ein paar der (im Grunde genommen überflüssigen Abfragen) 
aus dem Initialisierungscode entfernen.

Überflüssige Teile in 3c90x.c im init_3c5x9() sind z.B.
    // Every nic i have seen has "00" in the msb mac field.
    if((st & 0xff00) != 0)      // No nic, i guess.
         return 1;
Das merkt man dann schon wenn keine Karte da ist. Selber schuld ;-)
    // Prüfung nicht unbedingt notwendig, da die I/O
    // per software (ID_PORT) eingestellt wird.
    if(st != ((0x310-0x200)>>4))  // 0x11
        return 2;
Der hier Prüft ob 310h als IO im EEprom steht. Völlig überflüssig. in 
den folgenden Zeilen wird 310h eingestellt, egal ob's im EEprom steht 
oder nicht!
    // Hole einige informationen von der karte
    st = readreg(0x310);       // Hersteller Kennung
    printf("MfgtID: %04X\n", st);
    if(st != 0x6D50)           // 3Com ?
      return 3;   // no 3com

    // Produktkennung
  st = readreg(0x312);
    printf_P(PSTR("Product ID: %04X\n"), st);
    if(st != 0x9450)
      return 4;   // no 3c5x9
Wenn es keine 3com Karte ist... selber Schuld. Und die Product ID: Ich 
habe hier natürlich auch nicht alle revisionen der Karte rumliegen. Es 
geht auch mit Karten die nicht Revision 9450h sind.

Der Code den es hier zum Download gibt sieht warscheinlich inzwischen 
etwas anders aus, (die Ausschnitte hier stammen aus dem "Urcode") 
müssten aber zu finden sein.

Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Werner B.

erstmal danke für deine Antwort.

Das es ohne Änderung der I/O Ports geht, freut mich. Ich werde es gleich 
mal ausprobieren ... habe noch Probleme den Sourcecode zu kompilieren.


Ich habe hier im Forum gelesen das die A-Version nicht geht.
Ich habe aber die Netzwerkkarte:

3Com 3C509B-TPO REV-A

Also A.

Geht die inzwischen auch?

Hier der Kommentar:
----------------------------------------------------------------------
Autor: A.K. (Gast)
Datum: 16.12.2006 19:33

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: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 3c509B geht, die 3c509 (ohne jeden Zusatz) geht leider aus 
technischen Gründen nicht (einige Register der Karte sind dort nur im 
16-Bit Modus ansprechbar).
Wenn 3c509B draufsteht ist die Chance größer als 90% dass es geht. Alle 
die ich bisher versucht habe (OK nur drei Stück, aber immerhin) sind 
gelaufen.

Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo finde ich die ProduktID meiner Karte?

Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich den Webserver an einem Switch-Router anschließen ... oder geht 
es nur mit einem CrossOver Kabel direkt mit dem PC?

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ProduktID : Aus dem EEProm auslesen.

Das ist eine ganz normale 10 MBit Netzwerkkarte. Schließe sie an wo eine 
10MBit Karte anschießbar ist. Allerdings nur TP, kein Koax oder AUI.

Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ES IST VOLLBRACHT!!! ES funktioniert!! Ohne I/O Ports einstellen.

Danke dir Werner B.

Ein Problem habe ich beim Clock, habe ich einfach ausgeschaltet.
Trotzdem wüsste ich gerne warum.

clock.o: In function `Start_Clock':
e:\elektronikz\sourcecodecpp_v1.39_mmc_ib\source/clock.c:46: undefined 
reference to `timer_enable_int'
make.exe: *** [main.elf] Error 1

Autor: Richard Brose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Fehler kriege ich wenn ich mmc mit kompilieren will :-(

Compiling: httpd.c
avr-gcc -c -mmcu=atmega32 -I. -g -Os -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=httpd.lst  -std=gnu99 httpd.c -o httpd.o
In file included from main.h:17,
                 from httpd.c:8:
c:/programme/winavr/bin/../avr/include/avr/signal.h:36:2: warning: 
#warning "This header file is obsolete.  Use <avr/interrupt.h>."
httpd.c: In function 'httpd':
httpd.c:73: warning: pointer targets in passing argument 1 of 'printf' 
differ in signedness
httpd.c:85: warning: pointer targets in passing argument 5 of 
'Search_File' differ in signedness
httpd.c:135: warning: pointer targets in passing argument 1 of 
'Write_Ethernet_Frame' differ in signedness
httpd.c:155: warning: pointer targets in passing argument 2 of 
'Read_File' differ in signedness
httpd.c:160: error: invalid lvalue in assignment
httpd.c:180: warning: pointer targets in passing argument 1 of 
'Write_Ethernet_Frame' differ in signedness
make.exe: *** [httpd.o] Error 1



Was gefällt ihm da nicht?

            (unsigned long) tcp_socket->File_Size = (unsigned long) 
tcp_socket->File_Size - 512;

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicherlich das Du im falschen Forum fragst!
Wie wäre es, wenn du mal da nachsiehst wo das Projekt herkommt:
http://mikrocontroller.cco-ev.de/forum/topic-311.html

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Richard Brose,

sorry, ich hab' nur den 3c509 Teil verbrochen.

Soweit ich weiss ist 'timer_enable_int' schon seit längerem aus der 
avr-libc rausgeflogen. Keine Ahnung wer noch damit arbeitet. Binde
#include <compat/deprecated.h>
in das clock.c ein, dann sollte es gehen.

Langfristig solltest du den code aber überarbeiten und diese alte 
Funktion ersetzten. Siehe dazu die "obsolete" Funktionen in der 
Dokumentation zur avr-libc. Da steht auch drin was du für die Warungen 
aus httpd.c (mit mmc) ändern musst.

Der Fehler "httpd.c:160: error: invalid lvalue in assignment":
Siehe dazu
Beitrag "use of cast expressions as lvalues is deprecated"
Trifft es zwar nicht 100% aber es ist prinzipiell das gleiche Problem.

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.