ATA (ang. Advanced Technology Attachments) – interfejs systemowy w komputerach klasy PC i Amiga przeznaczony do komunikacji z dyskami twardymi zaproponowany w 1983 przez firmę Compaq. Używa się także zamiennie skrótu IDE (ang. Integrated Drive Electronics), od 2003 roku (kiedy wprowadzono Serial ATA) standard ten jest określany jako PATA (od "Parallel ATA").
Standard ATA nie jest już rozwijany w kierunku zwiększania szybkości transmisji. Początkowo stosowano oznaczenia ATA-1, ATA-2 itd., obecnie używa się określeń związanych z przepustowością interfejsu (ATA/33, ATA/66, ATA/100, ATA/133).
Spis treści |
| 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 | Złącze nie wykorzystane | |||
| 21 | DMARQ | ← | żądanie przesyłania w trybie DMA | 22 | GND | Masa | |
| 23 | -DIOW | → | Przepisanie zawartości linii danych DDx do wybranego rejestru napedu | 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 dyskach dla notebookó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 dla notebooków. 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 |
A= sygnał ustawiony (logiczna 1)
N=sygnał zanegowany (logiczne 0)
x=stan dowolny (0 lub 1)
Rejestrów o nazwie 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
Device Control
| 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
| 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 | # | # |
-# 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
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | # | # | # |
-# zawartość tych bitów zależy od komendy
Sector Count / Interrupt Reason
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | # | # | # |
-# zawartość tych bitów zależy od komendy
LBA Low
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | # | # | # |
-# zawartość tych bitów zależy od komendy
LBA Mid / 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
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | # | # | # |
-# zawartość tych bitów zależy od komendy
Device Select
| 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
| 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
| Bity | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Opis | # | # | # | # | # | # | # | # |
-# zawartość tych bitów reprezentuje kod komendy np kod A0(hex) jest komendą identyfikacji 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:
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
T13/Project 1532D Volume 1 Revision 4b 21 April 2004
T13/Project 1532D Volume 2 Revision 4b 21 April 2004
T13/Project 1532D Volume 3 Revision 4b 21 April 2004
| ||||||||||||||||||||||||||