ATA (technologia)
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 |
Opis złącz [edytuj]
| 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 .. |
| ............ ......... .. |
Opis Rejestrów napędów ATA [edytuj]
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 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
- ZASTOSOWANIE: odczyt podstawowych informacji o stanie urządzenia bez kasowania obsługi przerwania
- rejestr tylko do odczytu , 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 A0(hex) jest komendą identyfikacji urządzenia
Przykłady obsługi urządzenia [edytuj]
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
Bibliografia [edytuj]
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
Zobacz też [edytuj]
Linki zewnętrzne [edytuj]
|
||||||||||||||||||||||||||