Sterownik napędu CD-ROM czesc 2.pdf

(187 KB) Pobierz
Sterownik napędu CD-ROM, część 2 - AVT-5078
Sterownik napędu CD−ROM
Sterownik napędu
CD−ROM, część 2
AVT−5078
W†drugiej czÍúci artyku³u
przedstawiamy informacje,
ktÛre przydadz¹ siÍ tym
spoúrÛd CzytelnikÛw, ktÛrzy
zamierzaj¹ dok³adnie poznaÊ
sposÛb sterowania napÍdami
CD-ROM oraz dyskami
twardymi. Zawarte w†artykule
informacje s¹ w†znacznym
stopniu powtÛrzeniem tych
opublikowanych w†EP6/02,
ale uwaøamy, øe ich
ìnadmiarî z†pewnoúci¹ nie
zaszkodzi.
Znaczenie bitÛw:
- UNC: ( Uncorrectable
Data Error ) - nienaprawial-
ny b³¹d danych,
- IDNF ( ID Not Found ) - nie
znaleziono sektora,
- ABRT ( Aborted ) - nie wykonano
komendy.
Pozosta³e bity takøe posiadaj¹
znaczenie, ale s¹ charakterystycz-
ne dla napÍdÛw z†wymiennym
noúnikiem, w†zwi¹zku z†czym nie
bÍd¹ tu omawiane.
Oprogramowanie interfejsu
ATA
Jak wspomnia³em w†pierwszej
czÍúci artyku³u, do sterowania
dyskiem twardych wykorzystuje
siÍ 9†rejestrÛw, ktÛrych wykaz
zawarto w† tab. 2 .
Licznik sektorÛw
Domyúlnie za jego pomoc¹ mo-
øemy zdecydowaÊ, ile sektorÛw
napÍd ma odczytaÊ lub zapisaÊ.
NiektÛre komendy wykorzystuj¹
go takøe do innych celÛw.
Numer sektora
Zaleønie od trybu adresowania
s³uøy do ustawienia numeru sek-
tora, jaki chcemy odczytaÊ lub
pierwszych 8†bajtÛw adresu LBA.
Rejestr danych
Jest to dwukierunkowy rejestr
s³uø¹cy do wysy³ania i†odbierania
danych. Jest uniwersalny, wiÍc
jego zastosowanie úciúle zaleøy od
operacji, jak¹ wykonujemy.
Numer cylindra Lo oraz Hi
To samo co przy sektorach, ale
okreúlamy numer cylindra lub
nastÍpne 16 bitÛw adresu LBA.
Numer g³owicy
7 6 5 4 3 2 1 0
1 LBA 1 DEV Numer glowicy/LBA (27:23)
Bity oznaczone ì1î powinny
byÊ zawsze ustawione na logiczn¹
ì1î. Za pomoc¹ bitu LBA wybie-
ramy sposÛb adresowania, o†ktÛ-
rym pÛüniej.
Bit DEV s³uøy do wyboru
napÍdu:
0†= MASTER
1†= SLAVE
Po zapisie bitu urz¹dzenie wy-
brane reaguje na wszystkie ko-
mendy i†operacje IO, a†drugie sta-
je siÍ ìniewidzialneî dopÛki go
nie uaktywnimy.
M³odsze 4†bity zawieraj¹ nu-
mer g³owicy lub pozosta³e 4†bity
adresu LBA.
Rejestr b³ÍdÛw
7
6
5
4
3
2
1
0
UNC
− IDNF − ABRT −
Tab. 2.
!CS0 !CS1 Adres Odczyt
Zapis
Rejestr kontrolny
0 1
6 Alternatywny rejestr statusu
Rejestr kontroli napędu
Rejestry komend i danych
1 0
0 Rejestr danych
Rejestr danych
1 0
1 Rejestr błędów
Rejestr dodatkowych opcji
1 0
2 Licznik sektorów
Licznik sektorów
1 0
3 Numer sektora/LBA (7:0)
Numer sektora/LBA (7:0)
1 0
4 Numer cylindra (7:0)/LBA(15:8) Numer cylindra (7:0)/LBA(15:8)
1 0
5 Numer cylindra (15:8)/LBA(23:16) Numer cylindra (15:8)/LBA(23:16)
1 0
6 Numer głowicy/wybór napędu/ Numer głowicy/wybór napędu/
LBA(27:24)
LBA(27:24)
1 0
7 Rejestr statusu
Rejestr komend
Liczby w nawiasach oznaczają zakresy bitów.
Elektronika Praktyczna 9/2002
43
P R O J E K T Y
1129215.001.png
Sterownik napędu CD−ROM
Adresowanie
Obecnie stosuje siÍ dwa sposo-
by adresowania sektorÛw na dysku
twardym. W†obu przypadkach roz-
miar sektora wynosi 512 bajtÛw.
Polecenie to s³uøy do wprowa-
dzenia napÍdu w†tryb standby ,
czyli obniøonego poboru mocy,
ktÛry jest uzyskiwany poprzez
zatrzymanie talerzy i†uúpienie na-
pÍdu aø do czasu prÛby dostÍpu
do danych.
Read sector
Rejestr 7
CHS
System ten jest domyúlny we
wszystkich napÍdach i†kompatybil-
ny wstecz. SkrÛt pochodzi od
Cylinder Head Sector . Aby zaad-
resowaÊ sektor w†tym systemie,
musimy podaÊ numer sektora, nu-
mer cylindra oraz numer g³owicy.
Liczba sektorÛw na úcieøkÍ, liczba
g³owic (úcieøek) na cylinder oraz
liczba cylindrÛw s¹ rÛøne dla
rÛønych napÍdÛw. Dla sektorÛw
zakres ten wynosi 1...255, dla
g³owic 0...15, a†dla cylindrÛw
0...65535. Za pomoc¹ nastÍpuj¹cego
wzoru moøemy obliczyÊ adres LBA:
LBA = (((cylinder * liczba
g³owic) + g³owica) * liczba sek-
torÛw na g³owicÍ) + sektor - 1
Potrzebne do tego informacje
moøna zdobyÊ za pomoc¹ polece-
nia Identify Device , ktÛr¹ omÛwi-
my pÛüniej. Taki system jest
raczej niewygodny, wiÍc powsta³
nowy system adresowania:
6
5
4
3
2
1
0
1 −
2 liczba sektorów do odczytania
3 numer sektora lub LBA
4 numer cylindra lub LBA
5 numer cylindra lub LBA
6 1 LBA 1 DEV numer głowicy lub LBA
7 21h lub 20h (z powtórzeniami)
Jest to najbardziej interesuj¹ce
dla nas polecenie. Pozwala na
odczyt maksymalnie 256 sekto-
rÛw. Jeúli wartoúÊ rejestru 2†wy-
nosi zero, wtedy takøe dostaniemy
256 sektorÛw. Rejestry 3...6 za-
wieraj¹ adres pocz¹tkowego sek-
tora. Jeúli bit LBA = 1, wtedy
stosujemy adresowanie LBA. Gdy
LBA = 0 - CHS. Po wydaniu
komendy trzeba zaczekaÊ aø kon-
troler napÍdu wyzeruje flagÍ BSY
i†ustawi DRQ. Komenda posiada
dwie odmiany - wersja z†powtÛ-
rzeniami nakazuje napÍdowi
w†przypadku natrafienia na uszko-
dzony sektor prÛbowaÊ odczytaÊ
go ponownie. Liczba prÛb jest
nieokreúlona i†specyficzna dla rÛø-
nych napÍdÛw.
Write sector
Rejestr 7
Rys. 4. Algorytm dostępu do
rejestrów kontrolera napędu
Rejestr poleceÒ
Jest to rejestr tylko do zapisu.
Po wpisaniu do niego kodu ko-
mendy kontroler natychmiast
przystÍpuje do jej wykonywania.
Rejestr statusu
7 6 5 4 3 2 1 0
BSY DRDY − DSC DRQ − − ERR
- BSY: jak sama nazwa wskazuje,
sygnalizuje on zajÍtoúÊ kontro-
lera. NapÍd ustawia tÍ flagÍ gdy
wykonuje komendÍ lub po ze-
rowaniu, aby zasygnalizowaÊ
brak gotowoúci.
- DRDY: wskazuje na gotowoúÊ
napÍdu.
- DSC: wskazuje, øe g³owica znaj-
duje siÍ nad ø¹dan¹ úcieøk¹.
- DRQ: flaga informuje, øe napÍd
jest gotowy do rozpoczÍcia za-
pisu lub odczytu danych.
- ERR: wskazuje na b³¹d i†w†ta-
kich wypadku wypada³oby od-
czytaÊ rejestr b³Ídu, aby dowie-
dzieÊ siÍ o†szczegÛ³y.
LBA
Jest to akronim od Logical Block
Adressing . System jest niesamowicie
prosty - do zaadresowania sektora
uøywa siÍ jednej 28-bitowej liczby.
Policzmy: 2 28 = 268435456,
268435456 * 512 (bajtÛw w†sektorze)
= 137438953472, co daje:
137438953472/1024/1024 = 131072
MB, czyli moøemy zaadresowaÊ
130GB danych - wydaje siÍ to duøo,
ale bior¹c pod uwagÍ to, øe dziú
produkuje siÍ juø dyski o†takiej
pojemnoúci, producenci bÍd¹ musieli
nied³ugo wymyúliÊ coú nowego.
6
5
4
3
2
1
0
1
2
liczba sektorów do zapisania
3
numer sektora lub LBA
4
numer cylindra lub LBA
5
numer cylindra lub LBA
6
1 LBA 1 DEV numer głowicy lub LBA
7
31h lub 30h (z powtórzeniami)
Tab. 3.
Nr słowa Opis
0 bit 15
0 = ATA, 1 = ATAPI
1 Liczba cylindrów
3 Liczba głowic
6 Liczba sektorów na ścieżkę
(głowicę)
10...19 Numer seryjny (20 znaków
ASCII)
23...26 Wersja oprogramowania
(8 znaków ASCII)
27...46 Nazwa urządzenia (40 znaków
ASCII)
57...58 Pojemność wyrażona
w sektorach
60...61 Całkowita liczba możliwych
do zaadresowania sektorów
(tryb LBA)
Polecenia
Kontrolery dyskÛw twardych maj¹
ich sporo, ale my zajmiemy siÍ tylko
czterema najwaøniejszymi. Reszta po-
leceÒ to g³Ûwnie odmiany tych naj-
waøniejszych, komendy do obs³ugi
hase³ dostÍpu, trybÛw zasilania itp.
Standby
Rejestr 7
Rejestr kontroli
7 6 5 4 3 2 1 0
− − − − − SRST −INTEN −
- SRST: programowe zerowanie
kontrolera.
- -INTEN: s³uøy do w³¹czenia/
wy³¹czenia generacji przerwania.
6
5
4
3
2
1
0
Przyk³adowy algorytm wykona-
nia komendy przedstawiono na rys.
4. Przesy³anie danych w†trybie PIO
odbywa siÍ poprzez kolejne odczyty
lub zapisy rejestru danych. Zawsze
pierwszy bajt znajduje siÍ w†m³od-
szej czÍúci odczytanego s³owa.
1 −
2−
3−
4−
5−
6
1
1 DEV −
7
94h lub E0h
44
Elektronika Praktyczna 9/2002
1129215.002.png 1129215.003.png
Sterownik napędu CD−ROM
Zasada dzia³ania jest iden-
tyczna jak w†przypadku Read
Sector , ale oczywiúcie dane za-
pisujemy. Po przes³aniu wszyst-
kich danych do napÍdu musimy
zaczekaÊ aø kontroler napÍdu
wyzeruje flagÍ BSY.
Identify Device
Rejestr 7
4−
5−
6
1 DEV −
To s¹ w†zasadzie wszystkie
informacje, jakich potrzebujemy,
aby operowaÊ na danych z†dysku
twardego. Za miesi¹c zajmiemy
siÍ omÛwieniem interfejsu ATAPI.
Micha³ Wysocki
mwsoft@satkabel.com.pl
7 Device
Polecenie s³uøy do odczytu
informacji o†napÍdzie. Po jej
wydaniu otrzymujemy 256 s³Ûw,
z†ktÛrych wiÍkszoúÊ nie jest
wykorzystywana. W† tab. 3 znaj-
duje siÍ zestawienie najwaø-
niejszych i†najbardziej poøytecz-
nych.
6
5
4
3
2
1
0
Wzory p³ytek drukowanych w for-
macie PDF s¹ dostÍpne w Internecie
pod adresem: http://www.ep.com.pl/
?pdf/wrzesien02.htm .
1 −
2−
3−
Elektronika Praktyczna 9/2002
45
1
1129215.004.png
Zgłoś jeśli naruszono regulamin