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
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
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
Bei mir kommt nur Müll aus den Registern! Kannst du mir mal bitte deinen kompletten Code geben ?
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.
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
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
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
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.
Scheisse, Login Daten vergessen... Hier super Source Code zum RTL8019. http://hubbard.engr.scu.edu/embedded/avr/avrlib/docs/html/rtl8019_8c.html
HAllo Jens Was hast du mit dem EEprom auf deiner Netzwerkkarte gemacht??
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
versuch mal die karte mit windoof einzustellen. Mit windows98 gehts super bei mir
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!
Hallo Jens Geht nicht!!! Keine Antwort von dem RTL8019as >Chip< Kannst du im KD30 die Registerinhalte der Karte sehen?? Danke
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
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
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
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
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!!!! ?????????????????????????????????????????????????
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)
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
"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.
Projekt ruht zur Zeit!! Geht nächsten Monat weiter!! brauche nur noch eine neue Netzwerkkarte mit RTL8019as Chipsatz!! Und weiter .......... :-)
Da hätte ich ein paar :). Gibt es denn einen neueren Code als den weiter oben im Thread??? Mfg Sascha
Hallo Sascha Was möchtest du für ein Paar mir Versandkosten haben?? Vielen Dank 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.