Serielle Schnittstelle

Aus C64-Wiki
(Weitergeleitet von serielle Buchse)
Zur Navigation springenZur Suche springen

Beschreibung[Bearbeiten | Quelltext bearbeiten]

Serielle Schnittstelle des C64

Die serielle Schnittstelle des C64 ist für den Anschluss von Peripheriegeräten, insbesondere für Floppylaufwerke und Drucker gedacht. Technisch handelt es sich um eine spezielle serielle Commodore-Variante des parallelen IEEE-488/IEC-625-Busses, weswegen er häufig auch als IEC-Bus oder CBM-Bus erwähnt wird. Diese Schnittstellenvariante ist nicht kompatibel mit der RS-232, die im PC-Bereich unter der Bezeichnung "serielle Schnittstelle" läuft.

Während serielle Schnittstellen meist nur für die Verbindung zwischen zwei Geräten eingesetzt werden (z.B. RS-232), handelt es sich beim IEC-Bus um einen seriellen Bus. Es kann also mehr als nur ein Gerät gleichzeitig an den Rechner angeschlossenen werden, die meisten Commodore-Peripheriegeräte haben zu diesem Zweck Durchschaltbuchsen. Theoretisch sind bis zu 31 Geräte möglich (Gerätenummern 0 bis 30, Nummer 31 ist reserviert für UNTALK/UNLISTEN), das Betriebssystem des C64 kann allerdings nur Geräte mit den Gerätenummern 4 bis 30 an diesem Bus nutzen, da die Nummern 0 bis 3 intern reserviert sind. Praktisch liegt die Obergrenze jedoch bei etwa 8 Geräten. Das liegt daran, dass die Ausgänge des im Gerät eingebauten Chips (invertierender Treiber 7406) mit einem maximalen Strom von ca. 40 mA belastet werden können. Jedes Gerät das am seriellen Bus angeschlossen ist, erzeugt eine Last von ca. 5 mA.

Die Auswahl, mit welchem Gerät nun Daten ausgetauscht werden, erfolgt über die dem Gerät zugeordnete Gerätenummer. Diese Nummer, im Bereich von 0 bis 30 (nutzbar sind nur 4 bis 30) muss am Gerät eingestellt sein, und darf nur einmal vorkommen. Die Standardnummer für den ersten Drucker ist 4 und für das erste Floppylaufwerk 8.

Ein PC mit entsprechendem Kabel (siehe X1541) kann mit einer Floppy verbunden werden und mit entsprechender Datenübertragungs-Software von Diskette lesen und auf Diskette schreiben. Diese Datenübertragungs-Software benutzt dann ein Datenübertragungsprotokoll, das vom Timing her recht gutmütig ist. Das Zeitverhalten des IEC-Busses ist im allgemeinen jedoch sehr zeitkritisch. Zum Beispiel kann ein PC unter Multitasking-Betriebssystemen (Windows, Linux...) gegenüber dem C64 keine Floppy emulieren, da die nötigen maximalen Latenzzeiten von wenigen Mikrosekunden (insbesondere bei Schnellladern) von PC-Seite aus nicht einzuhalten sind. Software wie 64HDD, 1541EMU, Server64 oder 1541 läuft deswegen prinzipiell nur unter DOS.

Im Normalbetrieb (LOAD, unmodifizierte KERNAL-Routinen) schafft die serielle Schnittstelle ca. 400 Byte/Sekunde mit einer 1541 und ca. 650 Byte/s mit einem SD2IEC. Mit JiffyDOS und einer 1541 werden etwa 2,4 kByte/Sekunde übertragen, mit einem SD2IEC etwa 8,6 kByte/Sekunde. Das theoretische Maximum beträgt etwa 20 bis 25 kByte/Sekunde[1].

Anschlussbelegung[Bearbeiten | Quelltext bearbeiten]

Die serielle Schnittstelle ist eine 6-polige DIN-Buchse (DIN 45322).

Außenansicht auf die Buchse


Pin Bezeichnung Signalrichtung Bemerkung
1 SERIAL SRQ IN Serial Service Request In, beim C128 "Fast Serial Clock"
2 GND - Ground, Signalmasse (0 V)
3 SERIAL ATN OUT Attention, für die Auswahl eines Geräts und Start/Ende einer Übertragung
4 SERIAL CLK IN/OUT Clock, Takt für die Datenübertragung
5 SERIAL DATA IN/OUT Daten
6 SERIAL RESET OUT(/IN) Reset, bei älteren VC 20 unbelegt

Signalbeschreibung[Bearbeiten | Quelltext bearbeiten]

  • Beachte, dass viele Schnelllader diese Signale anders verwenden! Die hier beschriebene Belegung gilt nur für den Normalbetrieb des Busses.
  • Alle Leitungen (abgesehen von GND) sind Low-aktiv und weisen im inaktiven Zustand eine Spannung von ca. 5 V auf.
  • Elektrisch werden die Leitungen als Open-Collector-Ausgang betrieben, um das Busverhalten zu erhalten.


SRQ: Serial Service Request In

Jedes Gerät an der seriellen Schnittstelle kann dieses Signal auf Low legen, wenn es vom Computer einen Datenaustausch benötigt. Beim C64 wird dieses Signal nicht verwendet, ist aber mit der Leseleitung des Kassettenports verbunden (wobei hier nur negative Signalflanken erkannt werden können und nicht der Signalpegel).
Beim C128 wird das Signal mit "Fast Serial Clock" für das 1571 Diskettenlaufwerk ersetzt.

ATN: Serial Attention Out

Wenn dieses Signal Low ist und ein Byte gesendet wird, interpretieren die am seriellen Bus angeschlossenen Geräte dies als einen Befehl. Sobald der C64 das Signal auf Low legt, warten alle anderen Geräte am Bus auf eine Übertragung der Adresse (Gerätenummer). Das adressierte Gerät muss innerhalb einer festgelegten Zeit antworten, ansonsten nimmt der C64 an, dass das adressierte Gerät nicht vorhanden ist und gibt einen Fehler aus. Nach der Geräteadresse wird die Sekundäradresse gesendet, dabei bleibt die Leitung auf Low. Vor dem ersten "normalen" Byte geht sie dann wieder auf High.

CLK: Serial Clock In/Out

Dieses Signal ist der Zeittakt für die gesendeten Daten. Der Takt wird immer von dem Gerät erzeugt, das gerade sendet. Bei der steigenden Flanke wird vom Empfänger das Datenbit (DATA) übernommen.

DATA: Serial Data In/Out

Die Daten werden auf dieser Leitung Bit für Bit nacheinander übertragen. Bei einem Byte wird zuerst das niederwertigste Bit 0 (LSB) und am Ende das höchstwertige Bit 7 (MSB) übertragen.

RESET: Serial Reset

Damit wird ein Reset bei den angeschlossenen Geräten ausgelöst. Bei frühen C64-Modellen kann diese Leitung auch als Eingang verwendet werden, um den Computer zurückzusetzen (z. B. Reset-Taster), bei späteren Modellen ist dies nicht möglich. Daher sollte im allgemeinen für Reset-Taster besser die Reset-Leitung am Userport verwendet werden.

Pullup-Problematik[Bearbeiten | Quelltext bearbeiten]

Die Leitungen sind als Open-Collector mit 1kΩ-Pullup-Widerständen ausgelegt. Sowohl im Host (C64/...) als auch in den Laufwerken sind Pullups nach 5 V eingebaut. Daraus ergeben sich unterschiedliche Probleme:

  • Bei vielen (eingeschalteten) Laufwerken am Bus werden die Leitungen durch die parallel geschalteten Pullups sehr stark nach 5 V gezogen. Je nach Stärke der Ausgangstreiber der jeweiligen Geräte kommen diese dann nicht mehr "durch". Insbesondere die Sparvariante von MMC2IEC/SD2IEC ohne MOSFET-Treiber bekommt dann Probleme.
  • Bei ausgeschalteten Laufwerken am Bus ziehen deren Pullup-Widerstände fälschlicherweise nach Masse. Dann funktioniert der Bus unter Umständen gar nicht mehr.

Diese Probleme kann es auch abgestuft geben, z. B. dass bei mehreren Laufwerken am Bus manche Schnelllader nicht mehr funktionieren.

Lösungsansätze

  • Um zu verhindern, dass ein abgeschaltetes Laufwerk die Leitungen nach Masse zieht, können im Laufwerk in Serie (nicht parallel!) zu den Pullup-Widerständen Dioden gelötet werden (Kathode Richtung IEC-Buchse, Anode Richtung 5 V), die dann verhindern, dass Strom durch die Pullups ins Laufwerk fließt.
  • Ebenso können in den Laufwerken die Pullups einfach entfernt werden, da im Host bereits Pullups sind.

Fehlersuche[Bearbeiten | Quelltext bearbeiten]

Im Betrieb am C64 werden normalerweise nur die Leitungen Data, Clock und ATN benutzt.
Data und Clock können vom C64 gesetzt und gelesen werden, ATN nur gesetzt.

In BASIC ist die Fehlersuche relativ einfach (siehe Schaltplan und CIA).

  • Geräte ausschalten, Laufwerke vom C64 abziehen, C64 anschalten.
  • Nach POKE56576,3 sollte Data/Clock/ATN jeweils auf High sein (>3V) und ein PRINTPEEK(56576)AND192 eine 192 zurückgeben.
  • Nach POKE56576,59 sollten alle drei Leitungen auf Low (<1V) sein und das PRINTPEEK(56576)AND192 eine 0 zurückgeben.
  • Mit dem PEEK kann man ATN leider nicht zurücklesen, dafür muss man ein Multimeter bemühen.
  • Stimmen die Spannungspegel auf den Leitungen nach den POKEs nicht, ist U8 (7406 oder 74LS06 oder MOS7707) oder U2 (CIA2/MOS6526) defekt. Stimmen die Spannungspegel, aber es wird nicht der korrekte Wert zurückgelesen, ist CIA2 defekt.
  • Stimmen die Spannungspegel nicht, aber an den Eingängen von U8 (Data Pin 3, Clock Pin 9, ATN Pin 1) können die korrekten invertierten Signale gemessen werden, so ist U8 defekt.
    • Es kam auch schon vor, dass die Pullups (R28/29/30) nicht korrekt bestückt oder anders defekt waren, das ist aber selten.
    • Auch Leitungen zur IEC-Buchse oder IC-Sockel können natürlich defekt sein.
  • Funktionieren nur bestimmte Schnelllader nicht, wird das Problem nicht bei grundsätzlich defekten Signalleitungen liegen, sondern eher bei zu schwachen Pullups, zu vielen oder abgeschalteten Geräten am Bus oder ungeeigneten Kabeln. Insbesondere sind Videokabel für die serielle Schnittstelle nicht geeignet (dort ist die Schirmung mit einem bei IEC für Daten genutzten Pin verbunden).

Erweiterungen[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]

WP-W11.png Wikipedia: CBM-Bus


Fußnoten