Práce s SCSI analyzátorem

Jindřich Gottwald & Jan Karabina & XXX


Zadání:

Cílem tohoto měření je realizovat čtyři typy úloh. Jedna se o základní seznámení se s SCSI, identifikovat jednotlivá zařízení, formátovat jedno vybrané zařízení (jedná se o pásku) a na toto zařízení zapsat posloupnost čísel. Jedná se o následující úlohy:

1. Sledování sběrnice:
Zapněte sledování sběrnice a zkopírujte krátký textový soubor pomocí příkazu copy. Sledujte průběhy na sběrnici - všimněte si jednotlivých fází a srovnejte je s pravidly komunikace definovanými normou. Mezi příkazy zápisu (write) nalezněte ten, který zapisuje na disk obsah souboru a tuto část komunikace uveďte do protokolu (společně s kopírovaným souborem v textové podobě a jeho výpisem v šesnáctkové soustavě); označte kopírovaná data. Jednotlivé fáze komunikace patřičně okomentujte.

2. Identifikace zařízení
V módu INITIATOR zasílejte postupně jednotlivým zařízením na sběrnici příkaz Inquiry (žádost o identifikaci). Zjistěte, která zařízení a s jakým ID jsou na sběrnici připojena. Během sledování výpisu komunikace se zaměřte na operační kód příkazu Inquiry a jeho parametry (srovnejte s literaturou). Proveďte rozbor dat, která zasílají jednotlivá zařízení jako odpověď na žádost o identifikaci (pomocí tabulky v knize, která bude k dispozici v laboratoři). Z prvých tří slabik zjistěte parametry zařízení (s přímým/sekvenčním přístupem, rozhranní SCSI 1/SCSI 2 atd.). Dále rozluštěte výrobce (Vendor identification) a typ zařízení (…). Pozorujte, zda nezasílají zařízení iniciátoru také speciální hlášení. Do protokolu uveďte ukázku komunikace (pro jedno zařízení), v datech vyznačte, kde je zakódován výrobce a typ zařízení. U ostatních periférií zapište pouze Vámi dekódované údaje.

3. Výmaz pásky
V módu INITIATOR zašlete páskové jednotce příkaz pro převinutí pásky a pak ji formátujte. Při editace parametrů příkazu FORMAT je srovnejte s literaturou (význam uveďte do protokolu). Komunikaci zapište do protokolu. Zaměřte se na fáze Disconnect a Reselection. Vysvětlete jejich význam.

4. Zápis a čtení pásky
Na pásku zapište blok dat a přečtěte jej zpět. Do protokolu uveďte, proč a jak jste modifikovali příkaz Write a Read. Komunikaci opět zapište do protokolu, okomentujte jednotlivé fáze a zasílané zprávy. Všimněte si fází Disconnect a Reselection. Vysvětlete jejich význam.

Více teorie na stránce předmětu.

Popis měření:

Měření se provádělo na SCSI-bus analyzátoru/emulátoru DSC-202. Tento analyzátor byl ovládán z terminálu druhého PC připojeným přes seriový port. Výsledky terminálu jsou lehce dekódovatelne a jejich zkrácený výpis bude uveden v následujících odstavcích. Trochu kompletnější výpis je k nahlédnutí zde.

Vypracování:

1. Sledování sběrnice
Při kopírování textového souboru obsahujícího text 'ahoj' jsme získali toto:
00AF:  Bus free
00B1:     Arbitration  /01(0)
00B3:        Command /0A(Write/Send) 00 50 A1 01 00
00B9:           Data-Out/61 68 6F 6A 00 0A 00 34 01 5C 00 00 00 00 00 00
00C9:                    00 00 00 00 00 00 00 01 00 54 53 54 00 00 00 00
00D9:        Status  /00(Good)
00DA:        Message-In /00(Cmd_Cmplt)
První část dat v příkazu Data-Out jsou naše poslaná data v hexadecimálním ASCII kódu. Po přidělení sběrnice následuje příkaz pro čtení/zápis, pak data, vše potvrzeno Status Good, a konec komunikace Command Complete.

2. Identifikace zařízení
V PC byla identifikována tato zařízení:
ID Přístup Vyměnné Standard Popis
0 náhodný ne SCSI-1 SEAGATE ST138N
2 náhodný ne SCSI-2 MICROP 2217-15 MZ10011905
3 sekvenční ano SCSI-1 ARCHIVE VIPER 150 21247

Příklad komunikace se streamerem ARCHIVE VIPER:
0097:  Bus free
0099:     Arbitration w.ATN /80(7)
009A:     Select w.ATN /88(3,7)
009E:        Message-Out/C0(Identify)
009F:        Command /12(Inquiry) 00 00 00 30 00
00A5:           Data-In /01 80 01 00 2F 00 00 00 41 52 43 48 49 56 45 20
00B5:                    56 49 50 45 52 20 31 35 30 20 20 32 31 32 34 37
00C5:        Status  /00(Good)
00C6:        Message-In /00(Cmd_Cmplt)
Komunikace začíná přidělením sběrnice, následuje výběr komunikujících stran (ID 3 - streamer a ID 7 - řadič sběrnice), poté příkaz pro identifikaci Inguiry, dále přečtená data Data-In - první byty popisují typ zařízení (první 01 - zařízení je připojeno a je se sekvenčním přístupem; druhá 80h - výměnné zařízení; třetí 01 - standart SCSI-1) další pak jméno zařízení. Status Good operaci potvrdí a Command Complete ji ukončí.
3. Výmaz pásky
Převinutí pásky na začátek a její následný výmaz vyvolal na sběrnici tuto serii příkazů:
02A5:  Bus free
02A7:     Arbitration w.ATN /80(7)
02A8:     Select w.ATN /88(3,7)
02AC:        Message-Out/C0(Identify)
02AD:        Command /01(Rezero/Rewind) 00 00 00 00 00
02B3:        Message-In /04(Disconnect)
02B4:  Bus free
02B6:     Arbitration  /08(3)
02B7:     Reselect /88(3,7)
02BA:        Message-In /80(Identify)
02BB:        Status  /00(Good)
02BC:        Message-In /00(Cmd_Cmplt)
02BD:  Bus free
02BF:     Arbitration w.ATN /80(7)
02C0:     Select w.ATN /88(3,7)
02C4:        Message-Out/C0(Identify)
02C5:        Command /19(  ) 01 00 00 00 00
02CB:        Message-In /04(Disconnect)
02CC:  Bus free
02CE:     Arbitration  /08(3)
02CF:     Reselect /88(3,7)
02D2:        Message-In /80(Identify)
02D3:        Status  /00(Good)
02D4:        Message-In /00(Cmd_Cmplt)
Nejprve je navázána komunikace mezi řadičem a streamerem (ID 3), poté je zaslán příkaz k převinutí na začátek (Rezero/Rewind parametr Immed je nastaven na nula - přetočení je možno potvrdit teprve až operace skončí) Páska se odpojí od sběrnice a připojí se až po převinutí (Reselect). Následuje přikaz pro formátování (kód 19h; bit 0 hodnota 1 = formátování až na konec pásky; bit 1 hodnota 0 = odpojit od sběrnice). Po zformátování se páska opět připojí a potvrdí provedení operace pomocí Status Good a Command Complete.
4. Zápis a čtení pásky
Na pásek zapsali data 55h a po převinutí jsme je přečetli zpět. To se událo pomocí následující komunikace po SCSI:
0011:  Bus free
0013:     Arbitration w.ATN /80(7)
0014:     Select w.ATN /88(3,7)
0018:        Message-Out/C0(Identify)
0019:        Command /01(Rezero/Rewind) 00 00 00 00 00
001F:        Status  /02(Chk Cond)
0020:        Message-In /00(Cmd_Cmplt)
0021:  Bus free
0023:     Arbitration w.ATN /80(7)
0024:     Select w.ATN /88(3,7)
0028:        Message-Out/C0(Identify)
0029:        Command /0A(Write/Send) 01 00 00 01 00
002F:        Message-In /02(Save_Ptr)
0030:        Message-In /04(Disconnect)
0031:  Bus free
0033:     Arbitration  /08(3)
0034:     Reselect /88(3,7)
0037:        Message-In /80(Identify)
0038:           Data-Out/55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
0048:                    55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
0058:        Message-In /02(Save_Ptr)
0059:        Message-In /04(Disconnect)
005A:  Bus free
005C:     Arbitration  /08(3)
005D:     Reselect /88(3,7)
0060:        Message-In /80(Identify)
0061:        Status  /00(Good)
0062:        Message-In /00(Cmd_Cmplt)
0063:  Bus free
0065:     Arbitration w.ATN /80(7)
0066:     Select w.ATN /88(3,7)
006A:        Message-Out/C0(Identify)
006B:        Command /01(Rezero/Rewind) 00 00 00 00 00
0071:        Message-In /04(Disconnect)
0072:  Bus free
0074:     Arbitration  /08(3)
0075:     Reselect /88(3,7)
0078:        Message-In /80(Identify)
0079:        Status  /00(Good)
007A:        Message-In /00(Cmd_Cmplt)
007B:  Bus free
007D:     Arbitration w.ATN /80(7)
007E:     Select w.ATN /88(3,7)
0082:        Message-Out/C0(Identify)
0083:        Command /08(Read/Receive) 01 00 00 01 00
0089:        Message-In /02(Save_Ptr)
008A:        Message-In /04(Disconnect)
008B:  Bus free
008D:     Arbitration  /08(3)
008E:     Reselect /88(3,7)
0091:        Message-In /80(Identify)
0092:           Data-In /55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
00A2:                    55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
00B2:        Message-In /02(Save_Ptr)
00B3:        Message-In /04(Disconnect)
00B4:  Bus free
00B6:     Arbitration  /08(3)
00B7:     Reselect /88(3,7)
00BA:        Message-In /80(Identify)
00BB:        Status  /00(Good)
00BC:        Message-In /00(Cmd_Cmplt)
00BD:  Bus free
Páska je již na začátku, proto převinutí proběhne bez odpojení od sběrnice. Zápis se provede příkazem Write-Send, dojde k chvilkovému odpojení streameru od řadiče. Po zapsání se streamer opět připojí, dostane příkaz k převinutí (opět dochází k uvolnění sběrnice). Čtení dat se provede příkazem Read/Recieve a vše se potvrdí Statusem Good a zprávou Command Complete.