mikrocontroller.net

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


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde mich für den Code interesieren!

Autor: Jens (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Alex10178 (Gast)
Datum:

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

Autor: Jens (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens Mundhenke (Jensbert) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans Muster (hermes)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans Muster (hermes)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hermes (Hans Muster) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Scheisse, Login Daten vergessen...

Hier super Source Code zum RTL8019.

http://hubbard.engr.scu.edu/embedded/avr/avrlib/do...

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HAllo Jens

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

Autor: Jens Mundhenke (jensbert)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ludwig Wagner (lordludwig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuch mal die karte mit windoof einzustellen. Mit windows98 gehts
super bei mir

Autor: Alex10178 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Alex10178 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jens

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

Kannst du im KD30 die Registerinhalte der Karte sehen??

Danke

Autor: Jens Mundhenke (jensbert)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex10178 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir stehen nur FF`s drin!
Was kann das sein??

Danke

Autor: Alex10178 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jens

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

Autor: Jens Mundhenke (Jensbert) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex10178 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Alex10178 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bild 2

Autor: Jens Mundhenke (jensbert)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
abo

Autor: Alex10178 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!!

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

Autor: Alex10178 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Alex10178 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brauche Hilfe!

Autor: Alex10178 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hilfe!!!

Autor: SiO2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex, dann ruf 110

Autor: Jens Mundhenke (jensbert)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hermes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wurde das Projekt eigentlich weitergeführt??

Mfg Sascha

Autor: Alex10178 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Projekt ruht zur Zeit!!

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

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

Autor: Sascha (Gast)
Datum:

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

Mfg Sascha

Autor: Alex10178 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sascha

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

Vielen Dank

MFG
Alex

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Alex

Hast ne Mail....

Mfg Sascha

Autor: Alex10178 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du 2 Karten gefunden?

MFG
Alex

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.