[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 82.   (P)ATA: AT attachment

ATA, ovvero AT attachment, è un bus a 16 bit, nato originariamente per il collegamento di dischi fissi. Questo tipo di bus è conosciuto anche con altri nomi, che però non sono standard; in particolare «IDE» (Integrated drive electronics).

Il bus ATA è stato definito quando la tecnologia ha iniziato a integrare l'elettronica dell'interfaccia nel disco fisso stesso, da cui viene l'acronimo IDE. Il primo elaboratore che abbia incorporato un bus ATA è stato proprio un IBM PC/AT, da cui il nome che giustifica l'acronimo ATA.

ll bus ATA ha avuto subito un grande successo ed è diventato uno standard molto importante. L'evoluzione dello standard ha portato a espandere le possibilità del bus, che originariamente permetteva solo il collegamento di dischi fissi, consentendo l'uso di altri tipi di dischi e non solo questo, attraverso le estensioni ATAPI (ATA packet interface).

Nell'anno 2001, lo standard ATA subisce una modifica importante, introducendo il tipo SATA, ovvero Serial ATA, con l'intento di superare i limiti tecnici di quello iniziale. Con l'introduzione degli standard SATA, si fa riferimento al tipo ATA originario con la sigla PATA, ovvero Paralel ATA. Questo capitolo è rivolto al vecchio standard PATA.

82.1   Caratteristiche generali del sistema PATA

Un bus ATA tradizionale (ma in questo contesto si potrebbe usare il termine «canale») consente di collegare uno o due unità, attraverso una piattina con tre connettori da 40 poli (un connettore si collega all'unità di controllo ATA, mentre gli altri due servono per i componenti), come si vede nella figura 82.1. Un'estremità della piattina è colorata in modo diverso a indicare il lato in cui si trova il terminale numero uno.

Figura 82.1. Connettore a 40 poli e pezzo di piattina a 40 fili per una connessione ATA normale. In questo caso, il riferimento al terminale numero uno si trova sul lato destro.

piattina-ata-40-poli

Figura 82.2. Disegno di un connettore a 40 poli con piattina completo. La tacca superiore e il foro otturato non sono sempre presenti.

connettore e piattina ATA a 40 poli

I due dischi, o comunque i due componenti che si collegano all'unità di controllo devono essere distinti, essendo uno master e l'altro slave. Questa distinzione è indispensabile e in condizioni normali è necessario dichiarare questo ruolo dei componenti utilizzando dei ponticelli o dei micro interruttori. In questa situazione, utilizzando piattine normali diventa indifferente il collegamento dei componenti su questo o su quel connettore. In particolare, a differenza del bus SCSI non è richiesta alcuna terminazione.

Figura 82.3. Un'etichetta che appare su un disco fisso per guidare la configurazione in qualità di master o di slave, oppure lasciando che sia il cavo a definire la posizione.

ata-selezione-master-slave

Eventualmente esistono dei cavi ATA speciali che consentono di distinguere l'unità master da quella slave in base alla scelta del connettore utilizzato. Ma questo fatto richiede comunque la selezione nelle unità stesse della modalità cable select, sempre attraverso ponticelli o micro interruttori.

Figura 82.4. Lato posteriore di un disco fisso in cui si vede il connettore da 40 poli (il terminale numero uno si trova nel lato destro); una fila di ponticelli per la selezione di master, slave o cable select; il connettore di alimentazione. Si osservi l'assenza di un piedino nella parte centrale del connettore.

ata-disco-fisso-connessione-ponticelli-alimentazione

Lo standard ATA, nella sua evoluzione, ha cercato di mantenere la compatibilità con il passato, per garantire che un'unità di controllo aggiornata sia in grado di funzionare anche con componenti ATA più vecchi e viceversa. In particolare, questo fatto serve a garantire che l'accoppiamento di due componenti eterogenei, collegati allo stesso canale, possano funzionare ugualmente. In pratica, nonostante le buone intenzioni, possono anche sorgere dei problemi di compatibilità; inoltre, l'accoppiamento di due componenti eterogenei comporta solitamente l'utilizzo del protocollo di comunicazione migliore che entrambi sono in grado di gestire, costringendo uno dei due a lavorare con prestazioni inferiori rispetto alle proprie possibilità.

Il protocollo ATA si è sviluppato nel tempo utilizzando tecniche diverse per la comunicazione dei dati. In particolare, le versioni più recenti che consentono velocità di trasferimento dati più elevate richiedono una piattina speciale, in cui ogni collegamento dei 40 poli esistenti viene separato da un filo di massa, allo scopo di ridurre le interferenze reciproche. Questo tipo di piattina a 80 fili ha anche la caratteristica di selezionare automaticamente il componente master e slave, pertanto questi devono essere configurati in modalità cable select.

Figura 82.5. Disegno di una piattina completa a 80 fili.

connettore e piattina ATA a 80 poli

In particolare, il connettore blu, o azzurro, va collegato all'unità di controllo; il connettore nero, all'estremità opposta, va collegato al disco master; il connettore grigio va collegato al disco slave.

Figura 82.6. Connettori per due canali ATA su una scheda madre. Il terminale numero uno si trova sul lato destro. Si osservi l'assenza di un piedino nella parte centrale del connettore.

ata-unita-controllo-connettori

82.2   Geometria dei dischi

I dischi (fissi o rimovibili che sia) hanno una geometria, definita in base a tre coordinate: cilindro, testina e settore. Nella prima edizione dello standard ATA è necessario indicare i valori massimi di queste coordinate nella configurazione del firmware. A partire da ATA-2 si è introdotta la capacità di identificare automaticamente la geometria dei dischi e di poterla ridefinire in base a ciò che è stato chiamato LBA, ovvero Logical block addressing.

Attraverso questo meccanismo, se il firmware è predisposto per farlo, è possibile superare i limiti alla quantità di cilindri e di testine imposti dalla struttura tradizionale del firmware stesso. Tuttavia, perché sia possibile l'utilizzo di questa possibilità, è necessario anche che il sistema operativo e il sistema di avvio siano in grado di gestirla.

82.3   Caratteristiche del protocollo PATA e configurazione del firmware

Attualmente, nell'ambito del protocollo ATA si distinguono tre modalità di comunicazione: PIO (Programmed I/O), DMA (che comunque si articola in due sotto categorie) e Ultra DMA. Ognuna di queste modalità ha poi dei livelli differenti, costituiti da un numero intero, dove lo zero rappresenta quello minimo con le prestazioni peggiori, mentre i valori successivi indicano una progressione.

Alcune unità di controllo, in base ai protocolli ATA, consentono di inviare dei blocchi di dati più consistenti attraverso il bus, per ogni singolo ciclo di interruzione, secondo una tecnica definita block mode. In generale questo fatto non crea complicazioni; tuttavia viene riportato solo per chiarire il senso di ciò quando una voce del genere appare nella configurazione del firmware:

IDE HDD Block Mode:  Enabled

Di solito sono disponibili due bus ATA, ovvero due canali per ogni unità di controllo, specialmente se questa è integrata nella scheda madre. Ogni canale, o bus, utilizza delle risorse, in particolare un livello IRQ; pertanto, se uno dei due canali non viene utilizzato, conviene disabilitarne il funzionamento attraverso il firmware:

OnChip IDE Channel0: Enabled
OnChip IDE Channel1: Disabled

Tabella 82.14. Risorse utilizzate da un'unità di controllo ATA comune. Si tenga presente che un'unità di controllo collegata a sua volta su un bus PCI, utilizza anche altre aree di indirizzi di I/O.

Canale IRQ I/O
0 14 da 01F016 a 01F716 e da 03F616 a 03F616
1 15 da 017016 a 017716 e da 037616 a 037616

82.4   Standard PATA e gergo comune

Lo standard ufficiale per quanto riguarda il bus ATA è definito da ANSI e la tabella 82.15 ne riassume le caratteristiche salienti.

Tabella 82.15. Standard ATA secondo ANSI.

Sigla Denominazione PIO DMA single word DMA multi word UDMA
ATA-1 AT Attachment Interface for Disk Drives 0, 1, 2 0, 1, 2 0 --
ATA-2 AT Attachment Interface with Extentions 0, 1, 2, 3, 4 0, 1, 2 0, 1, 2 --
ATA-3 AT Attachment 3 Interface 0, 1, 2, 3, 4 -- 0, 1, 2 --
ATA/ATAPI-4 AT Attachment with Packet Interface Extentions 0, 1, 2, 3, 4 -- 0, 1, 2 0, 1, 2
ATA/ATAPI-5 AT Attachment with Packet Interface - 5 0, 1, 2, 3, 4 -- 0, 1, 2 0, 1, 2, 3, 4
ATA/ATAPI-6 AT Attachment with Packet Interface - 6 0, 1, 2, 3, 4 -- 0, 1, 2 0, 1, 2, 3, 4, 5
ATA/ATAPI-7 AT Attachment with Packet Interface - 7 0, 1, 2, 3, 4 -- 0, 1, 2 0, 1, 2, 3, 4, 5, 6

Purtroppo si sono diffuse una grande quantità di definizioni non standard, il cui significato diventa a volte ambiguo. Per essere certi delle possibilità di un bus ATA o di un componente ATA, occorre verificare le caratteristiche che compongono lo standard, ovvero le modalità dei protocolli. Il problema legato alla terminologia dipende molto dal fatto che i prodotti che si trovano in commercio sono spesso più avanzati degli standard già definiti, anche se è molto probabile che vengano poi incorporati negli standard ufficiali. Pertanto, questo favorisce la diffusione di appellativi provvisori e altisonanti. Quello che segue è un elenco molto approssimativo dei nomi attribuiti nel gergo a vari aspetti dello standard ATA.

82.5   Gestione da parte di un kernel Linux delle unità PATA

Nei sistemi GNU/Linux i file di dispositivo usati per accedere alle unità ATA hanno un nome che rispetta il modello:

/dev/hdx[n]

In pratica, x può essere una lettera minuscola, da a a t, che rappresenta un disco ATA completo; per esempio, /dev/hdd indica il disco slave del secondo canale ATA disponibile. Se al nome segue un numero, questo indica l'n-esima partizione. Pertanto, /dev/hdd1 è la prima partizione della quarta unità ATA.

La gestione dei componenti ATA da parte del kernel Linux viene definita nella sezione {ATA/IDE/MFM/RLL support} (72.2.11). La gestione accurata delle opzioni di configurazione di quella sezione consente di ottenere le prestazioni massime disponibili dal bus ATA di cui si dispone.

82.6   Informazioni da un kernel Linux

Le informazioni che si possono ottenere da un kernel Linux consentono di verificare la configurazione effettiva del firmware e il riconoscimento dell'unità di controllo ATA esistente. La prima verifica va fatta sui messaggi iniziali di avvio del kernel, che si possono rileggere con il comando dmesg:

dmesg | less[Invio]

Nella prima parte si può osservare la gestione generale del bus ATA:

Uniform Multi-Platform E-IDE driver Revision: 6.31
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx

Nella seconda parte si può osservare l'identificazione delle particolarità dell'unità di controllo ATA, ammesso che sia in grado di farlo:

VP_IDE: IDE controller on PCI bus 00 dev 39
VP_IDE: chipset revision 16
VP_IDE: not 100% native mode: will probe irqs later
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
VP_IDE: VIA vt82c596b (rev 23) IDE UDMA66 controller on pci00:07.1
    ide0: BM-DMA at 0xd000-0xd007, BIOS settings: hda:DMA, hdb:DMA
    ide1: BM-DMA at 0xd008-0xd00f, BIOS settings: hdc:pio, hdd:pio

Quindi si mostrano le caratteristiche dei componenti installati, che in questo caso sono due dischi fissi:

hda: IBM-DTLA-307030, ATA DISK drive
hdb: QUANTUM FIREBALLlct10 20, ATA DISK drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
hda: 60036480 sectors (30739 MB) w/1916KiB Cache, CHS=3737/255/63, UDMA(66)
hdb: 39876480 sectors (20417 MB) w/418KiB Cache, CHS=2482/255/63, (U)DMA

Infine si vedono anche le partizioni di questi:

Partition check:
 hda: hda1 hda2 hda4 < hda5 hda6 hda7 >
 hdb: hdb1 hdb2

Se l'unità di controllo ATA è collegata a sua volta su un bus PCI, cosa che ormai rappresenta la situazione normale, se ne possono trovare le tracce nella directory virtuale /proc/, attraverso lspci (l'esempio si riferisce a un elaboratore differente, ma sulle stesse coordinate PCI):

lspci -v | less[Invio]

00:07.1 IDE interface: VIA Technologies, Inc. \
  \VT82C586A/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE (rev 06) \
  \(prog-if 8a [Master SecP PriP]) Flags: bus master, stepping, medium devsel, latency 32 I/O ports at fff0 [size=16]

82.7   Emulazione SCSI per componenti ATAPI con un kernel Linux

Le prime edizioni del kernel Linux non sono in grado di gestire direttamente i masterizzatori ATAPI, se non attraverso una gestione in cui questi vengono equiparati a delle unità SCSI. Per ottenere questo risultato, è necessario predisporre il kernel in modo che sia abilitata tale emulazione, eventualmente attraverso un modulo separato (sezione 72.2.11), quindi occorre richiedere espressamente l'abbinamento del dispositivo ATAPI alla gestione SCSI. Per cominciare si può verificare che il kernel sia predisposto per l'emulazione SCSI, analizzando il rapporto generato da dmesg. Si dovrebbe vedere una riga come quella seguente, se l'emulazione è incorporata nel file principale del kernel:

scsi1 : SCSI host adapter emulation for IDE ATAPI devices

In questo caso, si presume che esista anche un'unità di controllo SCSI vera e propria (a cui è già stato abbinato il nome scsi0). Se non si trova questa riga, può darsi che la funzionalità debba essere caricata attraverso un modulo, corrispondente al file ide-scsi.o:

modprobe ide-scsi[Invio]

A ogni modo, perché la cosa possa funzionare, occorre avviare il kernel aggiungendo il parametro hdx=ide-scsi, dove x è una lettera opportuna. Per esempio, hdc=ide-scsi serve a trasformare la terza unità ATA/ATAPI in SCSI.

Prima di questa trasformazione, si accede all'unità ATAPI attraverso un file di dispositivo del tipo /dev/hdx, mentre dopo si deve usare il file corrispondente per un'unità SCSI: /dev/srn oppure /dev/scdn. Quello che segue è un estratto del rapporto di dmesg, quando l'emulazione SCSI è incorporata nel file principale del kernel (per cui non si richiede il caricamento di un modulo):

scsi1 : SCSI host adapter emulation for IDE ATAPI devices
  Vendor: LITE-ON   Model: LTR-12102B        Rev: NS1H
  Type:   CD-ROM                             ANSI SCSI revision: 02
...
Detected scsi CD-ROM sr1 at scsi1, channel 0, id 0, lun 0

Come si può vedere, in questo caso risulta disponibile il CD-ROM come dispositivo /dev/sr1, corrispondente alla seconda unità di controllo SCSI, collegato al canale zero, ID zero e LUN zero.

Bisogna fare attenzione a non confondere le cose. I programmi di masterizzazione potrebbero usare solo tre coordinate, in cui si parte dal presupposto che il canale sia sempre uno solo, corrispondente a zero. In pratica, secondo questo esempio, le coordinate SCSI potrebbero essere 1,0,0, dove il primo valore rappresenta l'unità di controllo, mentre gli altri due sono il numero ID e LUN.

In linea di principio, dovrebbe essere possibile far convivere la gestione ATAPI normale per i lettori CD/DVD e l'emulazione SCSI. Se dovessero sorgere dei problemi, è possibile separare il modulo ATAPI per i CD/DVD, corrispondente al file ide-cd.o, caricandolo in modo da escludere l'unità ATAPI che viene convertita espressamente in SCSI. Per questo occorre usare il parametro ignore=hdx; per esempio, volendo caricare il modulo escludendo il dispositivo /dev/hdc, si potrebbe usare il comando seguente:

modprobe ide-cd ignore=hdc[Invio]

Per verificare la situazione dei componenti SCSI e pseudo-SCSI, si può usare il programma Cdrecord, descritto nel capitolo 165:

cdrecord -scanbus[Invio]

Le coordinate che si ottengono sono quelle abbreviate, in cui non si fa riferimento al canale delle unità di controllo, presupponendo che non possa essercene più di uno:

scsibus0:
        0,0,0     2) 'FUJITSU ' 'M2513A       ' '1200' Removable Optical Storage
        0,1,0     1) *
        0,2,0     2) *
        0,3,0     3) 'TEAC    ' 'CD-R55S      ' '1.0E' Removable CD-ROM
        0,4,0     4) *
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *
scsibus1:
        1,0,0   100) 'LITE-ON ' 'LTR-12102B   ' 'NS1H' Removable CD-ROM
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) *
        1,6,0   106) *
        1,7,0   107) *

82.8   Coordinate ATAPI per Cdrecord

Con i kernel Linux recenti, non è più necessaria l'emulazione SCSI per incidere un CD-ROM con Cdrecord; tuttavia rimane la necessità di indicare l'unità in un modo particolare. Per verificare la situazione dei componenti ATAPI puri e semplici (senza emulazione SCSI), si può usare il comando seguente:

cdrecord dev=ATAPI -scanbus[Invio]

Cdrecord-Clone 2.01.01a01 (i686-pc-linux-gnu) Copyright (C) 1995-2004 Joerg Schilling
NOTE: this version of cdrecord is an inofficial (modified) release of cdrecord
      and thus may have bugs that are not present in the original version.
      Please send bug reports and support requests to <cdrtools@packages.debian.org>.
      The original author should not be bothered with problems of this version.

Using libscg version 'ubuntu-0.8ubuntu1'.
scsibus0:
        0,0,0     0) *
        0,1,0     1) 'YAMAHA  ' 'CRW8824E        ' '1.00' Removable CD-ROM
        0,2,0     2) *
        0,3,0     3) *
        0,4,0     4) *
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *
scsibus1:
        1,0,0   100) 'LG (KOR)' 'DVD-ROM DRD8120B' '1e05' Removable CD-ROM
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) *
        1,6,0   106) *
        1,7,0   107) *

In questo caso si evidenziano due unità (un masterizzatore CD e un lettore DVD), collocati rispettivamente nelle unità 0,1,0 e 1,0,0. Per usare Cdrecord con questi parametri, occorre aggiungere prima delle coordinata la stringa ATAPI:. Per esempio, per usare il masterizzatore CD di questo esempio, occorre indicare dev=ATAPI:0,1,0.

82.9   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome p_ata_at_attachment.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!