[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 35.   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 venne definito quando la tecnologia cominciò 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 e ancora oggi continua ad averlo, tanto che ormai le schede madri comuni ne incorporano uno, partendo dal presupposto che l'accesso ai dischi avvenga sempre secondo questa modalità. 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).

35.1   Caratteristiche generali

Un bus ATA (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 35.1. Un'estremità della piattina è colorata in modo diverso a indicare il lato in cui si trova il terminale numero uno.

Figura 35.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.

figure/a2-piattina-ata-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 35.2. 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.

figure/a2-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 35.3. 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.

figure/a2-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 35.4. 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.

figure/a2-ata-unita-controllo-connettori

35.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 era 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 che erano 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.

35.3   Caratteristiche del protocollo 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 35.4. 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

35.4   Standard e gergo comune

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

Tabella 35.5. 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 ? ? -- ? 0, 1, 2, 3, 4, 5

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.

35.5   Gestione da parte di un kernel Linux

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} (29.2.10). La gestione accurata delle opzioni di configurazione di quella sezione consente di ottenere le prestazioni massime disponibili dal bus ATA di cui si dispone.

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

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 nel file virtuale /proc/pci:

PCI devices found:
  ...
  Bus  0, device   7, function  1:
    IDE interface: VIA Technologies, Inc. Bus Master IDE (rev 16).
      Master Capable.  Latency=32.  
      I/O at 0xd000 [0xd00f].

35.7   Emulazione SCSI per componenti ATAPI con un kernel Linux

Un kernel Linux non è 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 29.2.10), 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, analizzano 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

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-ROM e l'emulazione SCSI. Se dovessero sorgere dei problemi, è possibile separare il modulo ATAPI per i CD-ROM, 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

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

cdrecord -scanbus

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

35.8   Riferimenti

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome ata_at_attachment.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]