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


von Richard Brose (Gast)


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.

von Werner B. (Gast)


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.
1
    // Every nic i have seen has "00" in the msb mac field.
2
    if((st & 0xff00) != 0)      // No nic, i guess.
3
         return 1;
Das merkt man dann schon wenn keine Karte da ist. Selber schuld ;-)
1
    // Prüfung nicht unbedingt notwendig, da die I/O
2
    // per software (ID_PORT) eingestellt wird.
3
    if(st != ((0x310-0x200)>>4))  // 0x11
4
        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!
1
    // Hole einige informationen von der karte
2
    st = readreg(0x310);       // Hersteller Kennung
3
    printf("MfgtID: %04X\n", st);
4
    if(st != 0x6D50)           // 3Com ?
5
      return 3;   // no 3com
6
7
    // Produktkennung
8
  st = readreg(0x312);
9
    printf_P(PSTR("Product ID: %04X\n"), st);
10
    if(st != 0x9450)
11
      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.

von Richard Brose (Gast)


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.

von Werner B. (Gast)


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.

von Richard Brose (Gast)


Lesenswert?

Wo finde ich die ProduktID meiner Karte?

von Richard Brose (Gast)


Lesenswert?

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

von Werner B. (Gast)


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.

von Richard Brose (Gast)


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

von Richard Brose (Gast)


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;

von Mike (Gast)


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

von Werner B. (Gast)


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.

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
Noch kein Account? Hier anmelden.