Per SCSI zum ST

Bild 1: Beispiel eines SCSI-Systems

Das hat uns noch gefehlt. Während das Schlagwort ‘SCSI’ immer häufiger im Anzeigenteil der Fachpresse auftaucht, müssen ST-Besitzer, die nicht über das nötige Kleingeld für ein professionelles Fertiggerät verfügen, mit sogenannten Billiglösungen vorliebnehmen.

Damit ist es nun vorbei. Ein Host-Adapter für den Selbstbau eröffnet Ihnen die Welt der SCSI-Geräte. Festplatten beliebiger Größe, Wechselplatten, Streamer, CD-ROM etc. können bald Ihren Arbeitstisch bevölkern. Und sollten Sie einmal aufsteigen (z.B. ATARI TT), brauchen Sie Ihre Geräte nicht mehr für’n Apple und’n Egg zu verschleudern - umstecken genügt.

Wer da behauptet, diese Geräte seien viel zu teuer, soll eines Besseren belehrt werden: Eine 20MB-Festplatte in ‘PC-Ausführung’ (DM 440.-) plus OMTI-Controller (DM 170.-) ist teurer als eine entsprechende SCSI-Platte (DM 580.-). In diese ist der Controller bereits eingebaut. Die Preise sind diversen Fachanzeigen entnommen.

Neben den Kosten spielt natürlich auch die Leistung eine Rolle, und in dieser Beziehung sind SCSI-Geräte über jeden Zweifel erhaben. Die preiswerte 20MB-Platte des Autors erreicht mühelos eine Transferrate von über 600 MB/s. Sie dürfen vergleichen, wir nicht.

Noch ein paar Worte zum Host-Adapter:

Wenn Sie bereits Ihren Lötkolben angeworfen haben, folgt jetzt der Sprung ins kalte Wasser: Die Hardware-Beschreibung folgt erst im nächsten Teil dieser Artikelreihe.

Erst die Arbeit...

Wir werden uns zunächst mit dem SCSI-Bus und den Unterschieden zum ACSI-Bus beschäftigen. Diese Grundlagen sind die Voraussetzung, um die Beschreibung der Hardware zu verstehen, und ermöglichen die Realisierung spezieller SCSI-Software. Wenn Sie einen Drucker an den Centronics-Port anschließen, so verbinden Sie einen Sender mit einem Empfänger. Die Zuordnung Sender/Empfänger kann zwar wechseln, doch sind Sie nicht in der Lage, einen zweiten Drucker anzuschließen und sich per Software einen davon auszusuchen. Dazu brauchen Sie ein Bussystem. Auf diesem werden außer den eigentlichen Daten stets auch Steuerinformation übertragen, die sozusagen den Verkehr regeln.

Das Wort ACSI für den DMA-Bus des ATARI dürfte den meisten von Ihnen geläufig sein. Dieses ATARI Computer System Interface ist leider nur eine stark abgemagerte Version seines Ziehvaters SCSI (oder war es die Mutter?). Vielleicht gefiel unserem Mr. Tramiel das erste Wort ‘Small’ nicht? Der SCSI-Bus verbindet bis zu acht Controller miteinander. Diese Controller sind recht intelligente Burschen. Maximal acht Geräte kann (theoretisch) jeder davon verwalten. Nun macht es wenig Sinn, z.B. 64 Festplatten miteinander kommunizieren zu lassen, und darum befindet sich meist ein Computer, der sogenannte Host, unter den Geräten. Wenn der Computer keine Bevormundung durch einen Controller benötigt, wird er einfach mit Hilfe eines (jetzt kommt’s) Host-Adapters in den Bus eingeklinkt.

Auf dem ACSI-Bus ist der ST eindeutig der Chef. Er ergreift die Initiative zur Datenübertragung und unterscheidet die Zielgeräte anhand ihrer Target-Nummer. Der SCSI-Bus ist da etwas flexibler. Jeder der angeschlossenen Partner kann Initiator spielen und ein beliebiges Ziel (engl.: Target) anwählen.

Die Phasen oder wie verwirre ich den Leser

Wie bereits erwähnt, passieren neben der Datenübertragung noch andere interessante Dinge auf dem Bus. Will ein Gerät den Bus verwenden, zeigt es dies an, indem es die eigene Identifikationsnummer auf den Bus legt (SCSI-ID, entspricht etwa der Target-Nummer auf dem DMA-Bus).Wenn mehrere Geräte annähernd gleichzeitig den Bus verwenden wollen, gewinnt das mit der höchsten Nummer. In dieser Arbitration-Phase wird also der Initiator ermittelt.

Runde 2: Während der Selection-Phase legt der Initiator die SCSI-ID des Zielgerätes auf den Bus und wartet auf Antwort. Nachdem sich das Target gemeldet hat, kann es endlich losgehen. Alle anderen Geräte dürfen das Paar bis zum Ende der Übertragung nicht mehr stören.

Stellen Sie sich bitte vor, das Target sei ein Bandgerät und muß zur Datenübertragung zunächst vor- oder zurückspulen. Um den Bus nicht minutenlang zu blockieren, kann das Bandgerät (besser gesagt sein Controller) den Bus freigeben, und später in der sogenannten Reselection-Phase den ursprünglichen Initiator anwählen und die Übertragung fortsetzen.

Solche Leckerbissen kann uns der ACSI-Bus leider nicht bieten, die folgenden Phasen dürften aber den meisten von Ihnen bekannt Vorkommen. Die Command-Phase zur Übergabe des Kommandos und der Übertragungslänge sowie die Data-Phase (was macht die bloß?) ähneln ebenso ihrem ACSI-Pendant wie die Status-Phase zum Abschluß der Übertragung. Halt, da gibt es ja noch die Message-Phase beim SCSI-Bus. Während das Status-Byte das Ergebnis der Übertragung anzeigt (OK / Fehler), beendet erst das Messagebyte vom Target den Zugriff auf den Bus. Normalerweise wird eine ‘0’ mit der Bedeutung ‘Command Complete’ übertragen, doch auch hier existiert eine Vielfalt, die den Rahmen dieses Artikels bei weitem sprengen würde. Dazu kommt noch, daß auch der Initiator Messagebytes senden kann...

Der Ruhezustand nennt sich Bus Free-Phase. Sämtliche Signale sind inaktiv. Alle warten darauf, daß endlich was passiert.

ACSI goes SCSI

Solange wir noch nicht im Besitz eines ATARI TT sind, können wir auf solche Dinge wie Arbitration, Reselection und Messagebyte getrost verzichten - der ST kann’s sowieso nicht. Dies widerspricht übrigens nicht der SCSI-Norm. Unser System nennt sich ‘Single Initiator, Multi Target’, d.h. der ATARI braucht sich nicht zu duellieren, um den Buszugriff zu erhalten. Er ist der einzige, der dazu überhaupt in der Lage ist. Alle anderen Geräte auf dem Bus sind Targets, die sich erst dann rühren, wenn sie dazu aufgefordert werden. Dadurch entfällt Arbitration, aber auch Reselection. Der gefürchteten Inkompatibilität zuliebe verzichten wir freiwillig auf das Messagebyte. Das soll gefälligst der Host-Adapter erledigen.

Wenden wir uns nun den Leitungen zu, auf denen all diese Vorgänge ablaufen. Invertierte (also low-aktive) Signale sind durch ein vorangestelltes '/’ gekennzeichnet:

Dies sind die Datenleitungen des SCSI-Busses. Im Gegensatz zum ACSI-Bus sind die acht Daten-Bits low-aktiv.

Zum Glück bietet jeder SCSI-Controller die Möglichkeit, die Paritätskontrolle zu unterdrücken.

Das Target kennzeichnet damit den Bus als belegt.

wird vom Initiator während der Selektionsphase aktiviert.

Das Target unterscheidet damit zwischen Daten und Steuerinformationen (Kommando, Status).

steuert die Datenrichtung und entspricht in seiner Funktion dem Read/ Write-Signal auf dem ACSI-Bus. Sender ist das Target.

-/MSG

Das Signal Message vom Target kenn zeichnet die _______-Phase (bitte richtige Antwort eintragen).

Das Target sendet Request, um die Übertragung eines Bytes zu beginnen. In der Data-Phase entspricht dies dem ACSI-Signal DRQ (Data Request).

vom Initiator entspricht in der Data-Phase dem gleichnamigen ACSI-Signal.'Es bestätigt die mit /REQ begonnene Übertragung.

Der Name spricht für sich.

Shake Hands

Bild 2: Handshaking im Vergleich

Die asynchrone Datenübertragung beruht auf dem Prinzip, daß der eine Partner nur aktiv wird, wenn der andere ebenfalls dazu bereit ist, und umgekehrt. (Das habe ich in einem anderen Zusammenhang auch schon mal gehört.) So können sich auch unterschiedlich schnelle Geräte aneinander anpassen. Da das Handshaking auf dem SCSI-Bus sehr konsequent durchgeführt wird, soll einmal die Übertragung eines Bytes vom Host (Initiator) zum Controller (Target) als Beispiel dienen.

Das Target aktiviert REQ, um seine Bereitschaft zum Empfang eines Bytes anzuzeigen. Mit den Daten setzt der Initiator auch ACK und kündigt damit die Daten an. Sobald das Target das Byte übernommen hat, wird zurückgesetzt. Bedeutung: Die Daten sind angekommen. Nun kann der Initiator befriedigt sein ACK deaktivieren, worauf das Target mit einem neuen Zyklus beginnt.

Viele glauben, auch der ATARI verfolgt dieses Prinzip des Händeschüttelns, zumindest in der Datenphase. Das stimmt • aber nur zur Hälfte. Um bei obigem Beispiel zu bleiben: Unser Rechner wartet tatsächlich auf das REQ des Targets, doch sein Acknowledge bleibt nur ca. 250 ns lang aktiv. Kurz danach verschwinden auch die Daten wieder - ob das Target sie inzwischen empfangen hat oder nicht! Dies ist auch eines der großen Probleme auf dem ACSI-Bus. Die Daten liegen für 250 + 2 * 60 = 370 ns an, nicht mehr und nicht weniger.

Für die umgekehrte Richtung existieren ähnliche Probleme. Will unser ST ein Byte lesen, erwartet er gültige Daten, solange sein AC/f-Signal aktiv ist. Beim korrekten Handshaking, wie es auf dem SCSI-Bus realisiert ist, sind die Daten nur solange gültig, bis das Target sein REQ deaktiviert hat.

Details are Hacker’s best friends

Doch zurück zum SCSI-Bus. Die Data Phase ist durch das oben beschriebene Handshaking bereits vollständig erklärt. Bis auf die dargelegten Differenzen verläuft die Übertragung auf dem ACSI-Bus identisch.

Will der Initiator ein Gerät selektieren, aktiviert er das Daten-Bit, welches der SCSI-ID des Empfängers entspricht. Soll also der Controller mit der Nummer 2 angesprochen werden, wird das Daten-Bit 2 auf low gesetzt und zwar ausschließlich. Nach einer Pause von mindestens 90ns wird Select aktiviert (für mathematisch und/oder technisch nicht so interessierte Leser: 90 Nanosekunden sind 0.00000009 Sekunden). Fühlt sich ein Target angesprochen, aktiviert es die Busy-Leitung. Busy bleibt bis zum Ende der Übertragung gesetzt. Nun ist die Verbindung hergestellt, und der Initiator nimmt das Datenbit und SEL zurück.

# Die Kommandos der Seagate-SCSI-Festplatten
Gruppe Kommando Opcode Bezeichnung Bemerkung
0 00 00 Test Unit Ready
01 01 Rezero Unit
03 03 Request Sense
04 04 Format Unit
07 07 Reassign Blocks
08 08 Read
0A 0A Write
0B 0B Seek
11 11 Read Usage Counter
12 12 Inquiry
15 15 Mode Select
16 16 Reserve
17 17 Release
1A 1A Mode Sense
1B 1B Start/Stop
1C 1C Rec. Diag. Results Nur ST225N
1D 1D Send Diagnostic
1 05 25 Read Capacity
08 28 Read
0A 2A Write
OB 2B Seek Nicht ST225N
0F 2F Verify
17 37 Read Defect Data
1B 3B Write Buffer Nicht ST225N
1C 3C Read Buffer Nicht ST225N
7 05 E5 Read Long Nicht ST225N
06 E6 Write Long Nicht ST225N

Von nun an übernimmt der Controller das Ruder. Alle (!) folgenden Bytes werden durch einen REQ/ACK-Handshake übertragen, so auch der 6- oder 10-Byte-Kommandoblock, der als nächstes folgt. Hier unterscheidet sich der ACSI-Bus wohl am meisten vom SCSI-Bus. Erstens hat ATARI die Selektionsphase in das erste Kommandobyte integriert. Zweitens bedient sich ATARI der separaten Handshake-Leitungen CS und IRQ. Dies ist allerdings notwendig, da drittens das Handshaking während der Kommandophase ‘falschherum’ arbeitet, also mit aktivem Initiator. Das Target antwortet nur. Dies ist zumindest die allgemeine Auffassung.

Man kann es auch anders sehen: Außer beim ersten Kommando-Byte fordert das Target die Daten mit IRQ an, und der Initiator antwortet mit CS. Aus dieser Sicht fällt die Umsetzung in ein SCSI-konformes Handshaking leichter.

Betrachten wir einmal das erste Kommando-Byte. Die Bits 0-4 bezeichnen das Kommando, welches das Gerät ausführen soll. Die Bits 5-7 selektieren auf dem ACSI-Bus eines der angeschlossenen Targets. SCSI-Geräte erkennen daran allerdings die gewählte Kommandogruppe. Selektiert sind sie zu diesem Zeitpunkt bereits. Einfache Host-Adapter übergeben dem Zielgerät einfach eine Null und beschränken den Anwender damit auf Gruppe 0-Kommandos. Wir werden später noch sehen, wie diese Beschränkung zu umgehen ist.

This is the end

Nach der Phase Data-in bzw. Data-out wird zunächst ein Status-Byte und anschließend ein Messagebyte zum Initiator übertragen. Auch hier wirkt wieder der inzwischen bekannte REQ/ACK-Handshake. Die Message-Phase ist am gesetzten MSG-Bit zu erkennen (auf low gesetzt, versteht sich). Diese kurze Beschreibung läßt schon erahnen, daß die Vorgänge auf dem SCSI-Bus durch ihre Gleichförmigkeit erheblich leichter zu verstehen sind als das ACSI-Verhalten. Der DMA-Bus hat selbst für das Status-Byte noch eine Variante parat: Es werden, wie in der Command-Phase, die Signale CS und IRQ verwendet. Doch diesmal wird das Target aktiv und setzt zunächst IRQ auf low. Darauf wartet die Zeitschleife des Programmierers schon. Das Statuslesen komplettiert mit einem Impuls auf CS das Handshaking.

Bild 3: Das erste Kommando-Byte

Im nächsten Beitrag geht es dann zur Sache. Wie kann ich diese unterschiedlichen Anforderungen vereinen? Warum muß der Entwickler unbedingt GAL-Bausteine verwenden? Wie komme ich an die neuen Kommandogruppen heran? Warum bohre ich mir kein Loch ins Knie und schütte Milch rein?

Literatur:

Brod/Stepper: Scheibenkleister II
Jankowski/Reschke/Rabich: ATARI ST Profibuch
SEAGATE Technology: ST125N/J38N/J57N Product Manual, Rev.C
SEAGATE Technology: SCSI Interface Manual, Rev.B
Scientific Micro Systems: SCSI Intelligent DataControllers, Reference Manual, Rev.C


Reiner Wiechert
Aus: ST-Computer 01 / 1990, Seite 148

Links

Copyright-Bestimmungen: siehe Über diese Seite