ATA (technologia)

Z Wikipedii, wolnej encyklopedii
Złącze ATA
Taśmy ATA 80- i 40-żyłowe

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

Ogólnie można wyróżnić dwa rodzaje napędów ze złączem ATA:

  1. dyski twarde – czyli urządzenia, które nie obsługują komend pakietowych
  2. 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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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ż[edytuj | edytuj kod]

Bibliografia[edytuj | edytuj kod]

  • 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[edytuj | edytuj kod]