ATA (technologia)
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.
Opis złączy
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 |
- - 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:
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
Zobacz też
Bibliografia
- 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