Serielle Schnittstelle

Aus C64-Wiki
(Weitergeleitet von IEC)
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


Die Signalrichtung in der folgenden Tabelle gilt aus Sicht des Computers.

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

Bei der 1541 ist dieses Signal nicht mit der Laufwerkselektronik verbunden.
Beim C64 wird dieses Signal nicht vom KERNAL 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 für die "Fast Serial Clock" (bzw. "Burst Mode") der Diskettenlaufwerke 1570/1571/1581 benutzt.

ATN: Serial Attention Out

Sobald der Rechner dieses Signal aktiviert (auf Low zieht), quittieren angeschlossene Geräte es[2] indem sie die DATA-Leitung aktivieren, ggf. gerade ausgeführte Aktivitäten zuende führen und danach die DATA-Leitung wieder deaktiveren. Daraufhin vom Rechner geschickte Bytes werden durch die Laufwerke als Befehle interpretiert, die auch Geräteadresse und ggf. Sekundäradresse beinhalten.
Die Laufwerke können ATN nicht aktivieren, sondern nur lesen.

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.

Kabel[Bearbeiten | Quelltext bearbeiten]

Geeignete Kabel verbinden alle Pins und die Schirmung 1:1 durch. Insbesondere darf die Schirmung nicht mit einer der Leitungen gebrückt sein. Die Buchsen der Geräte legen die Schirmung auf GND (Pin 2).

Für Video gedachte Kabel verbinden die Schirmung häufig mit Pin 3, was im Zusammenhang mit IEC zu Problemen führt.

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 (Schaltpläne in Artikel Hauptplatine, siehe auch Artikel CIA).

  • Geräte ausschalten, Laufwerke vom C64 abziehen, C64 anschalten.
    • Nach POKE56576,11 sollte ATN Low (<1V) sein (mit Multimeter nachmessen), Clock und Data sollten High (>3V) sein, PRINTPEEK(56576)AND192 sollte eine 192 zurückgeben.
    • Nach POKE56576,19 sollte Clock Low sein (ATN und Data sollten High ausgeben), PRINTPEEK(56576)AND192 sollte eine 128 zurückgeben.
    • Nach POKE56576,35 sollte Data Low sein (ATN und Clock sollten High ausgeben), PRINTPEEK(56576)AND192 sollte eine 64 zurückgeben.
  • Stimmen die Spannungspegel an der Buchse nach den POKEs nicht, ist vermutlich U8 (7406 oder 74LS06 oder MOS7707) oder U2 (CIA2/MOS6526) oder etwas im Umfeld davon defekt.
    • Stimmen die Spannungspegel, aber es wird nicht der korrekte Wert zurückgelesen, ist CIA2 oder eine Leitung defekt.
    • Stimmen die Spannungspegel an der Buchse 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 und/oder eine oder mehrere der ggf. vorhandenen ESD-Dioden oder eine Leitung defekt.
    • Liegen an den Eingängen von U8 bzw. den Ausgängen von U2 schon nicht die richtigen Pegel nach den POKEs an, sind CIA2 bzw. der Sockel von CIA2 oder Leitungen oder PLA bzw. U15 defekt; letzteres kann per Testsoftware[3] ggf. ausgeschlossen werden.
    • Die Pullups (R28/29/30) können nicht korrekt bestückt oder anders defekt sein, 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).
  • Zeigen die POKEs/PEEKs kein auffälliges Verhalten, aber trotzdem funktioniert eine angeschlossene Floppy nicht, kann man die Tests noch mit Pull-Up-Widerständen (jeweils 1k zwischen ATN bzw. Data bzw. Clock und 5V) durchführen, um eine angeschlossene Floppy (bzw. die Pull-Up-Widerstände darin) nachzuahmen.

Erweiterungen[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Wikipedia: CBM-Bus

Fußnoten[Bearbeiten | Quelltext bearbeiten]

  1. What is sd2iec's speed?
  2. Das Quittieren von ATN durch DATA durch das Laufwerk muss innerhalb einer Millisekunde passieren, ansonsten meldet der C64 "Device not present", siehe $ED31 ff.
  3. Test-Software für das Selektieren der CIA2 durch die PLA/U15, Userport-Module vorher entfernen:
    10 fori=0to255:poke56579,i:ifpeek(56579)=ithennext:print"ok!":end
    20 print"error"