

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.
W ciągu ponad 2 dekad gdy standard ATA był stosowany, powstały następujące jego wersje:
| Pin | Oznaczenie | Kierunek | Opis | Pin | Oznaczenie | Kierunek | Opis |
|---|---|---|---|---|---|---|---|
| 1 | -RESET | → | Sprzętowa inicjacja (RESET) dysku stałego | 2 | GND | Masa | |
| 3 | DD7 | ↔ | 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 |
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 .. |
............ ......... .. |
Ogólnie można wyróżnić dwa rodzaje napędów ze złączem ATA:
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 |
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 nieużywany przez napędy CD/DVD (urządzenia obsługujące komendy pakietowe)
Alternate Status
Device Control
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | HOB | r | r | r | r | SRST | nIEN | 0 |
Data
| 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
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | ABRT | # | # |
Features
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | # | # | # |
Sector Count / Interrupt Reason
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | # | # | # |
LBA Low
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | # | # | # |
LBA Mid / Byte Count Low
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | # | # | # |
LBA High / Byte Count High
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | # | # | # |
Device Select
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | przestarzały | # | przestarzały | DEV | # | # | # | # |
Status
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | BSY | DRDY | DF/SE | # | DRQ | przestarzały | przestarzały | ERR/CHK |
Command
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | # | # | # |
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:
Resetdrive:
cbi porte,RESET_ ;ustaw reset(czyli !RESET=0)
sbi portd,c0 ;!C0=1→C0=0
sbi portd,c1 ;!C1=1→C1=0
cbi portd,a0 ;A0=0
cbi portd,a1 ;A1=0
cbi portd,a2 ;A2=0
sbi portd,dmack ;!DMACK=1→DMACK=0
sbi Porte,dior ;!DIOR=1→DIOR=0
sbi Porte,diow ;!DIOW=1→DIOW=0
Ddra = 0 ;porta podłączony do pinow DD8-DD15
Ddrc = 0 ;portc podłączony do pinów DD0-DD7
rcall czekaj25us ;minimum 25us
sbi porte,RESET_ ;wyzeruj reset(czyli !RESET=1)
rcall czekaj2ms ;minimum 2ms
rcall Read_status_register_bsy0 ;czekaj na BSY=0
Ret
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