ATA (ang.Advanced Technology Attachment, AT Attachment) – 16-bitowy interfejs systemowy w komputerach klasy PC i Amiga przeznaczony do komunikacji z dyskami twardymi, zaproponowany w 1983 przez firmę Compaq i wprowadzony w ich komputerach, we współpracy z Western Digital, w 1986 pod nazwą IDE (ang.Integrated Drive Electronics). Nazwa ta pochodzi od innowacyjnego podejścia Western Digital do sterowania dyskiem twardym, czyli zintegrowania go z kontrolerem – wcześniej kontrolery dysków były umieszczane na kartach rozszerzeń montowanych w sloty magistrali ISA. Od 2003 (kiedy to wprowadzono Serial ATA) standard ten jest określany jako Parallel ATA, lub w skrócie PATA, aby uniknąć jego pomylenia ze standardem SATA.
Dyski twarde w technologii ATA/IDE w rozmiarze 5,25" i 3,5" zasilane są napięciem 5 V i 12 V poprzez złącze typu Molex, a w rozmiarze 2,5" napięciem 5 V poprzez pomniejszone złącze ATA z dodatkowymi 4 pinami.
Standard ATA nie jest już rozwijany w kierunku zwiększania szybkości transmisji. Początkowo stosowano oznaczenia ATA-1, ATA-2 itd., natomiast później były używane określenia związane z przepustowością interfejsu – ATA/33, ATA/66, ATA/100, ATA/133.
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
4
DD8
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
5
DD6
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
6
DD9
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
7
DD5
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
8
DD10
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
9
DD4
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
10
DD11
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
11
DD3
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
12
DD12
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
13
DD2
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
14
DD13
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
15
DD1
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
16
DD14
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym.
17
DD0
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
18
DD15
↔
Szyna dwukierunkowa do przesłań pomiędzy procesorem a dyskiem stałym
19
GND
Masa
20
Pin nie wykorzystany
21
DMARQ
←
żądanie przesyłania w trybie DMA
22
GND
Masa
23
-DIOW
→
Przepisanie zawartości linii danych DDx do wybranego rejestru napędu
24
GND
Masa
25
-DIOR
→
Przepisanie zawartości wybranego rejestru napędu na line danych DDx
26
GND
Masa
27
IORDY
←
Sygnał gotowości urządzenia wejścia/wyjścia tylko w trybie PIO 3,4
28
CSEL
→
wybór napędu master/slave za pomocą kabla (ustawia się to za pomocą zworki-z tyłu napędu)
29
-DMACK
→
Sygnał przyjęcia żądania DMA przez hosta
30
GND
Masa
31
INTRQ
←
żądanie obsługi przerwania(znaczenie tylko jeśli jest wykorzystywany system przerwań)
32
IOCS16
obecnie pin przestarzały – był zdefiniowany w specyfikacji ATA-2
33
DA1
→
Linia adresowa używana do adresowania rejestrów napędu
34
-PDIAG
←
Sygnalizuje zakończenie inicjacji drugiego dysku
35
DA0
→
Linia adresowa używana do adresowania rejestrów napędu
36
DA2
→
Linia adresowa używana do adresowania rejestrów napędu
37
-CS0
→
Umożliwia komunikację z rejestrami komend
38
-CS1
→
Umożliwia komunikację z rejestrami kontrolnymi
39
-DASP
←
Informuje pierwszy dysk fizyczny (MASTER) o obecności drugiego dysku (SLAVE)
40
GND
Masa
- oznacza negację pinów
→ pin ustawia host
← pin ustawia napęd
↔ pin dwukierunkowy: kierunek zależny od operacji
W 2,5" dyskach (z laptopów) stosowane są cztery dodatkowe piny:
Pin
Funkcja
Pin
Funkcja
41
+5VDC (logic)
42
+5VDC (motor)
43
GND
44
Type (0==ATA)
Widok złącza PATA dysku 2,5", X oznacza pin nr 1
.....................x ..
............ ......... ..
Opis rejestrów napędów ATA
Ogólnie można wyróżnić dwa rodzaje napędów ze złączem ATA:
dyski twarde – czyli urządzenia, które nie obsługują komend pakietowych
napędy optyczne CD/DVD – czyli urządzenia, które obsługują komendy pakietowe
Rejestry dla urządzeń 1)
Adres
-----
-----
-----
-----
Funkcje
-----
!CS0
!CS1
DA2
DA1
DA0
Odczyt !DIOR
Zapis !DIOW
Rejestry kontrolne
N
A
N
x
x
Zwolniony
Nieużywany
N
A
A
N
x
Zwolniony
Nieużywany
N
A
A
A
N
Alternate Status
Device Control
N
A
A
A
A
Przestarzały
Nieużywany
Rejestry komend
A
N
N
N
N
Data
Data
A
N
N
N
A
Error
Features
A
N
N
A
N
Sector Count
Sector Count
A
N
N
A
A
LBA Low
LBA Low
A
N
A
N
N
LBA Mid
LBA Mid
A
N
A
N
A
LBA High
LBA High
A
N
A
A
N
Device Select
Device Select
A
N
A
A
A
Status
Command
A
A
x
x
x
Zwolniony
Nieużywany
Rejestry dla urządzeń 2)
Adres
-----
-----
-----
-----
Funkcje
-----
!CS0
!CS1
DA2
DA1
DA0
Odczyt !DIOR
Zapis !DIOW
Rejestry kontrolne
N
A
N
x
x
Zwolniony
Nieużywany
N
A
A
N
x
Zwolniony
Nieużywany
N
A
A
A
N
Alternate Status
Device Control
N
A
A
A
A
Przestarzały
Nieużywany
Rejestry komend
A
N
N
N
N
Data
Data
A
N
N
N
A
Error
Features
A
N
N
A
N
Interrupt Reason
Sector Count
A
N
N
A
A
*
*
A
N
A
N
N
Byte Count Low
Byte Count Low
A
N
A
N
A
Byte Count High
Byte Count High
A
N
A
A
N
Device Select
Device Select
A
N
A
A
A
Status
Command
A
A
x
x
x
Zwolniony
Nieużywany
A = sygnał ustawiony (logiczna 1)
N = sygnał zanegowany (logiczne 0)
x = stan dowolny (0 lub 1)
Rejestrów o nazwach Zwolniony, Przestarzały, Nieużywany nie należy używać.
!CS0, !CS1 – oznacza negację pinów – to oznacza, że w rzeczywistości (na interfejs ATA) należy podawać wartości zanegowane z tabeli (tam gdzie A podawać N, tam gdzie N podawać A)
„*” rejestr używany przez dyski twarde (urządzenia nie obsługujące komend pakietowych)
Rejestr nie używany przez napędy CD/DVD (urządzenia obsługujące komendy pakietowe)
Rejestry kontrolne
Alternate Status
ZASTOSOWANIE: odczyt podstawowych informacji o stanie urządzenia bez kasowania obsługi przerwania
rejestr jest tylko do odczytu, a w czasie zapisu dane trafiają do Device Control
kiedy bit BSY=1 wtedy inne bity z tego rejestru nie powinny być interpretowane, zawartość tego rejestru nie jest prawdziwa gdy urządzenie jest w trybie uśpienia
odczyt tego rejestru nie spowoduje skasowania obsługi przerwania
zawartość tego rejestru jest identyczna z zawartością rejestru Status
Device Control
ZASTOSOWANIE: rejestr ten umożliwia wykonanie programowego resetu oraz włączenie obsługi przerwania
rejestr jest tylko do zapisu, w czasie odczytu jest to Alternate Status
rejestr powinien być zapisywany tylko gdy DMACK=0
zawartość tego rejestru będzie zinterpretowana przez napęd od razu po jego zapisaniu
Bity
7
6
5
4
3
2
1
0
Opis
HOB
r
r
r
r
SRST
nIEN
0
HOB (HighOrderByte)znaczenie tylko w przypadku dysków twardych – adres LBA 48-bitowy – gdy HOB=0 to napęd interpretuje młodszą część (0–23) adresu LBA 48-bitowego, gdy HOB=1 część starszą (24–47)
r(6:3) (reserved) zarezerwowane
SRST (SoftwareReSeT) reset programowy napędu
nIEN (notInterruptENable) bit włącza przerwanie(gdy nIEN=0 i urządzenie jest wybrane) lub wyłącza przerwanie(gdy nIEN=1 lub urządzenie nie jest wybrane)
Bit 0 zawsze powinien mieć wartość 0
Rejestry komend
Data
ZASTOSOWANIE: transfer danych(tylko w trybie PIO), dostęp do rejestrów
rejestr ten służy do zapisu lub odczytu
dostęp do rejestru powinien odbywać się w czasie przesyłania danych w trybie PIO, gdy DRQ=1 oraz BSY=0 oraz DMACK=0
rejestr 16-bitowy
dostęp (odczyt/zapis) do rejestrów jest realizowany właśnie poprzez ten rejestr tylko w trybie PIO; ponieważ rejestry są 8-bitowe to dane jakie chcemy zapisać (odczytać) do tych rejestrów ustawiamy na części młodszej rejestru (Bity DD7–DD0), część starsza nie jest interpretowana; natomiast gdy transferujemy dane z napędu to musimy korzystać z całej szerokości rejestru (Bity DD15–DD0) – nie ma możliwości pracy w trybie 8-bitowym.
Bity
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Opis
DD15
DD14
DD13
DD12
DD11
DD10
DD9
DD8
DD7
DD6
DD5
DD4
DD3
DD2
DD1
DD0
Error
ZASTOSOWANIE: określenie przyczyny błędu
rejestr tylko do odczytu; gdy jest zapisywany – dane trafiają do rejestru Features
zawartość rejestru jest poprawna gdy BSY=0 oraz DRQ=0 oraz ERR=1 lub SE=1, po włączeniu zasilania, wykonaniu sprzętowego lub programowego resetu, po wykonaniu komend EXECUTE DEVICE DIAGNOSTICS lub DEVICE RESET zawartość rejestru jest niewłaściwa w trybie uśpienia
Bity
7
6
5
4
3
2
1
0
Opis
#
#
#
#
#
ABRT
#
#
# zawartość tych bitów zależy od wykonanej operacji(komendy)
ABRT (ABoRT) ABRT=1 gdy nastąpiło anulowanie wykonania komendy(na skutek nie właściwej komendy, niewłaściwego parametru w komendzie, błędu odczytu itd.)
Features
ZASTOSOWANIE: zależnie od komendy
rejestr jest tylko do zapisu, w czasie odczytu jest to Error
rejestr powinien być zapisywany tylko gdy BSY=0 oraz DRQ=0 oraz DMACK=0
zawartość tego rejestru staje się parametrem komendy po zapisaniu rejestru Command
Bity
7
6
5
4
3
2
1
0
Opis
#
#
#
#
#
#
#
#
# zawartość tych bitów zależy od komendy
Sector Count / Interrupt Reason
ZASTOSOWANIE: zależnie od komendy
rejestr jest do zapisu lub odczytu
rejestr powinien być zapisywany tylko gdy BSY=0 oraz DRQ=0 oraz DMACK=0, zawartość rejestru jest niepoprawna gdy urządzenie jest w trybie uśpienia
zawartość tego rejestru staje się parametrem komendy po zapisaniu rejestru Command
w przypadku dysku twardego jest to rejestr Sector Count, w przypadku napędu CD/DVD jest to Interrupt Reason w czasie odczytu i Sector Count w czasie zapisu (patrz tabela)
Bity
7
6
5
4
3
2
1
0
Opis
#
#
#
#
#
#
#
#
# zawartość tych bitów zależy od komendy
LBA Low
ZASTOSOWANIE: zależnie od komendy
rejestr jest do zapisu lub odczytu
rejestr powinien być zapisywany tylko gdy BSY=0 oraz DRQ=0 oraz DMACK=0, zawartość rejestru jest niepoprawna gdy urządzenie jest w trybie uśpienia
zawartość tego rejestru staje się parametrem komendy po zapisaniu rejestru Command
w przypadku napędu CD/DVD rejestr ten nie jest używany
Bity
7
6
5
4
3
2
1
0
Opis
#
#
#
#
#
#
#
#
# zawartość tych bitów zależy od komendy
LBA Mid / Byte Count Low
ZASTOSOWANIE: zależnie od komendy
rejestr jest do zapisu lub odczytu
rejestr powinien być zapisywany tylko gdy BSY=0 oraz DRQ=0 oraz DMACK=0, zawartość rejestru jest niepoprawna gdy urządzenie jest w trybie uśpienia
zawartość tego rejestru staje się parametrem komendy po zapisaniu rejestru Command
w przypadku dysku twardego jest to rejestr LBA Mid, w przypadku napędu CD/DVD jest to Byte Count Low
Bity
7
6
5
4
3
2
1
0
Opis
#
#
#
#
#
#
#
#
# zawartość tych bitów zależy od komendy
LBA High / Byte Count High
ZASTOSOWANIE: zależnie od komendy
rejestr jest do zapisu lub odczytu
rejestr powinien być zapisywany tylko gdy BSY=0 oraz DRQ=0 oraz DMACK=0, zawartość rejestru jest niepoprawna gdy urządzenie jest w trybie uśpienia
zawartość tego rejestru staje się parametrem komendy po zapisaniu rejestru Command
w przypadku dysku twardego jest to rejestr LBA High, w przypadku napędu CD/DVD jest to Byte Count High
Bity
7
6
5
4
3
2
1
0
Opis
#
#
#
#
#
#
#
#
# zawartość tych bitów zależy od komendy
Device Select
ZASTOSOWANIE: wybór urządzenia master lub slave
rejestr jest do zapisu lub odczytu
rejestr powinien być zapisywany tylko gdy BSY=0 oraz DRQ=0 oraz DMACK=0, zawartość rejestru jest niepoprawna dla dysku twardego jest w trybie uśpienia, dla napędu CD/DVD jest poprawna w trybie uśpienia
bit DEV jest interpretowany natychmiast po zapisaniu, reszta bitów tego rejestru staje się parametrem komendy po zapisaniu rejestru Command
Bity
7
6
5
4
3
2
1
0
Opis
przestarzały
#
przestarzały
DEV
#
#
#
#
zapis do bitów przestarzałych będzie ignorowany przez napęd
DEV (DEVice) DEV=0 wybór urządzenia Master, DEV=1 wybór urządzenia Slave
# zawartość tych bitów zależy od komendy
Status
ZASTOSOWANIE: odczyt podstawowych informacji o stanie urządzenia oraz kasowanie obsługi przerwania
rejestr jest do odczytu, gdy jest zapisywany dane trafiają do rejestru Command
kiedy bit BSY=1 wtedy inne bity z tego rejestru nie powinny być interpretowane, zawartość tego rejestru nie jest prawdziwa gdy urządzenie jest w trybie uśpienia
Bity
7
6
5
4
3
2
1
0
Opis
BSY
DRDY
DF/SE
#
DRQ
przestarzały
przestarzały
ERR/CHK
BSY (BuSY) informuje, że urządzenie jest zajęte(gdy BSY=1)
DRDY (DeviceReaDY) informuje o gotowości(gdy DRDY=1) urządzenia
DF/SE (DeviceFault/StreamError) informuje o błędzie(gdy DF/SE=1); nie wszystkie komendy obsługują(ustawiają) ten bit
# zawartość zależna od komendy
DRQ (DataReQuest) informuje o żądaniu (DRQ=1) przesyłania danych z/do napędu
ERR/CHK (ERRor/CHecK) informuje o wystąpieniu(ERR/CHK=1) błędu
Command
ZASTOSOWANIE: rejestr zawiera kod komendy,rejestr ten zapisuje się na końcu(po zapisaniu wszystkich innych rejestrów), po zapisaniu tego rejestru urządzenie przystępuje do wykonania komendy a pozostałe rejestry przeznaczone do zapisu mogą stać się parametrami komendy (zależnie od rodzaju komendy)
rejestr jest do zapisu, gdy jest odczytywany dane reprezentują zawartość rejestru Status
rejestr powinien być zapisywany tylko gdy BSY=0 oraz DRQ=0 oraz DMACK=0
Bity
7
6
5
4
3
2
1
0
Opis
#
#
#
#
#
#
#
#
# zawartość tych bitów reprezentuje kod komendy – np. kod 0xA0 jest komendą identyfikacji urządzenia
Przykłady obsługi urządzenia
Sprzętowy reset
Sprzętowy reset powinien być wykonany co najmniej raz po włączeniu zasilania
Przykład w języku asembler dla mikrokontrolerów AVR:
Po wykonaniu tej procedury można założyć, że urządzenie jest prawidłowo „zresetowane”
Odczyt rejestru Status i oczekiwanie na BSY=0
Po zresetowaniu urządzenie ustawia domyślnie tryb pracy na PIO0. Tryb pracy można zmienić (na PIO0-4,MWDMA0-2 lub UDMA 0–6) za pomocą komendy SET FEATURES
Niezbędne opóźnienia są generowane za pomocą instrukcji nop i są poprawne dla trybu PIO0
Read_status_register_bsy0:
push GPR
ldi GPR,0
Out ddrc , Gpr ;1 cykl
Out ddra , Gpr ;1 cykl;ustawia port danych DD15-DD0 jako wejście
ldi GPR,0b10111100
Out portd , Gpr ;bity⇒|7-!CS1|6-!CS0|5-DA2|4-DA0|3-DA1|2-!DMACK|1-IORDY|0-DMARQ|
Petla_stat:
nop;---czekaj--------------------------70ns min—nop=ok.62,5ns dla zegara 16 MHz
nop
cbi porte,DIOR
nop;---czekaj---------------------------230ns min
nop
nop
nop
in GPR,pinc ;minęło co najmniej 230ns dane gotowe do odczytu
sts Status,GPR
nop;---czekaj--------------------------- dane muszą być "ustawione" min 60ns
sbi porte,DIOR
nop;---czekaj---------------------------dane muszą być "przytrzymane" min 30ns
sbrc GPR,7 ;BSY=? w tej chwili GPR jako STATUS
rjmp petla_stat ;BSY=1
;BSY=0
pop GPR
Ret