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:
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