Archiv verlassen und diese Seite im Standarddesign anzeigen : Netzwerkkarte versaut mir alles!
starkeeper
26.05.2006, 20:37
Hi,
ich habe eine ISA Netzwerkkarte mit RTL8019 und ein Display an meinen PIC angeschlossen.
Netzwerkkarte und Display teilen sich die Datenleitungen. Das funktioniert bzgl. der Netzwerkkarte sehr gut, sie verrichtet ihren Dienst. Das Display kann ich aber nur beschreiben. Sobald ich zum lesen der Displaydaten die Datenleitung im PIC auf Input stelle, produziert die Netzwerkkarte mir einen High-Pegel an allen Input-Pins und versaut alles.
Ist das nun ein Elektronik-Fehler? Also ich habe die ISA-Pins direkt mit dem PIC verbunden, keine Pull-Ups/Downs etc. ebenso die Display-Pins. Oder ist das ein normales verhalten der ISA-netzwerkkarte, ich mein einen Chip-Select wie das Display hat die Karte ja nicht. Aber man kann ja im PC auch mehrere ISA-Karten an einem Bus betreiben.
Hat jemand Tipps oder Ratschläge was ich testen könnte? Bin irgendwie Ratlos.
Schonmal Danke im vorraus!
Gruß starkeeper
Naja, einen direkten CS gibts auf dem ISA-Bus nicht. Wie ich es verstanden habe, werden da nur noch Adressen dekodiert und dann weiß halt die Karte, dass SIE nicht angesprochen wurde und reagiert auf die Daten auf dem Bus nicht. DU kannst ihr halt leider nicht sagen, dass du die Karte nicht anspricht.
Einen Weg muss es aber geben, ansonsten könnte es kein DMA (Direct Memory Access) geben. Hum, ich hab mich mal durchgelesen. Eigentlich müsste es gehen, wenn du den AEN (A11) auf high ziehst. Damit suggerierst du der Karte, dass ein DMA in progress ist und er eigentlich nicht dazwischenfunken.
Quellen:
http://pinouts.ru/Slots/ISA_pinout.shtml
Naja, bin mir nicht sicher, aber vllt. hilft es dir ja ^_^
MfG
Mobius
starkeeper
27.05.2006, 01:35
Naja, einen direkten CS gibts auf dem ISA-Bus nicht. Wie ich es verstanden habe, werden da nur noch Adressen dekodiert und dann weiß halt die Karte, dass SIE nicht angesprochen wurde und reagiert auf die Daten auf dem Bus nicht. DU kannst ihr halt leider nicht sagen, dass du die Karte nicht anspricht.
Einen Weg muss es aber geben, ansonsten könnte es kein DMA (Direct Memory Access) geben. Hum, ich hab mich mal durchgelesen. Eigentlich müsste es gehen, wenn du den AEN (A11) auf high ziehst. Damit suggerierst du der Karte, dass ein DMA in progress ist und er eigentlich nicht dazwischenfunken.
Quellen:
http://pinouts.ru/Slots/ISA_pinout.shtml
Naja, bin mir nicht sicher, aber vllt. hilft es dir ja ^_^
MfG
Mobius
Also auf den ersten Blick hört sich das gut an, wenn ich dann aber auf deiner Seite schaue, steht da:
Address Enable. This is asserted when a DMAC has control of the bus. This prevents an I/O device from responding to the I/O command lines during a DMA transfer. When AEN is active, the DMA Controller has control of the address bus as the memory and I/O read/write command lines.
Für mich hört sich das so an, als würde das dann nur den Adressbus der Karte ausschalten. Die Karte nimmt also keine Befehle mehr entgegen.
Mein Problem entsteht ja, ohne das ich der Netzwerkkarte auch nur einen Befehl sende. Ich müsste also den Datenbus ausschalten.
Das sind dann diese Leitungen: SD0-SD16 (bei mir nur 0-7)
System Data lines, or Standard Data Lines. They are bidrectional and tri-state. On most systems, the data lines float high when not driven. These 16 lines provide for data transfer between the processor, memory and I/O devices.
Die Netzwerkkarte schreibt nur auf den Datenbus, wenn ihre Adresse angesprochen wird. Aus Deiner Beschreibung des Problems schliesse ich, dass Du die Adresse fest verdrahtet hast, so dass sie immer aktiv ist und nur über R/W die Datenrichtung ausgewählt wird. Das kannst Du auch so lassen, denn die besagte AEN-Leitung muss(!) beim Dekodieren der Adresse auch berücksichtigt werden, insofern stimmt Deine Erkenntnis, es handle sich um eine Adressenfreigabe, durchaus. Nur bedeutet eine nicht freigegebene Adressedekodierung am ISA-Bus auch, dass die Bustreiber im hochohmigen Zustand sein müssen. AEN also von Masse abtüdeln und als "Card Select" benutzen, low ist aktiv.
starkeeper
27.05.2006, 12:56
So ich habe jetzt mal den Beipass gelegt und hatte keinen Erfolg. Auch wenn ich AEN auf High ziehe, und dann meinen Datenbus am PIC auf Eingang schalte produziert die Netzwerkkarte ein High-Signal.
Beschreib Deine Schaltung mal genauer. Du hast D0-D7 durch den PIC erzeugt und mit Display und ISA-Karte verbunden. Ferner hast Du die R/W-Leitungen von ISA-Bus und Display mit einem Portpin verbunden. Enable zum Display und AEN liegen auf unterschiedlichen Portleitungen des PIC, während EN zum Display high ist, ist AEN zur Karte auch ganz sicher high (also Adressdekoder inaktiv)? Die R/W-Leitung ziehst Du auf "lesen" und bekommst statt der erwarteten Ausgabe vom Display nur 1en von der ISA-Karte, richtig verstanden? Vielleicht solltest Du das Datenblatt vom Ethernet-Chip mal suchen und konsultieren, der ISA-Bus hat ja auch sein festes Timing, ich bin mir im Moment nicht wirklich sicher, ob die AEN-Leitung sofort wirkt oder erst, nachdem ein Buszyklus abgearbeitet wurde. DMA-Zugriff wird der olle 10Mbit-Chip ja kaum können, dann würde es in der Tat keinen Sinn machen, mit AEN zu arbeiten. Ich würde es mal so versuchen, dass der PIC nicht AEN als Card Select benutzt, sondern eine der Adressleitungen, mit denen sich die Karte ganz sicher deselektieren lässt. Wenn sie zB. auf 300h sitzt, müssen A8 und A9 auf jeden Fall high sein, die anderen Adressleitungen (zumindest die unteren) steuern zum Teil irgendwelche Register, die würde ich in Ruhe lassen. Wenn Du dann mal A9 als Card Select benutzt, sollte es auf jeden Fall funktionieren.
starkeeper
27.05.2006, 13:45
Also ein Bild sagt mehr als tausend Wort, daher hier mal der Schaltplan.
Softwaremäßig habe ich das jetzt alles mal auf ein minimum reduziert um Fehlerquellen ausschliessen zu können. Folgender Code produziert mir einen wechselnden High-Low-Pegel je nachdem ob der PIC nun auf input oder output stellt. Zum testen habe ich nur die Netzwerkkarte auf der Platine stecken. Mit dem Debugger oder dem Voltmeter kann ich das ganze Schauspiel dann beobachten.
CCS:
BYTE data;
output_d(0x00);
output_high(IOW);
output_high(IOR); (auch low-Pegel getestet)
output_high(RST);
delay_ms(2);
output_low(RST);
output_high(AEN);
data=0;
delay_ms(2000);
data=0;
data = input_d();
delay_ms(2000);
output_d(0x0);
delay_ms(2000);
data=0;
data = input_d();
delay_ms(2000);
output_d(0x0);
delay_ms(2000);
data=0;
data = input_d();
Den AEN habe ich auch mal in meinen kompletten netzwerk-code eingearbeitet. Also die Karte kann in der tat nicht beschrieben werden wenn AEN disabled (high) ist. Aber der Effekt das die Datenleitungen auf high gehen sobald ich auf input stelle bleibt. Wenn ich der Karte natürlich einen ordnungsgemässen Read-Befehl sende gehen nicht alle Datenleitungen auf High.
Bisher macht es keinen Unterschied, ob ich die Netzwerkkarte initialisiere oder nicht, daher sollte der obige Code zum testen ok sein.
Wieso lese ich eigentlich gerade das Datenblatt? Eigentlich solltest Du uns das Timing erklären. Naja ich resümiere mal. AEN geht auf low, Adresse wird angelegt, min 20ns später geht IORD oder IOWR auf low. Beim Lesen liegen die Daten spätestens 50ns nach IORD=low am Bus, es sei denn, der RTL8019 hat mit IOCHRDY kund getan, dass er noch etwas Bedenkzeit braucht. Beim Schreiben können die Daten irgendwann angelegt werden, müssen aber 10ns nachdem IOWR wieder high geworden ist noch da sein. Soweit sieht mir das verdammt einfach aus. Ob das AEN-Signal sich bewegen muss, sagt das Datenblatt nicht, nur, dass es für ISA-Transfers low sein muss. Ich gehe mal davon aus, dass Du die Karte im Jumper-Modus hast oder zumindest im Jumperless-Modus, aber nicht PnP, oder? Wie ich gesehen habe, hast Du die Adresse tatsächlich auf 300h eingestellt. Nimm doch mal bitte A9 als Card Select. Und nochwas: wann hast Du 0en, wann 1en auf dem Bus? Beim schreiben das, was Du schreibst (0en zB) und beim Lesen entweder das, was Du von der Karte erwartest oder aber nur 1en? Du liest nicht etwa irgendwelche Pullups aus, und das Display wird gar nicht angesprochen oder kommt gegen die Pullups nicht an? Sag bitte nicht dass das der Fall ist ;)
starkeeper
27.05.2006, 15:00
Also erstmal bin ich dir sehr Dankbar, das du dich damit beschäftigst :P
Das Datenblatt habe ich ja auch hier und bin der Meinung das mein timing keine probleme macht. Ich hab die Befehle so gestaltet das die zeit eher zu lang als zu kurz ist. Ausserdem geht die Netzwerkkarte ja auch anstandslos.
Die Karte ist im Jumperless-modus und auf die Adresse 300h eingestellt. Kein PNP, da ich ja dann das komplette ISA-Protokoll programmieren müsste und noch fünf weitere Adressleitungen bräuchte.
Das ich ja praktisch immer die Netzwerkkarte anspreche, da ich die 300h fest auf 5V verdrahtet habe war mir jetzt garnicht so bewusst *g*. Ich werde also mal austesten den A9 auf den PIC zu legen und zu steuern.
Ich habe auf dem Bus das anliegen, was ich schreibe oder das was ich von der Netzwerkkarte auslese, aber nie das was ich vom display auslesen will.
PullUps ist so eine Sache, ich habe ja jetzt keine drin. Mit denen habe ich aber noch Verständnisprobleme wäre nett wenn du das etwas näher erörtern könntest. Es ist nur das in den Leitungen, was man auf dem Schaltplan sehen kann. Ich hatte jetzt sogar in Betracht gezogen mal ein paar Pull-ups einzusetzten.. *g*
Du liest also immer 1en vom Display. Ja sag mal, wird das Display denn auch korrekt zum Lesen angesteuert? Ich habe den Thread nicht im Kopf und auch gerade keine Lust, zurückzublättern - ohne Netzwerkkarte lässt es sich auslesen? Pullups ziehen Leitungen, die von sich aus nicht auf sicheres high kommen eben dorthin, das kannst Du nun gerade nicht gebrauchen, eher das Gegenteil. Irgendeinen Grund muss es ja haben, dass das Display von der Netzwerkkarte "weggedrückt" wird, bzw irgendwo müssen die 1en ja herkommen. Auf welcher Spannung liegen denn die Leitungen beim Lesen a) von der alleine bestückten Netzwerkkarte, b) vom alleine angeschlossenen Display, c) wenn beide eingebaut sind jeweils beim Lesen von Netzwerkkarte und Display, und dann jeweils high und low-Pegel. Daraus sollte sich eigentlich erkennen lassen, wer da wen niedermacht. Richtig übel wird es, wenn das Display-Lesen nur ohne weitere Belastung funktioniert, weil Du zB im falschen Moment, wenn die Bustreiber eigentlich schon wieder high-Z sind, liest und nicht die echten Pegel sondern Ladungen in irgendwelchen Aufbau-Kapazitäten.
starkeeper
27.05.2006, 17:31
Jop ohne Netzwerkkarte funktioniert das Display wunderbar lesen und schreiben. Mit Netzwerkkarte kann ich das Display nur beschreiben, lesen geht nicht.
Beim lesen:
nur Netzwerkkarte 3,99V
nur Display 4,06V
beides dran lesen von netzwerkkarte
high 3,99V
low 0,6V
beides dran lesen von display
high 3,98
low 3,98
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.