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
- - 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:
Widok złącza PATA dysku 2,5", X oznacza pin nr 1
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)
Rejestry dla urządzeń 2)
- 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
- 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.
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
- # 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
- # 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)
- # 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
- # 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
- # 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
- # 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
- 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
- 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
- # 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
Linki zewnętrzne
- Strona informacyjna na temat interfejsów ATA (IDE/EIDE), Serial ATA (SATA), ATAPI
. Source: