← ST-Computer 01 / 1990

Per SCSI zum ST

Projekt

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:

  • unterstĂŒtzt alle Kommandogruppen (Gruppe 0 bis Gruppe 7)
  • Das angeschlossene GerĂ€t ist uneingeschrĂ€nkt bootfĂ€hig.
  • handelsĂŒbliche Treiber ohne Änderung lauffĂ€hig
  • gepufferter DMA-Bus
  • bis zu vier SCSI-GerĂ€te anschließbar

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:

  • /DB(0-7)

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

  • /DB(P) ParitĂ€tsbit.

Zum GlĂŒck bietet jeder SCSI-Controller die Möglichkeit, die ParitĂ€tskontrolle zu unterdrĂŒcken.

  • /BSY Busy.

Das Target kennzeichnet damit den Bus als belegt.

  • /SEL Select

wird vom Initiator wÀhrend der Selektionsphase aktiviert.

  • /CD Control/Data.

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

  • /IO Input/Output

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).

  • /REQ

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

  • /ACKAcknowledge

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

  • /RST Reset.

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