ATA (technologia)

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj
Złącze ATA
Taśmy ATA 80 i 40 żyłowe

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).

Opis złącz[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 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 | 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 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 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 A0(hex) 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

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

Zobacz też[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]