K U R S
Sterowanie CD-ROM-ów i dysków
twardych w praktyce, część 1
Od dÅ‚uÅ‚szego czasu obserwujÍ rosnÄ…ce zainteresowanie elektronikÛw wykorzystaniem napÍdÛw
CD i dyskÛw twardych we wÅ‚asnych projektach. NajczÍÅ›ciej sÄ… to pomysÅ‚y zbudowania
własnego odtwarzacza płyt CD audio lub wykorzystanie dysku twardego jako nośnika dla
plikÛw MP3. Niestety, aby tego dokonaĘ, trzeba przebrnąĘ przez obszernÄ… dokumentacjÍ
standardu ATAPI oraz interfejsu IDE.
ìPrzekopywanieî siÍ nich dostÍp poprzez stosun-
przez dostÍpnÄ… dokumenta- IDE (Integrated Disc Electronics) oznacza kowo Å‚atwy w obsÅ‚udze 16-
cjÍ i wybranie najwaÅ‚niej- bitowy interfejs IDE. W zaleÅ‚-
prosty interfejs umożliwiający dołączenie dysku
szych zagadnieÒ zajÍÅ‚o mi noÅ›ci od aplikacji (kompute-
twardego do magistrali ISA komputera PC.
wiele dni. Niewiele przydat- ry stacjonarne, przenośne)
ATA (AT - Attachment) jest synonimem IDE,
nych informacji mołna i rozmiaru dysku twardego
znaleüĘ w Internecie. Ta obecnie powszechnie stosowanym przez (2,5î/3,5î) lub CD-ROM-u
niekorzystna dla konstrukto- wyrÛÅ‚niamy dwa rodzaje zÅ‚Ä…-
producentów dysków twardych.
rÛw sytuacja skÅ‚oniÅ‚a mnie czy IDE (rys. 2):
Standard ATA opisuje sposób wymiany danych
do napisania tego artykułu. - 40-pinowe o rastrze 2,5mm,
pomiędzy sterownikiem i napędem.
Jest dla mnie pretekstem do - 44-pinowe o rastrze 2,0 mm
usystematyzowania wcześniej (na pinach od 41 do 44 są
zdobytej wiedzy, niezbÍdnej do samo- SygnaÅ‚y sterujÄ…ce w IDE dodatkowe linie zasilania, sposÛb ich
dzielnego przygotowania programu dla Schemat blokowy ilustrujący budo- podłączenia zaleły od typu dysku).
mikrokontrolera sterujÄ…cego napÍdami wÍ typowego dysku twardego przedsta- Maksymalna dÅ‚ugośĘ kabla Å‚Ä…czÄ…ce-
CD-ROM lub HDD. Mam nadziejÍ, Å‚e wiono na rys. 1. DziÍki temu, Å‚e go kontroler z napÍdem moÅ‚e wynosiĘ
artykuÅ‚ bÍdzie pomocny wielu z Was w napÍdzie zintegrowano zaawansowane 46 cm.
podczas projektowaniu ukÅ‚adÛw tego funkcjonalnie ukÅ‚ady sterujÄ…ce odczytem
rodzaju. i zapisem danych, uÅ‚ytkownik ma do Funkcje sygnaÅ‚Ûw w IDE
- CS0 - Chip Select 0 - słuły do wy-
boru rejestrÛw Command Block Re-
gisters.
- CS1 - Chip Select 1 - słuły do wy-
boru rejestrÛw Control Block Regis-
ters.
- DA1/2/3 - linie adresowe słułą do
wyboru jednego z rejestrÛw z grupy
Command lub Control Block Registers
- moÅ‚liwy jest wiÍc dostÍp do 16
rejestrÛw (osiem z grupy Control
i osiem z grupy Command).
- DASP - wyjście typu OC, dołączane
zazwyczaj do VCC poprzez rezystor
10k&! (nie jest konieczny). Sygnalizu-
je aktywnośĘ urządzenia IDE, lub
obecnośĘ urządzenia pierwszego w ka-
nale IDE. MoÅ‚na podÅ‚Ä…czyĘ diodÍ
LED.
- DD0...15 - dwukierunkowa szyna da-
nych 8- lub 16-bitowa. Do wpisywa-
nia danych 8-bitowych wykorzystywa-
na jest mniej znaczÄ…ca czÍśĘ (tylko
do wpisywania danych do rejestrÛw).
Transmisja ìzwykÅ‚ychî danych odby-
wa siÍ tylko w trybie 16-bitowym.
- DIOR (Device I/O Read) - opadajÄ…ce
zbocze sygnału na tej linii powoduje
wyprowadzenie danych przez urzÄ…dze-
Elektronika Praktyczna 7/2002
85
K U R S
wanie danej do dowolnego rejestru
Tab. 1. Parametry statyczne IDE
powoduje jednoczesne zapisanie rejes-
Opis Min Max trÛw w obydwu urzÄ…dzeniach. Wynika
to z faktu, Å‚e w IDE nie wystÍpujÄ…
IoL Prąd przyjmowany przez bufor wyjściowy (1) 4 mA
specjalne linie adresowe do wyboru
IoH PrÄ…d oddawany przez bufor wyjÅ›ciowy 400 µA
jednego z urzÄ…dzeÒ Master/Slave, do
ViH Poziom napięcia traktowany jako stan wysoki 2,0 V
lub z ktÛrego chcemy odczytaĘ lub
wpisaĘ dane. Adresowanie odbywa siÍ
ViL Poziom napięcia traktowany jako stan niski 0,8 V
poprzez ustawienie lub wyzerowanie
VoH NapiÄ™cie wyjÅ›ciowe w stanie wysokim (IoH = -400 µA) 2,4 V
bitu DEV w rejestrze Device/Head.
VoL Napięcie wyjściowe w stanie niskim (IoL = 12 mA) 0,5 V
Gdy DEV=0, komunikacja odbywa siÍ
Uwagi:
z Masterem, a gdy DEV=1 to ze Sla-
1. Prąd IoL dla DASP powinien wynosić min. 12 mA, aby zapewnić wymagane czasy narastania i opa-
vem.
dania zboczy.
2. PrÄ…d IoH o wartoÅ›ci 400 µA jest niewystarczajÄ…cy w przypadku, gdy DMARQ jest typowo podÅ‚Ä…czo-
Rejestry
ny do masy przez rezystor 5,6 k&!.
Rejestry nalełące do tzw. bloku
rejestrÛw poleceÒ (Command Registers)
Tab. 2. Parametry dynamiczne IDE
słułą do wysyłania komend dla ste-
rownika urzÄ…dzenia i odczytywania
Opis Min Max
statusu urządzenia. Rejestry nalełące
trise Czasy narastania zboczy sygnałów na złączu IDE (1) 5 ns
do tzw. bloku rejestrÛw sterowania
tfall Czasy opadania zboczy sygnałów na złączu IDE (1) 5 ns
(Control Registers) słułą do kontroli
parametrÛw urzÄ…dzenia, oraz do od-
Cin Pojemność wejść urządzenia sterującego (HOSTa) 25 pF
czytywania alternatywnego statusu.
Cout Pojemność wyjść urządzenia sterującego (HOSTa) 25 pF
SposÛb adresowania rejestrÛw pokaza-
Cin Pojemność obwodów wejściowych 20 pF
no w tab. 4.
Cout Pojemność obwodów wyjściowych 20 pF
Rejestr Alternate Status Adres 6hCS 1h
Uwagi:
7 6 5 4 3 2 1 0
1. trise i tfall są mierzone pomiędzy 10...90% pełnej amplitudy sygnału przy sumarycznym obciążeniu
pojemnościowym 40 pF. BSY DRDY DF DSC DRQ CORR IDX ERR
DostÍp - tylko odczyt.
Uwaga: gdy BSY = 0, mołna od-
nie IDE na magistralÍ DD0...15. SET, ustawienia bitu SRST w rejest- czytywaĘ resztÍ bitÛw.
Natomiast narastajÄ…ce zbocze na linii rze Device Control, zapisanie do re- Uwagi dodatkowe: odczyt rejestru
powoduje akceptacjÍ danych po stro- jestru Command przez hosta lub od- nie powoduje skasowania przerwania
nie hosta. Host nie powinien reago- czytanie rejestru Status przez hosta. od urzÄ…dzenia IDE ani nie potwierdza
waĘ na dane wystÍpujÄ…ce na magist- - IORDY - sygnalizuje brak gotowoÅ›ci przyjÍcia przerwania.
rali pomiÍdzy zboczami tego sygnaÅ‚u. urzÄ…dzenia do przesÅ‚ania danych do/ Znaczenie poszczegÛlnych bitÛw -
- DIOW - (Device I/O Write) - narasta- z rejestrÛw urzÄ…dzenia. ObsÅ‚uga tego takie samo jak dla rejestru Statusu.
jące zbocze tego sygnału powoduje sygnału jest wymagana w trybie pra-
zatrzaÅ›niÍcie danych w urzÄ…dzeniu. cy PIO3. Rejestr Command Adres 7hCS 2h
DopÛki dane nie zostanÄ… zatrzaÅ›niÍte - PDIAG - wyjÅ›cie typu OC, ktÛre na- 7 6 5 4 3 2 1 0
sterownik napÍdu nie przywiÄ…zuje do leÅ‚y ìpodpiąĘî do +5V poprzez re- DostÍp - tylko do zapisu. Gdy host
nich Å‚adnej wagi. zystor 10 k&!. SygnaÅ‚ na wyjÅ›ciu syg- prÛbuje odczytaĘ rejestr, odczytywany
- DMACK (DMA Acknowledge) - jest nalizuje zakoÒczenie autodiagnostyki. jest rejestr Statusu.
sygnałem wykorzystywanym przy - RESET - stan niski zeruje sterownik Uwaga: gdy BSY = 0, DRQ = 0
transmisji danych z udziaÅ‚em DMA. napÍdu. i DMACK nie jest ustawiony, moÅ‚na za-
Jest pozytywną odpowiedzią (potwier- pisywaĘ do tego rejestru.
dzeniem) ze strony hosta na Å‚Ä…danie Adresowanie urzÄ…dzeÒ IDE Uwagi dodatkowe: zapis do rejestru
DMARQ ze strony CD-ROM-u lub (Master/Slave) powoduje skasowanie przerwania od
HDD. Gdy do jednego kabla IDE sÄ… do- urzÄ…dzenia IDE.
- DMARQ (DMA Request) - sygnaÅ‚ jest Å‚Ä…czone dwa urzÄ…dzenia (np. dysk Znaczenie poszczegÛlnych bitÛw -
ustawiany przez CD-ROM lub HDD, twardy i CD-ROM - rys. 3), to wpisy- brak.
gdy jest gotowy do transmisji danych
w trybie DMA. W trybie DMA Å‚aden
z sygnaÅ‚Ûw CS0/1/2 nie powinien byĘ
ustawiony. Dane sÄ… transmitowane
z wykorzystaniem całej szerokości ma-
gistrali DD0...15 (w trybie 16-bito-
wym). Kierunek transmisji danych
jest ustalany za pomocÄ… sygnaÅ‚Ûw
DIOR, DIOW.
- INTRQ (Interrupt Request) - zgłosze-
nie łądania obsługi przerwania. Syg-
nał ten jest ustawiony, gdy urządze-
nie jest wybrane i gdy układ sterują-
cy (host) skasował bit nIEN w rejes-
trze Device Control. Oczywiście, do-
Å‚Ä…czony napÍd musi Å‚Ä…daĘ obsÅ‚ugi
przerwania. ØÄ…danie przerwania na-
stÍpuje w wyniku zakoÒczenia wyko-
nywania komendy i gotowości do
transmisji danych w trybie PIO (z
wyjÄ…tkiem pierwszego bloku). Wy-
czyściĘ łądanie przerwania mołna za
Rys. 1. Budowa typowego dysku twardego
pomocÄ… ustawienia (na ì1î) linii RE-
Elektronika Praktyczna 7/2002
86
K U R S
Rejestr Device/Head Adres 6hCS 2h
7 6 5 4 3 2 1 0
Tryb CHS
1 LBA 1 DEV HS3 HS2 HS1 HS0
Tryb LBA
1 LBA 1 DEV LBA(27:24)
DostÍp - zapis/odczyt.
Uwaga: rejestr mołe byĘ zapisywa-
ny tylko, gdy BSY = 0, DRQ = 0
i DMACK nie jest ustawiony.
Uwagi dodatkowe: DEV jest bitem
odpowiedzialnym za adres urzÄ…dzenia.
Gdy DEV=0 wybrane jest urzÄ…dzenie
Master, gdy DEV=1 wybrane jest urzÄ…-
dzenie Slave.
Rys. 2. Sposób wyprowadzenia sygnałów na złącze IDC40
Gdy bit LBA=0 wybrany jest tryb
adresowania CHS, w przeciwnym wy-
Rejestr Cylinder High Adres 5hCS 2h Port Danych Adres brak CS brak padku adresowanie odbywa siÍ za po-
7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 mocÄ… LBA.
CHS(Cylinder(15:8)) LBA(Cylinder(23:16)) 7 6 5 4 3 2 1 0 Bit 5 powinien byĘ ustawiony ì1î -
DostÍp - zapis/odczyt. Data(15:0) kompatybilnośĘ.
Uwaga: gdy BSY = 0, DRQ = 0 DostÍp - zapis/odczyt.
i DMACK nie jest ustawiony, mołna za- Uwaga: zapis i odczyt tego portu Rejestr Error Adres 1h CS 2h
pisywaĘ do tego rejestru. powinien odbywaĘ siÍ przy ustawionej 7 6 5 4 3 2 1 0
Uwagi dodatkowe: zapis do rejestru linii DMACK. r UNC MC IDNF MCR ABRT TK0NF AMNF
powoduje skasowanie przerwania od Uwagi dodatkowe: rejestr 16-bitowy. DostÍp - rejestr tylko do odczytu,
urzÄ…dzenia IDE. zapisywanie powoduje zapis do rejest-
Jełeli w rejestrze Device/Head bit Rejestr Device Control Adres 6hCS 1h ru Features.
LBA = 0 (CD-ROM, HDD pracuje wte- 7 6 5 4 3 2 1 0 Znaczenie poszczegÛlnych bitÛw:
dy w trybie CHS - Cylinder, Head, Sec- r r r r r SRST nIEN 0 - UNC (Uncorrectable Data Error) -
tor), to w tym rejestrze znajduje siÍ DostÍp - rejestr tylko do zapisu, bÅ‚Ä…d niemoÅ‚liwy do skorygowania;
startowy, starszy bajt adresu cylindra - w przypadku odczytu zwracana jest za- - MC (Media Change) - nowy nośnik
podawany jest przy dostÍpie do da- wartośĘ rejestru Alternate Status. jest dostÍpny w napÍdzie;
nych. Jełeli w rejestrze Device/Head bit Uwaga: zapis powinien odbywaĘ - IDNF (ID not found) - łądany sektor
LBA = 1 (CD-ROM, HDD pracuje w try- siÍ, gdy DMACK nie jest ustawio- danych o podanym ID nie zostaÅ‚ zna-
bie LBA - Logical Block Address, dane ny. leziony;
adresowane sÄ… w sposÛb liniowy), Uwagi dodatkowe: SRST jest bitem, - MCR (Media Change Request) - uÅ‚y-
w tym rejestrze znajdujÄ… siÍ bity 23...16 ktÛrego ustawienie powoduje programo- wany przez urzÄ…dzenia z wymiennym
adresu LBA. we zerowanie urządzenia. Bit nIEN nośnikiem. Ustawienie tego bitu syg-
jest odpowiedzialny za włączenie syg- nalizuje, łe urządzenie wykryło łą-
Rejestr Cylinder Low Adres 4hCS 2h nalizacji obsługi przerwania przez danie zmiany nośnika;
7 6 5 4 3 2 1 0 hosta. - ABRT (Aborted Command) - wykony-
CHS(Cylinder(7:0)) LBA(Cylinder(15:8))
DostÍp - zapis/odczyt.
Tab. 3. Zestawienie sygnałów interfejsu IDE
Uwaga: gdy BSY = 0, DRQ = 0
Sygnał yródło Typ Pull-up Pull-up Uwagi
i DMACK nie jest ustawiony, mołna
sterowania na wyjściu hosta przy urządzeniu
zapisywaĘ/odczytywaĘ do/z tego rejest-
(patrz uwaga 1) (patrz uwaga 2) (patrz uwaga 2)
ru.
Uwagi dodatkowe: zapis rejestru po- Reset Host TP
woduje skasowanie przerwania od urzÄ…-
DD(15:0) <-> TS 3
dzenia IDE.
DMARQ Device TS 5,6 k&! PD 4
Jełeli w rejestrze Device/Head bit
!DIOR/!DIOW Host TS
LBA = 0 (CD-ROM, HDD pracuje wtedy
w trybie CHS - Cylinder, Head, Sector), IORDY Device TS 1,0 k&! 5
to w tym rejestrze znajduje siÍ starto-
CSEL Host GND 10 k&! 6
wy, młodszy bajt adresu cylindra - po-
DMACK- Host TP
dawany jest przy dostÍpie do danych.
INTRQ Device TS
Jełeli w rejestrze Device/Head bit LBA
= 1 (CD-ROM, HDD pracuje w trybie DA (2:0) Host TP
LBA - Logical Block Address, dane sÄ…
!PDIAG Device TS 10 k&!
adresowane liniowo), w tym rejestrze
!CS0 !CS1 Host TP
znajdujÄ… siÍ bity 15...8 adresu LBA.
!DASP Device OC 10 k&!
Rejestr Danych Adres 4hCS 0h Uwagi:
15 14 13 12 11 10 9 8 1. TS = trójstanowy, OC = otwarty kolektor, TP = Totem-pole, PU = podpięcie do zasilania, PD =
7 6 5 4 3 2 1 0 podpięcie do masy, VS = zależne od producenta.
Data (15:0) 2. Wszystkie wartości rezystorów są minimalnymi, dopuszczalnymi.
3. Urządzenia nie powinny posiadać rezystora pull-up na DD7. Poleca się by host posiadał rezystor
DostÍp - do zapisu i do odczytu
o wartości 10 k&! podpięty do masy. Pozwala to na wykrywanie braku urządzenia podczas inicjali-
Uwaga: gdy BSY = 0, DRQ = 0
zacji po włączenia zasilania.
i DMACK nie jest ustawiony, mołna
4. Standard ATA-3 definiuje tÄ™ liniÄ™ jako trzystanowÄ…, gdy urzÄ…dzenie nie jest wybrane lub, gdy nie
zapisywaĘ/odczytywaĘ do/z tego rejest-
obsługuje DMA. Gdy obsługuje transfer DMA linia powinna być ustawiana na poziomie wysokim lub
ru.
niskim.
Uwagi dodatkowe: zawartośĘ rejest-
5. Sygnał powinien być używany tylko podczas cyklu DIOR/DIOW w aktualnie wybranym urządzeniu.
ru nie jest wałna, gdy urządzenie jest
6. Linia wykorzystywana jako CSEL. Powinna być podłączona do masy przez hosta. Oba urządzenia
w trybie Sleep Mode. Rejestr jest 16-
(Master/Slave) wymagają rezystora o wartości 10 k&! (pull-up) dołączanego do zasilania.
bitowy.
Elektronika Praktyczna 7/2002
87
K U R S
naleły zignorowaĘ wartośĘ pozostałych
bitÛw (z wyjÄ…tkiem BSY oczywiÅ›cie).
Gdy BSY=0 mołna odczytywaĘ pozosta-
Å‚e wartoÅ›ci bitÛw.
Uwagi dodatkowe: odczyt tego re-
jestru zeruje przerwanie.
- BSY - wskazuje na zajÍtośĘ urzÄ…dze-
nia. Przed zapisem lub odczytem
wiÍkszoÅ›ci rejestrÛw powinniÅ›my
sprawdzaĘ stan tego bitu. Do tego ce-
lu zazwyczaj wykorzystywany jest re-
jestr Alternate Status, ktÛry jest zwier-
ciadlanym obrazem rejestru Status. Od-
czyt tego pierwszego nie powoduje
Å‚adnych zmian w urzÄ…dzeniu IDE.
- DRDY (Device Ready) sygnalizuje, Å‚e
urządzenie jest w stanie przyjmowaĘ
komendy.
- DF (Device Fault) wskazuje na uszko-
dzenie urzÄ…dzenia.
- DSC (Device Seek Complete) głowice
urządzenia zostały ustawione na wy-
branÄ… Å›cieÅ‚kÍ.
- DRQ (Data Request), urzÄ…dzenie jest
gotowe do przesłania porcji danych.
- CORR (Corrected Data) - wskazuje na
wystÄ…pienie bÅ‚Ídu podczas transmisji da-
nych, ktÛry jesteÅ›my w stanie poprawiĘ
Rys. 3. Możliwe sposoby dołączania napędów do sterownika
(np. poprzez CRC). Ustawienie tego bitu
wana komenda zostaÅ‚a przerwana noÅ›ci od trybu - czy ustawiony, lub nie powoduje zakoÒczenia transmisji.
z powodu bÅ‚Ídnej instrukcji lub bÅ‚Íd- skasowany bit LBA w rejestrze Device/ - IDX (Index) specyficzne dla produ-
nego parametru - w przypadku trans- Head - w rejestrze Sector Number ma- centa.
misji danych, porcja danych powinna my 8 bitÛw danych CHS lub LBA. - ERR (Error) wskazuje na wystÄ…pienie
zostaĘ odrzucona; bÅ‚Ídu. BÅ‚Ä…d wystÄ…piÅ‚ w wyniku wy-
- TK0NF - ściełka zerowa nie została Rejestr Status Adres 7hCS 2h konania poprzedniej komendy. Trans-
znaleziona podczas rekalibracji urzÄ…- 7 6 5 4 3 2 1 0 misja danych zostanie przerwana.
dzenia; BSY DRDY DF DSC DRQ CORR IDX ERR PrzyczynÍ wystÄ…pienia tego bÅ‚Ídu do-
- AMNF - Address Mark Not Found, DostÍp - tylko do odczytu, przy za- datkowo pokazuje rejestr Error.
znacznik adresu nie został znale- pisie zapisywany jest rejestr Command. Pawel Dienwebel
ziony po znalezieniu pola o poda- Uwaga: gdy bit BSY jest ustawiony, pelos@pelos.pl
nym ID.
Tab. 4. Funkcje rejestrów I/O oraz przypisane im adresy
Rejestr Features Adres 1h CS 2h
7 6 5 4 3 2 1 0
Adresy Funkcje rejestrów
ZawartośĘ zalełna od komendy.
CS0 CS1 DA2 DA1 DA0 Magistrala danych dla Magistrala danych dla
Uwaga: rejestr ten nie jest obecnie
Read (DIOR) Write (DIOW)
wykorzystywany.
N N x x x Wysoka impedancja Nie używana
Rejestr Sector Count Adres 2hCS 2h
Rejestry Control Block
7 6 5 4 3 2 1 0
N A 0 x x Wysoka impedancja Nie używana
DostÍp - zapis/odczyt.
N A 1 0 x Wysoka impedancja Nie używana
Uwaga: rejestr powinien byĘ zapi-
N A 1 1 0 Alternate Status Device Control
sywany, gdy BSY = 0, DRQ = 0
i DMACK nie jest ustawiony.
N A 1 1 1 (uwaga 1) Nie używana
Uwagi dodatkowe: rejestr zawiera
Rejestry Command Block
liczbÍ sektorÛw, ktÛre majÄ… byĘ prze-
A N 0 0 0 Data Data
słane/odczytane. Gdy rejestr = 0 wtedy
A N 0 0 1 Error Features
bÍdzie przesÅ‚ane 256 sektorÛw. Gdy po
transmisji danych w rejestrze bÅ‚ÍdÛw sÄ…
A N 0 1 0 Sector Count Sector Count
bÅ‚Ídy - w rejestrze Sector Count znaj-
A N 0 1 1 Sector Number LBA (7:0) Sector Number LBA (7:0)
duje siÍ liczba sektorÛw potrzebnych
(uwaga 2) (uwaga 2)
do dokoÒczenia transmisji Å‚Ä…danej
A N 1 0 0 Cylinder Low LBA (15:8) Cylinder Low LBA (15:8)
liczby sektorÛw.
(uwaga 2) (uwaga 2)
A N 1 0 1 Cylinder High LBA (23:16) Cylinder High LBA (23:16)
Rejestr Sector Number Adres 3hCS 2h
(uwaga 2) (uwaga 2)
7 6 5 4 3 2 1 0
Tryb CHS
A N 1 1 0 Device/Head LBA (27:24) Device/Head LBA (27:24)
Sektor (7:0)
Sektor (7:0)
Sektor (7:0)
Sektor (7:0)
Sektor (7:0)
(uwaga 2) (uwaga 2)
Tryb LBA
A N 1 1 1 Status Command
LBA(7:0)
LBA(7:0)
LBA(7:0)
LBA(7:0)
LBA(7:0)
A A x x x Niedozwolony addres Niedozwolony addres
DostÍp - zapis/odczyt.
Uwagi:
Uwaga: rejestr powinien byĘ zapi-
1. Ten rejestr nie jest stosowany we współczesnych sterownikach napędów.
sywany, gdy BSY = 0, DRQ = 0
2. Mapowanie rejestrów w trybie LBA.
i DMACK nie jest ustawiony.
Oznaczenia stanów na liniach adresowych:
Uwagi dodatkowe: rejestr zawiera
A - sygnał ustawiony, N - sygnał zanegowany, x - bez znaczenia
początkowy adres do medium. W zaleł-
Elektronika Praktyczna 7/2002
88
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 ciwnym przypadku - LBA. Sterownik kazu. Aby przesÅ‚aĘ 12-bajtowÄ… ramkÍ
WyrÛÅ‚niamy dwa, wczeÅ›niej juÅ‚ wbudowany w napÍd, bez wzglÍdu na sterujÄ…cÄ… naleÅ‚y przedtem - kaÅ‚dora-
wspomniane, tryby adresowania: pojemnośĘ nośnika danych, powinien zowo - ustawiĘ odpowiednie rejestry.
1. CHS - adresowanie odbywa siÍ za obsÅ‚ugiwaĘ oba tryby adresowania. Host Zaczynamy od sprawdzenie rejest-
pomocÄ… trzech pÛl: wybiera tryb adresowanie poprzez usta- ru Alternate Status i stanu bitu BSY.
- Cylinder (1...255), wienie bitu LBA w rejestrze Device/He- Odczytujemy cyklicznie w pÍtli rejestr
- Head (1...15), ad. Po wÅ‚Ä…czeniu zasilania urzÄ…dzenie dopÛki bit BSY nie bÍdzie rÛwny
- Sector (0...65535). IDE przechodzi automatycznie na tryb ì0î. Odczytujemy rejestr Status -
2. LBA, w ktÛrym adres jest wylicza- adresowania CHS. spowoduje to skasowanie ewentualne-
ny ze wzoru: LBA = ((cylinder * go przerwania. Do rejestru Cylinder
heads_per_cylinder + heads) * sec- Sterowanie CD-ROM-em Low wpisujemy wartośĘ 12 (dziesiÍt-
tors_per_track) + sector - 1. Sterowanie CD-ROM-em odbywa nie) - jest to liczba danych, jakÄ…
Gdy urzÄ…dzenie posiada mniej niÅ‚ siÍ za pomocÄ… 12-bajtowych ramek chcemy przesÅ‚aĘ do urzÄ…dzenia. Ze-
16515072 sektorÛw, domyÅ›lnym trybem zwanych rozkazami. Pierwszy bajt rujemy rejestry Cylinder High, Featu-
adresowania staje siÍ tryb CHS. W prze- w ramce jest jednoczeÅ›nie kodem roz- 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-
Elektronika Praktyczna 8/2002
81
K U R S
my na mniej znaczÄ…cÄ… czÍśĘ ma- nych. Jak widaĘ kod komendy (naj- 4 0x00
gistrali danych DD0...7 a bajty nie- młodszy bajt) jest w tych trzech przy- 5 0x00
parzyste (1, 3, 5, 7, 9, 11) na padkach taki sam. Zmienia siÍ tylko 6 0x01 Numer poczÄ…tkowej Å›cieżki od której CD-ROM ma
bardziej znaczÄ…cÄ… czÍśĘ magistrali wartośĘ czwartego bajtu. W bajcie zwrócić informacjÄ™
DD8...15; kałdorazowo musimy wpi- pierwszym ustawiony jest bit zerowy 7 0x00
saĘ dwa bajty, czyli sumarycznie - oznacza to, łe Status ma byĘ 8 0x64 100 bajtów na dane z CD-ROM-u
dokonujemy sześĘ cykli zapisu; zwrÛcony natychmiast po tym, jak 9 0x00
obecnie tylko bardzo stare urzÄ…dze- sprawdzona bÍdzie poprawnośĘ 10 0x00
nia obsÅ‚ugujÄ… transmisjÍ danych przesÅ‚anej ramki przez CD-ROM, sta- 11 0x00
w trybie oÅ›miobitowym. nu tacki (czy wysuniÍta, czy nie)
Gdy porcja danych jest juł goto- oraz status płyty. W przeciwnym Poniłej pokazano przykładową
wa na magistrali danych DD0...15, ze- przypadku Status jest zwracany po ramkÍ wysÅ‚anÄ… przez CD-ROM w od-
rujemy liniÍ DIOW. Odczekujemy ok. skoÒczeniu caÅ‚ej operacji. powiedzi na zapytanie o TOC. Pierw-
1 µs i ustawiamy DIOW (po- sze dwa bajty okreÅ›lajÄ… ilośĘ
ziom wysoki). Dane wpisywa- przesłanej informacji w baj-
Napędy CD-ROM są wyposażone w interfejs
ne są do urządzenia zboczem tach. Bajt czwarty określa
ATAPI, który jest rozwinięciem klasycznego
narastajÄ…cym. Cykl zapisu po- liczbÍ utworÛw na pÅ‚ycie.
IDE (ATA). Charakteryzuje siÄ™ on
wtarzamy sześĘ razy. Po wpi- Bajty: 5, 13, 20 itd. są znacz-
zastosowaniem protokołu niemal identyczne-
saniu 12 bajtÛw ramki urzÄ…- nikami poczÄ…tku adresu - ma-
go ze SCSI, przy zachowaniu mechanicznej
dzenie ustawia bit BSY. Od- ją stałą wartośĘ 0x10. Mają
i elektrycznej kompatybilności z IDE.
czytujÄ…c stan rejestru Alterna- charakter czysto informacyjny.
te Status czekamy, ał bit Wałną ściełką jest ściełka
BSY bÍdzie rÛwny zero. Gdy o numerze 0xAA (tzw. Lead
tak siÍ stanie, odczytujemy rejestr Sta- TOC - Table of Contents - to bar- Track) - adres tej Å›cieÅ‚ki oznacza
tus. Sprawdzamy czy bit ERR = 0 dzo wałna tablica. Zawiera adresy ostatni sektor na płycie CD.
oraz czy bit DRQ = 1. NastÍpnie mu- poczÄ…tkowe poszczegÛlnych Å›cieÅ‚ek,
simy odczytaĘ ile bajtÛw danych ma sesji, itp. Jej odczyt przebiega nastÍ- Numer utworu Adres utworu
do przekazania CD-ROM. WartośĘ ta pująco: MSB ... ... LSB
składana jest z młodszego bajtu pobie- Zatrzymanie odtwarzania płyty CD 1 0x00 0x00 0x20 0x00
ranego z rejestru Cylinder Low, oraz audio (Stop) wymaga wysÅ‚ania nastÍ- 2 0x00 0x20 0x38 0x1C
starszego bajtu z rejestru Cylinder pujÄ…cej sekwencji bajtÛw: 0x4E, 0x00, 3 0x00 0x2C 0x3B 0x21
High. Dane z CD-ROM-u do hosta sÄ… 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4 0x00 0x37 0x33 0x03
transmitowane w trybie 16-bitowym. 0x00, 0x00, 0x00, 0x00. 0xAA 0x00 0x4A 0x38 0x1C
Kałde opadające zbocze sygnału na li- Test gotowości urządzenia wyma-
nii DIOR powoduje wystawienie ga wysÅ‚ania nastÍpujÄ…cej sekwencji Mamy, wiÍc odczytanÄ… informacjÍ
dwÛch bajtÛw danych na magistralÍ bajtÛw: 0x00, 0x00, 0x00, 0x00, 0x00, o adresach Å›cieÅ‚ek. Teraz moÅ‚emy
DD0...15. Po odczytanej liczbie bajtÛw 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, przystÄ…piĘ do odtwarzania utworÛw.
powinniÅ›my sprawdziĘ czy bit ERR 0x00. Przebiega to w nastÍpujÄ…cy sposÛb:
nie jest ustawiony w rejestrze Status. NastÍpnie wysyÅ‚amy komendÍ Re- Nr bajtu Wartość Komentarz
Gdy bit ERR=0 moÅ‚emy przyjąĘ, Å‚e quest Sense Key, ktÛra skÅ‚ada siÍ 0 0x00 MSB TOC Data Length
dane odebrano prawidÅ‚owo. z nastÍpujÄ…cej sekwencji bajtÛw: 1 0x2A LSB TOC Data Length
Wyłej wymienione czynności po- 0 0x03 W wyniku odpowiedzi na tę ramkę otrzymamy 2 0x01 First Track Number
wtarzamy kałdorazowo, gdy chcemy z CD-ROM-u ASC i ASCQ. 3 0x04 Last Track Number
przesłaĘ porcje danych do CD-ROM-u. Znajdują się one odpowiednio w bajcie 12 i 13. 4 0x00 Reserved
ASC = 0x00 oznacza płytę CD w napędzie. 5 0x10 ADR (4 bity)|CONTROL (4 bity)
Formaty ramek sterujących ASC = 0x3A brak płyty w napędzie. 6 0x01 TrackNumber
napÍdem ASC = 0x02 gÅ‚owice nie ustawiÅ‚y siÄ™ jeszcze - 7 0x00 Reserved
0x00
Eject CD - wysuniÍcie pÅ‚yty z na- musimy czekać. 8 0x00 MSB
0x00
0x00
0x00
0x00
pÍdu wymaga wysÅ‚ania nastÍpujÄ…cej ASC = 0x04 brak gotowoÅ›ci napÄ™du - musimy 9 0x00
0x00
0x00
0x00
0x02
sekwencji bajtÛw: 0x1B, 0x01, 0x00, czekać. 10 0x02
0x02
0x02
0x02
0x00
0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 1 0x00 11 0x00 LSB
0x00
0x00
0x00
0x00, 0x00, 0x00. 2 0x00 12 0x00 Reserved
Load CD - załadowanie krąłka do 3 0x00 13 0x10 ADR (4 bity)| CONTROL (4 bity)
napÍdu wymaga wysÅ‚ania nastÍpujÄ…- 4 0x60 14 0x02 TrackNumber
cej sekwencji bajtÛw: 0x1B, 0x01, 5 0x00 15 0x00 Reserved
0x00
0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 6 0x00 16 0x00
0x00
0x00
0x00
0x20
0x00, 0x00, 0x00, 0x00. 7 0x00 17 0x20
0x20
0x20
0x20
0x38
Start CD - wystartowanie napÍdu 8 0x00 18 0x38
0x38
0x38
0x38
0x1C
i przeczytanie TOC wymaga wysłania 9 0x00 19 0x1C
0x1C
0x1C
0x1C
nastÍpujÄ…cej sekwencji bajtÛw: 0x1B, 10 0x00 20 0x00 Reserved
0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 11 0x00 21 0x10 ADR(4 bity)|CONTROL(4 bity)
0x00, 0x00, 0x00, 0x00, 0x00. 22 0x03 Track Number
Stop CD - zatrzymanie napÍdu Odczyt TOC wymaga wysÅ‚ania na- 23 0x00 Reserved
0x00
wymaga wysÅ‚ania nastÍpujÄ…cej sek- stÍpujÄ…cej sekwencji bajtÛw: 24 0x00
0x00
0x00
0x00
0x2C
wencji bajtÛw: 0x1B, 0x01, 0x00, 0 0x43 25 0x2C
0x2C
0x2C
0x2C
0x3B
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1 0x00 CD zwróci informacje w LBA (0x00)- nie w MSF 26 0x3B
0x3B
0x3B
0x3B
0x21
0x00, 0x00, 0x00. (0x02) 27 0x21
0x21
0x21
0x21
Po wykonaniu powyłszych pole- 2 0x00 28 0x00 Reserved
ceÒ CD-ROM nie zwraca Å‚adnych da- 3 0x00 29 0x10 ADR(4 bity)|CONTROL(4 bity)
Elektronika Praktyczna 8/2002
82
K U R S
30 0x04 Track Number
31 0x00 Reserved
0x00
32 0x00
0x00
0x00
0x00
0x37
33 0x37
0x37
0x37
0x37
0x33
34 0x33
0x33
0x33
0x33
0x03
35 0x03
0x03
0x03
0x03
36 0x00
37 0x10
38 0xAA Lead OUT
39 0x00
0x00
40 0x00
0x00
0x00
0x00
0x4A
41 0x4A
0x4A
0x4A
0x4A
0x38
42 0x38
0x38
0x38
0x38
0x1C
43 0x1C
0x1C
0x1C
0x1C
Odtwarzanie płyty CD audio wy-
maga wysÅ‚ania nastÍpujÄ…cej sekwencji
bajtÛw:
0 0xA5
1 0x00
0x00
2 0x00
0x00
0x00
0x00
0x00
3 0x00 Adres poczÄ…tkowy utworu
0x00
0x00
0x00
(tutaj track 1)
0x20
4 0x20
0x20
0x20
0x20
0x00
5 0x00
0x00
0x00
0x00
0x00
6 0x00
0x00
0x00
0x00
0x4A
7 0x4A Ilość danych - nie adres
0x4A
0x4A
0x4A
końcowy!!!
Rys. 4. Przebiegi czasowe charakterystyczne dla zapisu
0x38
8 0x38 Czyli do odtworzenia cała płyta
0x38
0x38
0x38
polecenia do sterownika
0x1C
9 0x1C
0x1C
0x1C
0x1C
10 0x00 Do rejestru Command wpisujemy Count wpisujemy liczbÍ sektorÛw do
11 0x00 wartośĘ 0x20 - kod komendy odczytu.
ATA_READ_SECTS. NastÍpnie czeka-
Wstrzymanie lub wznowienie od- my ok. 10 µs, odczytujemy rejestr ZaleÅ‚noÅ›ci czasowe
twarzania (PAUSE) nastÍpuje po wy- Alternate Status i sprawdzamy bit Na rys. 4 przedstawiono przykÅ‚a-
sÅ‚aniu nastÍpujÄ…cej sekwencji bajtÛw: BSY. Czekamy aÅ‚ bit BSY bÍdzie dowe zaleÅ‚noÅ›ci czasowe przebiegu
0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, wyzerowany. Odczytujemy rejestr Sta- sygnaÅ‚Ûw na magistrali danych i li-
0x00, 0x00, xxx = 0x01 (odtwarzanie tus, aby skasowaĘ przerwanie. Spraw- niach sterujących CD-ROM-u. Na ry-
lub wznowienie) xxx = 0x00 (odtwa- dzamy stan bitÛw: ERR (powinien sunku pominiÍto dokÅ‚adne specyfika-
rzanie wstrzymane), 0x00, 0x00, byĘ wyzerowany), DRQ (powinien cje czasÛw pomiÍdzy zmianami syg-
0x00. byĘ ustawiony - urzÄ…dzenie chce naÅ‚Ûw - ma to byĘ tylko ilustracja
Zatrzymanie odtwarzania płyty CD przesłaĘ dla nas dane). działania interfejsu.
audio (STOP) nastÍpuje po wysÅ‚aniu Dane odczytujemy jak w poprzed-
nastÍpujÄ…cej sekwencji bajtÛw: 0x4E, nim przykÅ‚adzie. OpadajÄ…ce zbocze Aplikacja
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, na linii DIOR powoduje wystawienie Na podstawie przedstawionego
0x00, 0x00, 0x00, 0x00, 0x00. dwÛch kolejnych bajtÛw na magistra- opisu przygotowaÅ‚em oprogramowanie
lÍ DD0...15. IlośĘ danych, ktÛre mu- sterujÄ…ce zaimplementowane w mikro-
Odczyt danych z sektorÛw simy odebraĘ jest okreÅ›lona liczbÄ… kontrolerze z rodziny AVR. Program
Dysk twardy w trybie CHS sektorÛw, jakÄ… wczeÅ›niej wpisaliÅ›my dla niego jest napisany w C - wszyst-
Sprawdzamy stan bitu Busy w re- do rejestru Sector Number pomnoÅ‚o- kie ürÛdÅ‚a sÄ… dostÍpne na stronie in-
jestrze Alternate status. Gdy BSY = nÄ… przez zmiennÄ…, ktÛra okreÅ›la licz- ternetowej http://www.pelos.pl/cd_free/
1, czekamy na BSY=0 i odczytujemy bÍ bajtÛw w sektorze - tzw. BytesPer- oraz na pÅ‚ycie CD-EP8/2002B.
rejestr Status. W rejestrze Device He- Sector. WartośĘ ta mołe wynosiĘ Pawel Dienwebel
ad zerujemy bity LBA (odczyt bÍdzie 4096 lub 8192 B. pelos@pelos.pl
w trybie CHS) oraz bit DEV (gdy
chcemy odczytaĘ dane z Mastera - Dysk twardy w trybie LBA Literatura
w przeciwnym wypadku ustawiamy Dane odczytujemy bardzo podob- [1] INF-8020.pdf - ŃATA Packet In-
ten bit). Bity 7 i 5 domyÅ›lnie usta- nie jak w trybie CHS z tÄ… rÛÅ‚nicÄ…, Å‚e terface for CDROM rev. 2.6 lub
wiamy. Na mniej znaczÄ…ce bity tego adres poczÄ…tkowy podajemy w LBA, wyÅ‚szeî
rejestru wpisujemy adres Head. W re- nastÍpnie sprawdzamy stan bitu BSY. [2] CD3610 - Command Specification
jestrze Alternate Status sprawdzamy Gdy jest wyzerowany - ustawiamy bit [3] http://www.pelos.pl/cd_free/
stan bitÛw DRDY i BSY. Pierwszy LBA w rejestrze Device/Head. Do [4] http://www.yampp.com
musi byĘ ustawiony, drugi wyzerowa- mniej znaczÄ…cej poÅ‚owy rejestru wpi- [5] Standard ECMA -130 ìData inter-
ny. Odczytujemy rejestr Status. Do sujemy bity 27...24 adresu poczÄ…tko- change on read-only 120 mm
rejestrÛw Cylinder High i Cylinder wego w trybie LBA. Do rejestru Cy- optical data disks (CD-ROM)î
Low wpisujemy starszy bajt i młod- linder High wpisujemy bity 23...16 [6] SFF8090i v4 - Fuji Commands for
szy bajt poczÄ…tkowego adresu Cylin- adresu LBA, do rejestru Cylinder Low Multimedia Devices
der. Do rejestru Sector Number wpi- bity 15...8, a do rejestru Sector Num- [7] http://www.republika.pl/romek_by/
sujemy liczbÍ sektorÛw do odczytu. ber bity 0...7. Do rejestru Sector index.html
Elektronika Praktyczna 8/2002
83
Wyszukiwarka
Podobne podstrony:
Aby włączyć dostęp DMA dla stacji dysków CD ROMC Vademecum profesjonalisty ksiazka Dodatek A Zawartość płytki CD ROMcd romwykonanie układu zasilającego cd romJak zamontować CD Rom w auciewięcej podobnych podstron