81_83.PDF
(
145 KB
)
Pobierz
Specyfikacja standardu ATAPI - sterowanie CD-ROM-ów i dysków twardych w praktyce, część 2
K U R S
Sterowanie CD−ROM−ów i dysków
twardych w praktyce, część 2
W drugiej czÍúci artyku³u publikujemy resztÍ podstawowych informacji zwi¹zanych z
programow¹ obs³ug¹ urz¹dzeÒ do³¹czonych do interfejsu ATA. DziÍki nim samodzielne
przygotowanie oprogramowania dla mikrokontrolera wspÛ³pracuj¹cego z dyskiem twardym bÍdzie
znacznie ³atwiejsze niø dotychczas.
Tryby adresowania
WyrÛøniamy dwa, wczeúniej juø
wspomniane, tryby adresowania:
1. CHS - adresowanie odbywa siÍ za
pomoc¹ trzech pÛl:
- Cylinder (1...255),
- Head (1...15),
- Sector (0...65535).
2. LBA, w†ktÛrym adres jest wylicza-
ny ze wzoru:
LBA = ((cylinder *
heads_per_cylinder + heads) * sec-
tors_per_track) + sector - 1
.
Gdy urz¹dzenie posiada mniej niø
16515072 sektorÛw, domyúlnym trybem
adresowania staje siÍ tryb CHS. W†prze-
ciwnym przypadku - LBA. Sterownik
wbudowany w†napÍd, bez wzglÍdu na
pojemnoúÊ noúnika danych, powinien
obs³ugiwaÊ oba tryby adresowania. Host
wybiera tryb adresowanie poprzez usta-
wienie bitu
LBA
w†rejestrze
Device/He-
ad
. Po w³¹czeniu zasilania urz¹dzenie
IDE przechodzi automatycznie na tryb
adresowania CHS.
kazu. Aby przes³aÊ 12-bajtow¹ ramkÍ
steruj¹c¹ naleøy przedtem - kaødora-
zowo - ustawiÊ odpowiednie rejestry.
Zaczynamy od sprawdzenie rejest-
ru
Alternate Status
i†stanu bitu
BSY
.
Odczytujemy cyklicznie w†pÍtli rejestr
dopÛki bit
BSY
nie bÍdzie rÛwny
ì0î. Odczytujemy rejestr
Status
-
spowoduje to skasowanie ewentualne-
go przerwania. Do rejestru
Cylinder
Low
wpisujemy wartoúÊ 12 (dziesiÍt-
nie) - jest to liczba danych, jak¹
chcemy przes³aÊ do urz¹dzenia. Ze-
rujemy rejestry
Cylinder High
,
Featu-
res
,
Sector Count
,
Sector Number
. Do
rejestrÛw
Cylinder Low
i†
Cylinder
High
wpisujemy liczbÍ bajtÛw, jak¹
jesteúmy w†stanie odebraÊ od napÍ-
du. Sprawdzamy wartoúÊ bitu w†re-
jestrze
Alternate Status
i†czekamy do-
pÛki bit BSY = 1. Odczytujemy re-
jestr
Status
- spowoduje to skasowa-
nie zadania obs³ugi przerwania.
Wpisujemy do rejestru
Command
tzw.
Atapi Packet Command
- bajt
o†wartoúci 0xA0. Bajt ten informuje
urz¹dzenie, øe bÍdziemy przesy³aÊ
ramk͆steruj¹c¹, a nastÍpnie:
- odczytujemy zawartoúÊ rejestru
Al-
ternate Status
;
- czekamy, aø bit BSY bÍdzie rÛwny
ì0î;
- odczytujemy zawartoúÊ rejestru
Sta-
tus
;
- sprawdzamy wartoúÊ bitu
ERR
-
powinna byÊ rÛwna ì0î;
- sprawdzamy wartoúÊ bitu
DRQ
w†rejestrze
Status
- powinien
byʆteraz ustawiony.
- teraz moøemy wpisywaÊ 12-bajtow¹
ramkÍ steruj¹c¹;
- dane wprowadzamy na magistralÍ
danych DD0...15; bajty parzyste
ramki (0, 2, 4, 6, 8, 10) wpisuje-
Sterowanie CD-ROM-em
Sterowanie CD-ROM-em odbywa
siÍ za pomoc¹ 12-bajtowych ramek
zwanych rozkazami. Pierwszy bajt
w†ramce jest jednoczeúnie kodem roz-
Elektronika Praktyczna 8/2002
81
K U R S
my na mniej znacz¹c¹ czÍúÊ ma-
gistrali danych DD0...7 a†bajty nie-
parzyste (1, 3, 5, 7, 9, 11) na
bardziej znacz¹c¹ czÍúÊ magistrali
DD8...15; kaødorazowo musimy wpi-
saÊ dwa bajty, czyli sumarycznie
dokonujemy szeúÊ cykli zapisu;
obecnie tylko bardzo stare urz¹dze-
nia obs³uguj¹ transmisjÍ danych
w†trybie oúmiobitowym.
Gdy porcja danych jest juø goto-
wa na magistrali danych DD0...15, ze-
rujemy liniÍ
DIOW
. Odczekujemy ok.
1†
nych. Jak widaÊ kod komendy (naj-
m³odszy bajt) jest w†tych trzech przy-
padkach taki sam. Zmienia siÍ tylko
wartoúÊ czwartego bajtu. W†bajcie
pierwszym ustawiony jest bit zerowy
- oznacza to, øe
Status
ma byÊ
zwrÛcony natychmiast po tym, jak
sprawdzona bÍdzie poprawnoúÊ
przes³anej ramki przez CD-ROM, sta-
nu tacki (czy wysuniÍta, czy nie)
oraz status p³yty. W†przeciwnym
przypadku
Status
jest zwracany po
skoÒczeniu ca³ej operacji.
4
0x00
5
0x00
6
0x01 Numer początkowej ścieżki od której CD−ROM ma
zwrócić informację
7
0x00
8
0x64 100 bajtów na dane z CD−ROM−u
9
0x00
10
0x00
11
0x00
Poniøej pokazano przyk³adow¹
ramkÍ wys³an¹ przez CD-ROM w†od-
powiedzi na zapytanie o†TOC. Pierw-
sze dwa bajty okreúlaj¹ iloúÊ
przes³anej informacji w†baj-
tach. Bajt czwarty okreúla
liczbÍ utworÛw†na p³ycie.
Bajty: 5, 13, 20 itd. s¹ znacz-
nikami pocz¹tku adresu - ma-
j¹ sta³¹ wartoúÊ 0x10. Maj¹
charakter czysto informacyjny.
Waøn¹ úcieøk¹ jest úcieøka
o†numerze 0xAA (tzw.
Lead
Track
) - adres tej úcieøki oznacza
ostatni sektor na p³ycie CD.
s i†ustawiamy
DIOW
(po-
ziom wysoki). Dane wpisywa-
ne s¹†do urz¹dzenia zboczem
narastaj¹cym. Cykl zapisu po-
wtarzamy szeúÊ razy. Po wpi-
saniu 12 bajtÛw ramki urz¹-
dzenie ustawia bit BSY. Od-
czytuj¹c stan rejestru
Alterna-
te Status
czekamy, aø bit
BSY bÍdzie rÛwny zero. Gdy
tak siÍ stanie, odczytujemy rejestr
Sta-
tus
. Sprawdzamy czy bit ERR = 0
oraz czy bit DRQ = 1. NastÍpnie mu-
simy odczytaÊ ile bajtÛw danych ma
do przekazania CD-ROM. WartoúÊ ta
sk³adana jest z†m³odszego bajtu pobie-
ranego z†rejestru
Cylinder Low
, oraz
starszego bajtu z†rejestru
Cylinder
High
. Dane z†CD-ROM-u do hosta s¹
transmitowane w†trybie 16-bitowym.
Kaøde opadaj¹ce zbocze sygna³u na li-
nii
DIOR
powoduje wystawienie
dwÛch bajtÛw danych na magistralÍ
DD0...15. Po odczytanej liczbie bajtÛw
powinniúmy sprawdziÊ czy bit
ERR
nie jest ustawiony w†rejestrze Status.
Gdy bit ERR=0 moøemy przyj¹Ê, øe
dane odebrano prawid³owo.
Wyøej wymienione czynnoúci po-
wtarzamy kaødorazowo, gdy chcemy
przes³aÊ porcje danych do CD-ROM-u.
Napędy CD−ROM są wyposażone w interfejs
ATAPI, który jest rozwinięciem klasycznego
IDE (ATA). Charakteryzuje się on
zastosowaniem protokołu niemal identyczne−
go ze SCSI, przy zachowaniu mechanicznej
i elektrycznej kompatybilności z IDE.
TOC -
Table of Contents
- to bar-
dzo waøna tablica. Zawiera adresy
pocz¹tkowe poszczegÛlnych úcieøek,
sesji, itp. Jej odczyt przebiega nastÍ-
puj¹co:
Zatrzymanie odtwarzania
p³yty CD
audio (
Stop
) wymaga wys³ania nastÍ-
puj¹cej sekwencji bajtÛw: 0x4E, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00.
Test gotowoúci
urz¹dzenia wyma-
ga wys³ania nastÍpuj¹cej sekwencji
bajtÛw: 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00.
NastÍpnie wysy³amy komendÍ
Re-
quest Sense Key
, ktÛra sk³ada siÍ
z†nastÍpuj¹cej sekwencji bajtÛw:
0
Numer utworu Adres utworu
MSB
...
...
LSB
1
0x00 0x00 0x20 0x00
2
0x00 0x20 0x38 0x1C
3
0x00 0x2C 0x3B 0x21
4
0x00 0x37 0x33 0x03
0xAA
0x00 0x4A 0x38 0x1C
Mamy, wiÍc odczytan¹ informacjÍ
o†adresach úcieøek. Teraz moøemy
przyst¹piÊ do odtwarzania utworÛw.
Przebiega to w†nastÍpuj¹cy sposÛb:
Nr bajtu
Wartość
Komentarz
0
0x00
MSB TOC Data Length
1
0x2A
LSB TOC Data Length
0x03 W wyniku odpowiedzi na tę ramkę otrzymamy
z CD−ROM−u ASC i ASCQ.
Znajdują się one odpowiednio w bajcie 12 i 13.
ASC = 0x00 oznacza płytę CD w napędzie.
ASC = 0x3A brak płyty w napędzie.
ASC = 0x02 głowice nie ustawiły się jeszcze −
musimy czekać.
ASC = 0x04 brak gotowości napędu − musimy
czekać.
2
0x01
First Track Number
3
0x04
Last Track Number
4
0x00
Reserved
5
0x10
ADR (4 bity)|CONTROL (4 bity)
Formaty ramek steruj¹cych
napÍdem
Eject CD
- wysuniÍcie p³yty z†na-
pÍdu wymaga wys³ania nastÍpuj¹cej
sekwencji bajtÛw: 0x1B, 0x01, 0x00,
0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00.
Load CD
- za³adowanie kr¹øka do
napÍdu wymaga wys³ania nastÍpuj¹-
cej sekwencji bajtÛw: 0x1B, 0x01,
0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00.
Start CD
- wystartowanie napÍdu
i†przeczytanie TOC wymaga wys³ania
nastÍpuj¹cej sekwencji bajtÛw: 0x1B,
0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00.
Stop CD
- zatrzymanie napÍdu
wymaga wys³ania nastÍpuj¹cej sek-
wencji bajtÛw: 0x1B, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00.
Po wykonaniu powyøszych pole-
ceÒ CD-ROM nie zwraca øadnych da-
6
0x01
TrackNumber
7
0x00
Reserved
8
0x00
MSB
9
0x00
10
0x02
1
0x00
11
0x00
LSB
2
0x00
12
0x00
Reserved
3
0x00
13
0x10
ADR (4 bity)| CONTROL (4 bity)
4
0x60
14
0x02
TrackNumber
5
0x00
15
0x00
Reserved
6
0x00
16
0x00
7
0x00
17
0x20
8
0x00
18
0x38
9
0x00
19
0x1C
10
0x00
20
0x00
Reserved
11
0x00
21
0x10
ADR(4 bity)|CONTROL(4 bity)
22
0x03
Track Number
Odczyt TOC wymaga wys³ania na-
stÍpuj¹cej sekwencji bajtÛw:
0 0x43
23
0x00
Reserved
24
0x00
25
0x2C
1
0x00 CD zwróci informacje w LBA (0x00)− nie w MSF
(0x02)
26
0x3B
27
0x21
2
0x00
28
0x00
Reserved
3
0x00
29
0x10
ADR(4 bity)|CONTROL(4 bity)
82
Elektronika Praktyczna 8/2002
0x00
0x38
K U R S
30
0x04
Track Number
31
0x00
Reserved
32
0x00
33
0x37
34
0x33
35
0x03
36
0x00
37
0x10
38
0xAA
Lead OUT
39
0x00
40
0x00
41
0x4A
42
0x38
43
0x1C
Odtwarzanie p³yty CD audio wy-
maga wys³ania nastÍpuj¹cej sekwencji
bajtÛw:
0
0xA5
1
0x00
2
0x00
3
0x00
Adres początkowy utworu
(tutaj track 1)
4
0x20
5
0x00
6
0x00
7
0x4A
Ilość danych − nie adres
końcowy!!!
Rys. 4. Przebiegi czasowe charakterystyczne dla zapisu
polecenia do sterownika
8
0x38
Czyli do odtworzenia cała płyta
9
0x1C
10
0x00
Do rejestru
Command
wpisujemy
wartoúÊ 0x20 - kod komendy
ATA_READ_SECTS
. NastÍpnie czeka-
my ok. 10
Count
wpisujemy liczbÍ sektorÛw do
odczytu.
11
0x00
Wstrzymanie lub wznowienie od-
twarzania
(PAUSE) nastÍpuje po wy-
s³aniu nastÍpuj¹cej sekwencji bajtÛw:
0x4B, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
xxx = 0x01
(odtwarzanie
lub wznowienie)
xxx = 0x00
(odtwa-
rzanie wstrzymane), 0x00, 0x00,
0x00.
Zatrzymanie odtwarzania
p³yty CD
audio (STOP) nastÍpuje po wys³aniu
nastÍpuj¹cej sekwencji bajtÛw: 0x4E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00.
s, odczytujemy rejestr
Alternate Status
i†sprawdzamy bit
BSY
. Czekamy aø bit BSY bÍdzie
wyzerowany. Odczytujemy rejestr
Sta-
tus
, aby skasowaÊ przerwanie. Spraw-
dzamy stan bitÛw:
ERR
(powinien
byÊ wyzerowany),
DRQ
(powinien
byÊ ustawiony - urz¹dzenie chce
przes³aÊ dla nas dane).
Dane odczytujemy jak w†poprzed-
nim przyk³adzie. Opadaj¹ce zbocze
na linii
DIOR
powoduje wystawienie
dwÛch kolejnych bajtÛw na magistra-
lÍ DD0...15. IloúÊ danych, ktÛre mu-
simy odebraÊ jest okreúlona liczb¹
sektorÛw, jak¹ wczeúniej wpisaliúmy
do rejestru
Sector Number
pomnoøo-
n¹ przez zmienn¹, ktÛra okreúla licz-
bÍ bajtÛw w†sektorze - tzw.
BytesPer-
Sector
. WartoúÊ ta moøe wynosiÊ
4096 lub 8192 B.
Zaleønoúci czasowe
Na
rys. 4
przedstawiono przyk³a-
dowe zaleønoúci czasowe przebiegu
sygna³Ûw na magistrali danych i†li-
niach steruj¹cych CD-ROM-u. Na ry-
sunku pominiÍto dok³adne specyfika-
cje czasÛw pomiÍdzy zmianami syg-
na³Ûw - ma to byÊ tylko ilustracja
dzia³ania interfejsu.
Aplikacja
Na podstawie przedstawionego
opisu przygotowa³em oprogramowanie
steruj¹ce zaimplementowane w†mikro-
kontrolerze z†rodziny AVR. Program
dla niego jest napisany w†C - wszyst-
kie ürÛd³a s¹ dostÍpne na stronie in-
ternetowej
http://www.pelos.pl/cd_free/
oraz na p³ycie CD-EP8/2002B.
Pawel Dienwebel
pelos@pelos.pl
Odczyt danych z†sektorÛw
Dysk twardy w†trybie CHS
Sprawdzamy stan bitu
Busy
w†re-
jestrze
Alternate status
. Gdy BSY =
1, czekamy na BSY=0 i†odczytujemy
rejestr
Status
. W†rejestrze
Device He-
ad
zerujemy bity
LBA
(odczyt bÍdzie
w†trybie CHS) oraz bit
DEV
(gdy
chcemy odczytaÊ dane z†
Mastera
-
w†przeciwnym wypadku ustawiamy
ten bit). Bity 7 i†5 domyúlnie usta-
wiamy. Na mniej znacz¹ce bity tego
rejestru wpisujemy adres
Head
. W†re-
jestrze
Alternate Status
sprawdzamy
stan bitÛw
DRDY
i†
BSY
. Pierwszy
musi byÊ ustawiony, drugi wyzerowa-
ny. Odczytujemy rejestr
Status
. Do
rejestrÛw
Cylinder High
i†
Cylinder
Low
wpisujemy starszy bajt i†m³od-
szy bajt pocz¹tkowego adresu
Cylin-
der
. Do rejestru
Sector Number
wpi-
sujemy liczbÍ sektorÛw do odczytu.
Dysk twardy w†trybie LBA
Dane odczytujemy bardzo podob-
nie jak w†trybie CHS z†t¹ rÛønic¹, øe
adres pocz¹tkowy podajemy w†LBA,
nastÍpnie sprawdzamy stan bitu
BSY
.
Gdy jest wyzerowany - ustawiamy bit
LBA w†rejestrze
Device/Head
. Do
mniej znacz¹cej po³owy rejestru wpi-
sujemy bity 27...24 adresu pocz¹tko-
wego w†trybie LBA. Do rejestru
Cy-
linder High
wpisujemy bity 23...16
adresu LBA, do rejestru
Cylinder Low
bity 15...8, a do rejestru
Sector Num-
ber
bity 0...7. Do rejestru
Sector
Literatura
[1] INF-8020.pdf - ÑATA Packet In-
terface for CDROM rev. 2.6 lub
wyøszeî
[2] CD3610 - Command Specification
[3] http://www.pelos.pl/cd_free/
[4] http://www.yampp.com
[5] Standard ECMA -130 ìData inter-
change on read-only 120 mm
optical data disks (CD-ROM)î
[6] SFF8090i v4 - Fuji Commands for
Multimedia Devices
[7] http://www.republika.pl/romek_by/
index.html
Elektronika Praktyczna 8/2002
83
0x00
0x38
Plik z chomika:
kendzior21
Inne pliki z tego folderu:
19_21.PDF
(198 KB)
1.PDF
(310 KB)
125_126.PDF
(386 KB)
121_122.PDF
(184 KB)
23_27.PDF
(556 KB)
Inne foldery tego chomika:
01.02
02.02
03.02
04.02
05.02
Zgłoś jeśli
naruszono regulamin