ATA (technologia)


ATA (technologia) w encyklopedii

Z Wikipedii, wolnej encyklopedii Przejdź do nawigacji Przejdź do wyszukiwania 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 r. przez firmę Compaq i wprowadzony w ich komputerach, we współpracy z Western Digital, w 1986 r. 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 roku (kiedy 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.

Spis treści

Opis złączy | edytuj kod

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

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

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 | 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 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 kod

Linki zewnętrzne | edytuj kod


Kontrola autorytatywna (parallel bus):
Na podstawie artykułu: "ATA (technologia)" pochodzącego z Wikipedii
OryginałEdytujHistoria i autorzy