Hallo, ich hab mir gerade den rtl8019as ein bißchen angescahut. Leider verstehe ich dessen Funktionsweise, bzw dessen Ansteuerung nicht. In manchen Shcaltungen findet man, dass Adressleitungen nur von SA0 bis SA4 gezogen werden. Der Rest ist auf GND. Wieso das? Warhscheinlich brauche ich eben nciht mehr Speicherplatz?! Aber wei sende Ich Daten? Lege ich einfach auf den Datenbus etwas an und schreibe das auf welche Adresse im rtl8019as? Bin ratlos. Das Datenblatt hat mir da auch nciht viel geholfen.
Schau dir doch den Sourcecode bestehender Treiber für sowas an. Gibt's für alle möglichen Betriebssysteme (naja, wahrscheinlich nicht gerade für Windows). Ist schon eine Weile her, dass ich meinen letzten Ethernettreiber geschrieben habe (und der ging noch über den Parallelport :). Das Prinzip ist, dass diese Chips intern eine Reihe von Registern haben, die über den Bus multiplexiert werden.
Hab gesehen, dass einfach an A0-A19 die Adresse 0x00000 angelegt wird. Danach werden die Daten angelegt und das ReadToggle gesetzt. Schreib ich also immer auf 0x00000 und das passt?
Ok. Das war gerade Mist was ich erzählt habe. Glaub ich. Mit SA0-SA4 kann man also 0x00 bis 0x1F adressieren. Was genau den Speicherbereich jeder Page entspricht. Pages gibt es 4 die jeweils mit dem Bit6 und Bit7 der Datenleitung angesprochen werden können. Soweit bin ich mir schon sicher. Nur warum haben die Leute von Ethernut hier http://www.ethernut.de/pdf/enut130g-s3.pdf 16 Adressleitungen gezogen? Komisch. Und warum ist BD5 und 7 angebunden. Doch nur weil dort ein Speicher simuliert werden soll, oder? Brauch ich das zwingend?
Der RTL8019 enthält einen Adressdekoder. Wenn man diesem alle 16 Leitungen zuführt, tauchen die Register nur einmal im Adressraum auf. Wenn Du nur SA0-SA4 verkabelst, dann würden sich die Register im Abstand von 32 wiederholen. Fügst Du SA5 hinzu, nur noch alle 64 Bytes usw. Beim Ethernut 1 tauchen die Register nur einaml von 0x8000 bis 0x801F auf, alle anderen Adressen dürfen von anderen Devices belegt werden. A15 wurde übrigens negiert, um 0x8300 (statt 0x0300) als Basisadresse zu bekommen. Natürlich brauchst Du trotzdem nicht alle Adressleitungen zum Realtek führen. Wenn Du z.B. nur SA0-SA4, SA14 und SA15(neg) belegst, SA8 und SA9 fest auf high und den Rest auf low legst, bleiben die Adressen 0xC000 bis 0xFFFF zur freien Verfügung. Eine reichlich komplizierte Geschichte ist übrigens die zusätzlich Verwendung von A13 und A14 zur EEPROM Simulation. Neben der Möglichkeit ein echtes EEPROM zu bestücken, kann man auch Portbits dafür nehmen, was die Software erheblich vereinfacht. Du kannst den Pin EDO auch einfach auf high legen, nur kannst Du den Chip dann nicht in den Half Duplex Modus schalten. Der RTL8019AS ist sehr alt und macht den Link Aufbau im Full Duplex Mode nicht nach gültigem Standard, was dann zu Ethernet Kollisionen führt.
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.