Forum: Mikrocontroller und Digitale Elektronik NE2000-NIC im 16bit-Mode


von Jens (Gast)


Lesenswert?

Hallo zusammen,

ich möchte eine NIC mit Realtek 8019AS an einen 16bit-Controller (M16C)
anschliessen. Da erscheint es naheliegend, den 16bit-Datenbus
auszunutzen. Nur erschließt sich mir dabei noch nicht ganz die
geänderte Funktionsweise, wenn die Karte im 16bit-Mode arbeitet:

 - greife ich mit einem word-Befehl auf zwei Register
   gleichzeitig zu (was ja nicht wirklich ein Gewinn wäre)?
 - liefert der Remote DMA Port seine Daten als word aus
   und nimmt sie entsprechend an (das wäre allerdings von Vorteil,
   weil die Anzahl der Zugriffe halbiert würde)?
 - wie funktioniert ein byte-Zugriff auf eine ungerade Adresse,
   d.h. funktioniert er überhaupt noch?

Der M16C arbeitet im 16bit-Mode, die Adress-Leitungen sind (bisher) 1:1
angeschlossen, /AEN wird von einem /CS des M16C erzeugt. Der Prozessor
hat einen /WRL- und einen /WRH-Ausgang.

Klar, ich kann es ausprobieren, mag aber meinen Fädel-Aufbau nicht
zweimal machen :-)

Vielen Dank für Eure Hilfe!

Jens

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

da bin ich wieder - und ich habe zweimal gefädelt...

Aber jetzt läuft die Karte und auch einen uIP habe ich auf dem M16C am
Laufen.

Falls es irgendwen interessiert, anbei die Anschlußbelegung. Bitte auf
die Kommentare achten. Es funktioniert sowohl im 8bit- als auch im
16bit-Mode der Karte mit derselben Belegung. Der Trick ist das
Verschieben der Adressleitungen. Wahrscheinlich ein alter Hut, aber für
mich als 8-Bitter doch etwas Besonderes.

Die Verwendung von 16bit lohnt mehr als ich erwartet habe: Die
Antwortzeit eines 1300Byte-Ping sinkt von 10 auf 5ms.

Der Device-Treiber (auf der Basis von Murray R. Van Luyns 8051-Port)
sieht noch aus wie Kraut und Rüben, aber wenn jemand dran interessiert
ist...ein Grund zum Aufräumen.

Gruß

Jens

von Alex (Gast)


Lesenswert?

Würde mich für den Code interesieren!

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hier jetzt also der Code zur Ansteuerung der Karte mit obiger
Anschlußbelegung (Die Excel-Tabelle stammte übrigens ursprünglich von
Ulrich Radig).

Die ganze Sache läuft jetzt seit zwei Tagen, aber sehr stabil.

Für das Verständnis des Ganzen ist unbedingt die uIP-Doku notwendig,
die Software ist voll auf diesen TCP/IP-Stack ausgelegt - sie ist eine
Anpassung des 8051-Ports von Murray R. Van Luyn.

Mit ein paar Änderungen an den verwendeten globalen Puffervariablen ist
aber sicherlich auch ein anderer Einsatz möglich.

Falls von Interesse: Die Anpassung von uIP auf den M16C war
unproblematisch, wenn man von einer gewissen Einarbeitungszeit absieht.
Das Ergebnis ist allerdings noch nicht veröffentlichbar, dazu ist noch
zu viel Test-Schrott in den Dateien...

Gruß,

Jens

von Alex10178 (Gast)


Lesenswert?

Bei mir kommt nur Müll aus den Registern!
Kannst du mir mal bitte deinen kompletten Code geben ?

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Alex,

ich habe heute versucht, die NIC an einem M16C/62A (30624) zum Laufen
zu bringen. Lief nur sehr bescheiden und selten.

Die Ursache liegt im Timing: Der bisher verwendet M16C/62P (30626)
erlaubt trotz höherem Bustakt (12 MHz Quarz, PLL*2) durch die bis zu
drei Waitstates am CS ein langsameres Ansprechen als der 62A, der nur 1
WS unterstützt und mit 16MHz lief.

Zunächst mit BCLK = f2, also 8MHz, und jetzt mit 12MHz-Quarz und wieder
BCLK = f1 läuft es wieder stabil wie am anderen Prozessor. Der
generierte Bustakt darf also offensichtlich 6 MHz nicht überschreiten.

Ein Anschauen der Register im KD30 hat dieses Dilemma übrigens nicht
verraten - ok, ich habe nicht Bit für Bit kontrolliert.

Vielleicht ist Dir und anderen damit geholfen...

Gruß

Jens

P.S. Beim Fädeln der Karte ist die weiter oben schon einmal
veröffentlichte Excel-Tabelle für den Anschluß noch etwas verbessert
worden, irgendwie fehlten u.a. die Datenleitungen D8-15. Hier also noch
einmal und wohl auch richtig, denn danach habe ich gebaut.

Ich verwende IRQ3, im Prinzip könnten alle parallel geschaltet werden.

von Johann (Gast)


Lesenswert?

Hallo,

experimentiere gerade mit dem RTL8019AS in Verbindung mit einem
PIC18F458.
Benutze die Adressleitungen 0-4 sowie die Datenleitungen 0-7.
Die Register lassen sich alle beschreiben sowie Lesen.
Nun möchte ich gerne den Buffer auslesen/beschreiben, verstehe
das ganze mit dem Remote DMA Port nicht so ganz.
Kann mir jemand weiterhelfen?
Gruß
Johann

von Jens Mundhenke (Jensbert) (Gast)


Lesenswert?

Hallo Johann,

schaue Dir doch den Treiber-Code aus dem früheren Beitrag an.

Da kannst Du sehen, dass es zwar DMA heisst, es aber eigentlich nur um
das Auslesen eines Registers geht. Ich vermute der Name kommt daher,
dass der Prozessor den Transfer per DMA durchführen soll.

Weitergehende Informationen zu den Registern und ihrer Bedienung
findest Du nicht im RTL8019AS-Manual, sondern in
NE2000-Beschreibungen.

Gruß

Jens

von Hans M. (hermes)


Lesenswert?

Hallo Jens,

danke für deine Antwort.

was mich ein wenig irritiert ist der Ausdruck DMA. Mir fällt dazu
der Zugriff von zwei Prozessoren auf ein und dem selben Speicher ein.
Der Prozessor der auf den Speicher zugreifen möchte teilt dies
dem anderen mit einem DMA Request mit, nach einem ACK des zweiten
Prozessor der dann seine Daten sowie Adressleitungen in den
Tristate versetzt hat kann dann der anfordernde Prozessor auf den
Speicher zugreifen.
Doch dieses ist beim RTL8019 so nicht der Fall.

Im Datasheet des RTL8019 wird dieses Thema wirklich nicht sehr
ausführlich behandelt.

Also ich muss zunächst die Register RSAR0,1 mit der (Page)Adresse der
Bufferposition initialisieren von der ich lesen möchte.

Dann sollte ich noch das ByteCount RVCR0,1 Register mit der Anzahl
der Bytes die ich lesen/schreiben möchte initialisieren(Diese Register
kann ich mit Werten beschreiben, nach dem auslesen steht aber immer
was mit 0x50 0x80 drin).

Wo kann ich den nun die Daten lesen bzw schreiben, aus dem Remote
DMA Port (0x10-0x17)?

Muss ich die Register RSAR0,1 nach jedem lesen/schreiben erhöhen?

Wozu dient das Register FIFO.

Gruß und Danke
Johann

von Hans M. (hermes)


Lesenswert?

Hallo Jens,

//-----------------------------
//MAC Header
//-----------------------------
0xff,0xff,0xff,0xff,0xff,0xff,  //Destination Adress ->Unbekannt
0x00,0xaa,0x00,0x63,0xc6,0x09,  //Source Adress
0x08,0x06,            //Protocoll type
//------------------------------
//ARP
//------------------------------
0x00,0x01,            //Hardware Adressspace
0x08,0x00,            //Protcol adress space
0x06,              //Lenght Hardware Adress MAC
0x04,              //Lenght Protocol Adress IP
0x00,0x01,            //Opcode 1=Request 2 = Reply
0x00,0xaa,0x00,0x63,0xc6,0x09,  //Source Adress MAC
192,168,2,133,              //Source IP 192.168.2.133
0x00,0x00,0x00,0x00,0x00,0x00,  //Target MAC
192,168,2,100,          //Target IP

So ist es richtig, zuerst der Mac Header dann das ARP Packet.
Ein ARP Request an meinen Rechner läuft ebenfalls, die IP sowie
die Mac tauchen mit ARP -a bei dem Rechner auf.

Das ganze läuft ganz gut bei mir Zuhause (DSL Router mit einem Rechner)

Versuche ich das ganze auf der Arbeit im Netz, blinkt die LED der
Karte ununterbrochen und im Receiver Status wird ständig
Collision angezeigt.
Sonst funk garnichts.

von Hermes (Hans Muster) (Gast)


Lesenswert?

Scheisse, Login Daten vergessen...

Hier super Source Code zum RTL8019.

http://hubbard.engr.scu.edu/embedded/avr/avrlib/docs/html/rtl8019_8c.html

von Alex (Gast)


Lesenswert?

HAllo Jens

Was hast du mit dem EEprom auf deiner Netzwerkkarte gemacht??

von Jens M. (jensbert)


Lesenswert?

Hallo Alex,

gar nichts! Es ist noch drauf. Ich habe versucht, die Karte mit einem
DOS-Tool umzustellen, aber das hat irgendwie nich tgeklappt. Da habe
ich sie einfach gelassen wie sie war.

Mittelfristig möchte ich gern die MAC-Adresse auslesen, um sie im
Programm zu setzen, aber das habe ich noch nicht geschafft (aber auch
erst kurz versucht...)

73 de Jens

von Ludwig W. (lordludwig)


Lesenswert?

versuch mal die karte mit windoof einzustellen. Mit windows98 gehts
super bei mir

von Alex10178 (Gast)


Lesenswert?

Hallo  Jens

Leider bekomme ich keine Antwort von der Karte (beim ping)!
Habe natürlich die IP Adresse und Netzmaske umgestellt in der Header
Datei!
Er läuft immer durch die uip-Loop Funktion!

von Alex10178 (Gast)


Lesenswert?

Hallo Jens

Geht nicht!!!
Keine Antwort von dem  RTL8019as >Chip<

Kannst du im KD30 die Registerinhalte der Karte sehen??

Danke

von Jens M. (jensbert)


Lesenswert?

Hallo Alex,

ja, klar, die Karte ist im KD30 zu sehen. Die Registerinhalte sind
nicht immer sehr sinnvoll (mag mit 8bit/16bit-Zugriff zusammenhängen),
aber es ist deutlich zu sehen, dass hier nicht nur Rauschen ausgelesen
wird. Außerdem wiederholt sich der Inhalt in kurzen Abständen (16Byte?,
32Byte? Habe eben kein Testsystem zur Hand, um es genau zu sagen).

Dieses Ergebnis ist sicherlich erste Voraussetzung für das
Funktionieren der Software...

Jens

von Alex10178 (Gast)


Lesenswert?

Bei mir stehen nur FF`s drin!
Was kann das sein??

Danke

von Alex10178 (Gast)


Lesenswert?

Hallo Jens

Brauche dringend Hilfe!!! :-)
Sind 4,7kOhm an CS3 ok?
Danke

von Jens Mundhenke (Jensbert) (Gast)


Lesenswert?

Hallo Alex,

wenn Du die Karte gar nicht siehst, kann es natürlich viele Gründe
dafür geben:
 - Karte von der Basisadresse her nicht richtig eingestellt
 - bei Anschluß irgendetwas verdreht usw.
 - Unbenutze Adressleitungen nicht auf GND gelegt
 - den Prozessor nicht in den Modus für den ext. Speicher gestellt
 - zu wenige Waitstates auf CS3 oder nicht aktiviert
 - Reset-Leitung der Karte (P6.1 in meinem Plan) aktiv
 - Spannungsversorgung der Karte
 - Karte defekt (naja)

Wenn die Karte am CS3 hängt, der ja von 0x4000 bis 0x7FFF geht (hmmm,
evtl. noch mal prüfen, habe kein Datenblatt zu Hand), dann sollte in
diesem ganzen Bereich irgendwo etwas auftauchen, wenn es an der
Basis-Adresse der Karte liegt.

4k7 als Pullup sind ok, könnte auch größer sein. Hast Du ein Scope und
kannst CS3 messen? Und Aktivitäten auf dem Daten- und Adressbus?

Bessere Tipps habe ich auch nicht zur Hand.

Gruß

Jens

von Alex10178 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Jens

 - Karte von der Basisadresse her nicht richtig eingestellt
   (keine Ahnung)
 - bei Anschluß irgendetwas verdreht usw.(alles geprüft!!! i.O)
 - Unbenutze Adressleitungen nicht auf GND gelegt (alles I.O)
 - den Prozessor nicht in den Modus für den ext. Speicher gestellt i.O
 - zu wenige Waitstates auf CS3 oder nicht aktiviert
   (ein CS3w=1 extra)

 - Reset-Leitung der Karte (P6.1 in meinem Plan) aktiv (ein)
 - Spannungsversorgung der Karte
   (i.O LED geht korrekt an nach dem Reset)
 - Karte defekt (naja)?????

So sieht der KD30 Memory nach dem einschlaten aus!!!
Bild 1


So sieht der speicher noch einen Durchlauf aus!!!
Bild 2

von Alex10178 (Gast)


Angehängte Dateien:

Lesenswert?

Bild 2

von Jens M. (jensbert)


Lesenswert?

Hallo Alex,

Du hast den M16C/62A, richtig? Und wahrscheinlich PM13=1, so dass der
CS3-Bereich bei 0x6000 beginnt? Wenn die Basisadresse der Karte 0x300
ist, dann sollte sie erst bei 0x6600 auftauchen. Alternativ kannst Du
A6 und A7 der Karte auf GND und A8 und A9 auf VCC legen, dann ist die
Adresse immer 0x300 und die Karte taucht alle 0x80 Bytes wieder auf. Im
KD30 ist übrigens jedes zweite Byte 0xFF, wegen des Byte-Zugriffs, also
nicht wundern.

Die 0xFFs bei Dir sehen nicht so schlecht aus, zumindest ist der ext.
Speicher aktiv...

CSW3 = 1 schaltet den Wait-State aus! Und wie oben beschrieben:
Entweder einen 12MHz-Quarz verwenden oder den Bus-Takt mit CM06=0,
CM16=1 und CM17=0 durch zwei teilen.

Viel Glück, es wird schon noch...

Jens

von Sascha (Gast)


Lesenswert?

abo

von Alex10178 (Gast)


Lesenswert?

Hallo Jens


Mein Startup File sieht so aus!! µController ist ein M162c62
(M3024FGAFP)

******************************************************************
  ldc  #istack_top,  isp  ;set istack pointer
  mov.b  #03,00Ah                ;protection register
  mov.b  #05h,004h    ;set processer mode to mem

  mov.b  #08h,005h    ;no internal expansion
  mov.b  #08h,006h    ;CM16, CM17 valid
  mov.b  #40h,007h    ;no main clock division

  mov.b  #0fh,008h    ;enable chip selects, wait
  mov.b  #95h,01Bh    ;chip select 3: 3 waits (for
  mov.b  #00h,25Eh    ;MJ: Peripheral clock select

  mov.b  #00,00Ah                ;protection register

  ldc  #0080h,  flg
  ldc  #stack_top,  sp  ;set stack pointer
  ldc  #data_SE_top,  sb  ;set sb register
  ldintb  #VECTOR_ADR

*********************************************************************
Ist das so OK??

Wenn ich den KD30 starte steht ab Adresse 6000h  00 07
Wenn ich dann die Zeile Set Prozessor ausführe steht überall FF FF
drin!!!!

?????????????????????????????????????????????????

von Alex10178 (Gast)


Lesenswert?

Ich habe keine Idee mehr!!
Habe jetzt sogar die A5-A7 auf GND gelegt und A8-A9 auf Vcc

Nach dem einstellen der Prozessor Modes steht überall ab 6000h
FF FF drin!!!!

HOLD und RDY liegen über 4,7K an VCC
CS3 liegt auch über 4,7k an VCC
NMI liegt über 100k an Vcc

Reset geht auch richtig!(p6_1)

von Alex10178 (Gast)


Lesenswert?

Brauche Hilfe!

von Alex10178 (Gast)


Lesenswert?

Hilfe!!!

von SiO2 (Gast)


Lesenswert?

Alex, dann ruf 110

von Jens M. (jensbert)


Lesenswert?

Hallo Alex,

für mich sieht es goldrichtig aus, deckt sich bis auf die Halbierung
des BCLKs mit meiner Initialisierung - Du benutzt also wohl weiter den
16MHz-Quarz.

Hmmm, wie jetzt weitersuchen? Du hast kein Scope, nehme ich an. Ich
würde versuchen, eine Programmschleife zu schreiben, die die Karte sehr
schnell hintereinander anspricht, z.B. schreibend abwechselnd 0xff und
0x00. Dann solltest Du an einem Multimeter sehen, ob/dass sich eine
Spannung irgendwo um 2,5V an den Daten-Pins einstellt. Durch Variation
der Adressen und der Daten kannst Du Unregelmaessigkeiten an den Pins
feststellen. Verlangt aber etwas Nachdenken und Probieren.

Dass Du nur 0xFF liest, deutet aber eher auf ein Komplett-Versagen hin.
Wenn wir die Software mal ausschliessen - schliesslich besteht sie ja
eigentlich nur aus der Initialisierung -, erscheint die Hardware der
wahrscheinlichere Kandidat. Leuchtet eigentlich die LED an der
NW-Karte, wenn Du ein Kabel zu einem Switch reinsteckst? Das geht
nämlich so ziemlich immer, wenn die Karte unter Spannung steht.

Beliebt ist das Vertauschen der beiden Bus-Seiten, also A-C gegen B-D.
Die A-C-Seite ist die Platinen-Oberseite. Verzählen kann man sich
natürlich auch, ist schon ganz anderen passiert... Hast Du gesehen,
dass B14 und B15 auf 5V liegen?

So langsam gehen mir die Ideen aus...

Jens

von Hermes (Gast)


Lesenswert?

"Was hast du mit dem EEprom auf deiner Netzwerkkarte gemacht??"

Ich habe das Ding einfach ausgelötete und mit Gallep neu programmiert.

Habe keine andere Möglickeit gefunden den Controller in den
"FullDuplex
Mode" zu bringen.

Es scheint mir als ob man die SPI Schnittstelle zum Eeprom
Softwaremäßig selber programmieren muss.

von Sascha (Gast)


Lesenswert?

Wurde das Projekt eigentlich weitergeführt??

Mfg Sascha

von Alex10178 (Gast)


Lesenswert?

Projekt ruht zur Zeit!!

Geht nächsten Monat weiter!! brauche nur noch eine neue Netzwerkkarte
mit RTL8019as Chipsatz!!

Und weiter ..........   :-)

von Sascha (Gast)


Lesenswert?

Da hätte ich ein paar :).
Gibt es denn einen neueren Code als den weiter oben im Thread???

Mfg Sascha

von Alex10178 (Gast)


Lesenswert?

Hallo Sascha

Was möchtest du für ein Paar mir Versandkosten haben??

Vielen Dank

MFG
Alex

von Sascha (Gast)


Lesenswert?

@Alex

Hast ne Mail....

Mfg Sascha

von Alex10178 (Gast)


Lesenswert?

Hast du 2 Karten gefunden?

MFG
Alex

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.