Universidade
de Coimbra
Faculdade
de Ciências e Tecnologia
Departamento
de Engenharia Informática
Arquitectura de
Computadores II
O interface ATA, seus
sucessores e comandos
Pedro Miguel Felizardo Antunes - 501000949
Lauro António Martins Dinis - 985011434
Cabo de sinal, de alimentação e conectores
CFA
REQUEST EXTENDED ERROR CODE..
CFA
WRITE MULTIPLE WITHOUT ERASE
CFA
WRITE SECTORS WITHOUT ERASE..
DEVICE
CONFIGURATION FREEZE LOCK
SMART
ENABLE/DISABLE ATTRIBUTE AUTOSAVE
SMART EXECUTE OFF-LINE IMMEDIATE
No ano de 1984, a empresa Norte-Americana Compaq deu inicio a um projecto inovador na área dos dispositivos de armazenamento. A sua ideia principal era a de conseguir juntar num só dispositivo dois componentes essenciais para a utilização de unidades magnéticos de armazenamento. Era uma ideia inovadora que se viria a tornar um standard para o futuro.
Conseguiu, com sucesso, juntar a controladora de um sistema compatível IBM AT com o próprio disco rígido. Para isso, contou com o apoio de um fabricante de controladoras, a Western Digital, e um fabricante de discos rígidos, a Imprimis (uma divisão da Control Data Corporation).
Assim nasceu a ST506, uma controladora que podia ser montada directamente no disco rígido e que utilizava um cabo de 40 pinos para se ligar a um adaptador que faria a comunicação com o resto do sistema.
Em 1985 foi criado o primeiro disco rígido IDE, que usava esta controladora, e instalado num sistema Compaq.
Logo a partida deram-se variadas nomenclaturas para o standard IDE. O IDE (Integrated Disk Electronics) ficou conhecido por interface de bus AT devido ao facto dos componentes electrónicos integrados emularem o controlador de discos de um sistema IBM AT. Todavia, uma vez que a própria bus de sistema dos IBM AT também se chamava bus AT, houve uma necessidade de distinguir ambos os sistemas, pelo que a nomenclatura oficial do interface IDE ficou AT-Attachment (ATA).
Em pouco tempo as vantagens do IDE tornaram-se obvias para o resto dos fabricantes. Não só o incremento do custo de produção era insignificante como tornava o fabrico da própria controladora um processo bastante mais económico.
Como consequência deste sucesso começaram a surgir cada vez mais implementações do IDE, tornando necessária a definição de um standard.
Em outubro de 1988, uma comissão do grupo de trabalho X3T9.2 do ANSI, começou a analisar o referido problema da falta de estandardização. O primeiro projecto do common access method (CAM) foi sugerir a criação de uma norma para os interfaces IDE. Este interface passou a chamar-se ATA, porém só foi aprovado em 1994 com o nome de ANSI X3.221-1994.
Contudo, fruto do desenvolvimento, em agosto de 1995 foi aprovado sobre o nome ANSI X3.279-1996 o standard ATA-2 que oferecia taxas de transferencia superiores (já suportando Multi-word DMA modos 1 e 2 e permitindo assim velocidades até 16MB/s) e um conjunto de comandos adicionais.
Aprovado segundo o nome ANSI X3.298-1997, este standard adiciona novas capacidades como SMART e Segurança. Contudo, convém verificar que o ATA-3 não introduz novos (mais rápidos) modos de transferencia de dados (tanto PIO como DMA).
Este e o verdadeiro nome para o interface dos CD-ROM e tapes. Tendo sido originalmente desenvolvido por um grupo de companhias produtoras de unidade ópticas com o apoio da Western Digital e da Oak Technology, o ATAPI ano se tornou imediatamente um standard. A sua especificação foi definida pela small form factor (SFF) pelo nome de SFF-8020 (agora chamado de INF-8020).
O objectivo do ATAPI era permitir a interligação de CD-ROMs e tapes com Discos rígidos no mesmo cabo ATA. Os comandos usados para comunicar com as unidades CD-ROM eram muito semelhantes ao usados nos sistemas SCSI, apesar de as transferencias de dados serem realizadas recorrendo aos protocolos ATA PIO e DMA.
Registado pelo nome ANSI NCITS 317-1998, o ATA/ATAPI-4, também referenciado como ATA33, não só trazia novas funcionalidades como implementava alterações a várias das já existentes. Entre as quais:
-
Adicionaram-se os protocolos ATAPI de command
e reset.
- Retiraram-se alguns comandos ATA, que passaram a ser considerados obsoletos, tais como o comando Format Track e Read/Write Long.
- Introduziu-se um novo protocolo de transferencia de dados, o Ultra DMA, que testava a integridade dos dados e introduzia taxas de transferencia superiores (até 33 MB/s).
- Passou a usar-se um sistema de lista de espera para comandos (command queuing protocol) destinados aos periféricos ATA e ATAPI.
Foram adicionadas mais funcionalidades menores.
ANSI NCITS 340-2000
Ao ATA/ATAPI-5, conhecido por ATA66, retiraram-se alguns comandos antigos e adicionaram-se outros e ainda se melhoraram alguns dos já existentes. Mas a melhoria de maior peso foi a introdução de modos de transferencia mais rápidos, o Ultra DMA 66.
ANSI NCITS 1410-2002
De nome comercial ATA100, o ATA-ATAPI-6 incluía modos de transferencia ainda mais rápidos. O Ultra DMA modo 5, também conhecido por Ultra DMA 100, incluía um LBA de 48 bits em vez dos anteriores 28 e endereços de sectores com 16 bits em vez de 8.
ANSI NCITS 1532-2003
Conhecido por ATA133, o ATA/ATAPI-7 inclui o Ultra DMA modo 6 também chamado Ultra DMA 133 e alguns comandos novos para a utilização de câmaras de vídeo digitais e de interfaces Serial ATA (SATA). A documentação de especificação do ATA/ATAPI-7 foi dividida por três volumes: um para comandos específicos para discos rígidos, uma para o interface tradicional ATA e um para o interface SATA-1.
Aquando do desenvolvimento do ATA/ATAPI-6, um grupo de companhias lideradas pela Intel desenvolveu um projecto para a criação de uma versão destes protocolos com um interface de série, tornando-se provavelmente na melhor inovação no campo dos dispositivos I/O dos últimos anos.
O que é o Serial ATA?
O SATA usa um interface de série com 7 condutores, três dos quais são sinais de terra e os restantes dois pares de sinais diferenciados, um em cada sentido. Usando a tecnologia transceiver da Fiber Channel, os comandos ATA, os quadros de status e os dados são transmitidos em pacotes por este interface. Desta forma os comandos ATA tradicionais permanecem os mesmos que na sua versão paralela.
Mas
perguntemo-nos, qual é a velocidade do SATA? Existem afirmações de que as taxas
de transferencia atingem os 150 MB/s (atenção estas são as taxas máximas
permitidas pela controladora e não as taxas de transferencia médias reais). A
versão paralela do ATA usa Ultra DMA modo 6 (Ultra DMA 133) anuncia taxas
máximas na ordem dos 133 MB/s, logo teoricamente o SATA consegue ser mais
rápido que o ATA/ATAPI-7, mas sendo estas taxas meramente as suportadas pelas
controladoras, as velocidades limitam-se ao suportados pelos discos rígidos
sendo o recorde da Western Digital com o seu modelo “Raptor WD360” com 10 000 RPM, 8 MB de cache, interface SATA
e taxas médias testadas de 62.8 MB/s e Tempos de
acesso na ordem dos 8.3 ms.
O futuro
Estão a ser desenvolvidas versões novas do SATA, o SATA-1+ e o SATA-2, que irão trazer algumas inovações a vários níveis, que ainda não se encontram documentadas.
O interface IDE, cuja principal inovação era o facto do controlador e do periférico se encontrarem juntos num só dispositivo físico, poderia, à primeira vista parecer mais uma bus de sistema do que um interface para periféricos. De tal modo que não se poderá chamar precisamente uma bus I/O uma vez que não existe um sistema de endereçamento universal que permita a utilização e inúmeros dispositivos, aliás o IDE pode apenas servir duas unidades de disco de cada vez.
Nas suas primeiras versões, a configuração de um sistema IDE consistia num controlador IDE, numa placa de interface que usava a bus ISA ou EISA e um ou dois discos rígidos que se conectavam directamente ao adaptador. Na etapa seguinte da sua evolução, os adaptadores passaram a ser implementados sobre a bus PCI, uma vez que as taxas de transferencia máximas da bus isa se limitavam a um máximo de 8.3 MB/s, aumentando a capacidade máxima de taxa de transferência.
Nos últimos anos, uma vez que se tornou obvio que todos os PC’s iriam ter discos rígidos, chegou-se a conclusão de que não há necessidade de desperdiçar um slot de expansão. Deste modo começaram a embutir-se os próprios adaptadores nos chipsets (southbridge) das motherboards, apesar de ainda se utilizarem slots de expansão PCI para o uso de adaptadores, caso a motherboard não inclua o tipo especificado (ex: algumas controladoras raid).
No diagrama anterior podemos reparar na ligação directa do controlador Serial ATA e ATA 133 (ATA/ATPI-7) à South bridge VT8237 de um chipset VIA, o KT400A.
O standard ATA para o interface IDE inclui tanto o cabo de sinal como a própria alimentação do periférico.
O interface IDE standard usa condutores de 40 pinos, mas a partir da versão ATA/ATAPI-4 os cabos passaram a conter 80 condutores. O comprimento do cabo condutor não deverá exceder, em circunstancias normais, os 46 cm e as fichas de ligação são crivadas no cabo e são iguais tanto na extremidade que conecta ao adaptador como na que liga ao próprio periférico.
A alteração do numero de condutores no cabo deu-se para assegurar a integridade do sinal, pois seria necessária ter alguma segurança quando as taxas de transferencia se começaram a tornar mais significativa, assim, apesar dos conectores continuarem a possuir 40 contactos, os cabos passaram a ter 80 condutores. Deste modo podia verificar-se o sinal através de diferencias de potencial entre os pares de condutores. Cada par transporta um sinal variável e um sinal de terra, desta forma é sempre possível reconhecer o sinal com alguma segurança.
Cada contacto do conector executa uma função especifica. Sendo o dois primeiros contactos os de “reset” e de “ground”, do 3 ao 18 são contactos para a transmissão de dados ou comandos, e os restantes contactos servem para controlo, diagnostico e endereçamento. O quadro seguinte contem uma listagem do numero dos contacto e os respectivos nomes de sinal.
Por sua vez os conectores de alimentação (conector AMP) são apenas quatro, o primeiro condutor fornece +12 V, o segundo e o terceiro são sinais de terra e o quarto +5 V.
Apesar de toda a sua evolução, o interface IDE/ATA ainda reflecte as suas origens como um sucessor do original que usava a bus ISA. A ligação entre o sistema e os discos ainda é feita em 16 bits, permitindo a transferencia de 2 bytes simultaneamente num dado momento. De igual modo o numero máximo de dispositivos ligados ao mesmo tempo a um só adaptador permanece inalterado sendo impossível ligar mais de dois periféricos em simultaneidade.
Código do comando
C0h
Descrição
Este comando
pre-elimina os dados. Ele deve ser "emitido" antes de um CFA WRITE
SERCTORS ou de um CFA WRITE MULTIPLE WITHOUT ERASE de modo a aumentar a
velocidade de execução da operação de escrita.
Código do comando
03h
Descrição
Este comando devolve uma informação mais detalhada de um erro
(caso o comando introduzido anteriormente tenha completado com um erro) de modo
a permitir identificar a sua causa de uma forma mais exacta do que a
disponibilizada pelos registos de Status e Error.
Caso o comando anteriormente introduzido tenha completado sem
erros, o CFA REQUEST EXTENDED ERROR CODE devolve a indicação que não se deram
erros.
Código do comando
87h
Descrição
Este comando
devolve informação relativa a um sector especifico (se encontra no estado de
“apagado” ou não, etc...).
Código do comando
CDh
Descrição
Este comando e similar ao WRITE MULTIPLE e não são geradas
interrupções após a escrita de cada sector mas apenas após a transferencia de
um block que contenha o numero de sectores definido pelo SET MULTIPLE MODE.
A execução deste comando também e similar a do WRITE MULTIPLE
excepto que os sectores são escritos sem serem precedidos por uma operação de
“eliminação de dados” pelo que os sectores devem ser “pre-apagados” recorrendo
ao CFA ERASE SECTORS.
Código do comando
38h
Descrição
Este comando é em tudo similar ao WRITE SECTORS excepto no
facto de os sectores serem escritos sem terem sido eliminados previamente pelo
os sectores devem ser pre-eliminados recorrendo ao CFA ERASE SECTORS
Código do comando
D1h
Descrição
Este comando
permite determinar se o aparelho alvo suporta comandos da categoria Media Card
Pass Through.
Código do comando
E5h
Descrição
O comando CHECK POWER
MODE permite ao sistema determinar o estado da alimentação do aparelho. Este
comando apenas consulta o estado do aparelho e não o altera.
Código do comando
51h
Descrição
O comando CONFIGURE
STREAM especifica os parâmetros de operação relativamente a um stream
especifico.
Código do Comando
B1h
Descrição
O comando DEVICE
CONFIGURATION RESTORE desactiva qualquer configuração previamente introduzida
por um DEVICE CONFIGURATION SET e reinicializa o conteúdo do comando IDENTIFY
DEVICE ou IDENTIFY PACKER DEVICE aos valores originais que foram devolvidos
pelo comando DEVICE CONFIGURATION IDENTIFY.
Código do comando
B1h
Descrição
Este comando
permite evitar modificações acidentais da configuração de overlay do aparelho.
Após a execução com sucesso, os comandos DEVICE CONFIGURATION SET, DEVICE
CONFIGURATION FREEZE LOCK, DEVICE
CONFIGURATION
IDENTIFY e DEVICE CONFIGURATION RESTORE devem ser abortados pelo aparelho.
Este comando pode
ser anulado através de um corte na alimentação do aparelho e não pode ser
anulado por hardware ou software.
Código do comando
B1h
Descrição
O comando DEVICE
CONFIGURATION IDENTIFY devolve um
estrutura de dados através de uma transferencia PIO. Os conteúdos desta
estrutura indicam capacidades do aparelho.
Código de comando
B1h
Descrição
Este comando
permite ao fabricante do aparelho ou do sistema reduzir o leque de comandos
opcionais, modos e capacidades suportadas pelo aparelho e indicadas pelo
comando DEVICE CONFIGURATION INDENTIFY.
Código de comando
08h
Descrição
O DEVICE RESET permite ao sistema reinicializar apenas um
aparelho sem afectar o outro.
Código do comando
92h
Descrição
Este comando
permite ao sistema alterar o microcode do aparelho. Estes dados são específicos
do fabricante.
Código do comando
90h
Descrição
Estes comando forca o aparelho a realizar teste internos de
diagnostico. Caso existam dois aparelhos, ambos executaram o comando.
Código do comando
E7h
Descrição
Este comando e usado pelo sistema para obrigar o aparelho a
executar imediatamente todas as escritas pendentes na cache.
Código do comando
EAh
Descrição
Igual ao comando anterior. Este comando apenas deve ser usado
em aparelhos que já implementem endereços de 48bits
Código do comando
DAh
Descrição
Este comando devolve o bits de status WP, MC MCR e NM. Caso a
opção Media Status Notification tenha sido desactivada, este comando devolve
zeros nessas variáveis.
Código de comando
ECh
Descrição
Este comando
devolve ao sistema varias informações sobre os modos suportados, as capacidades
e parâmetros de funcionamento do aparelho.
Código do comando
A1h
Descrição
Idêntico ao comando anterior mas destinado a aparelhos que
suportem os comandos do tipo packet. Alguns aparelhos podem ter de aceder ao
media para poderem completar este comando.
Código do comando
E3h
Descrição
O comando IDLE permite ao sistema colocar o aparelho em modo
idle e também definir o temporizador de Standby,
Código do comando
E1h
Descrição
Este comando
permite ao sistema colocar imediatamente o aparelho em modo idle.
Código do comando
Edh
Descrição
Este comando obriga que qualquer operação pendente seja
terminada, para o media caso este esteja a rodar e ejecta o mesmo.
Código do comando
Deh
Descrição
Quando este comando permite ao sistema trancar o media no
aparelho, impedindo uma troca do mesmo ate que esta condição seja levantada.
Código do comando
DFh
Descrição
Operação inversa a do comando anterior.
Código do comando
00h
Descrição
Este comando aborta um comando que esteja para ser executado.
O aparelho deve responder com uma mensagem de “comando abortado”.
Código do comando
A0h
Descrição
O comando PACKET serve para encapsular um comando (de
aparelho) num comando do tipo packet.
Código do comando
E4h
Descrição
Este comando permite ao sistema ler os conteúdos do buffer do
aparelho.
Código do comando
C8h
Descrição
O comando READ DMA permite ao sistema ler dados através do
protocolo de dados DMA.
Código do comando
25h
Descrição
Idêntico ao anterior mas destinado a aparelhos que suportem
endereçamento de 48bits.
Código do comando
C7h
Descrição
Este comando e similar ao READ DMA. Nesta situação, o
aparelho pode ou não libertar a bus dependente de se os dados estão prontos
para transferir ou não.
Código do comando
26h
Descrição
Igual ao comando anterior mas para aparelhos que suportem
endereçamento de 48bits.
Código do comando
2Fh
Descrição
Este comando devolve ao sistema o log especificado.
Código do comando
C4h
Descrição
Este comando lê o numero de sectores especificado no registo
Sector Count.
Código de comando
29h
Descrição
Idêntico ao comando anterior mas para ser usado com aparelhos
que suportem endereçamento de 48bits.
Código do comando
F8h
Descrição
Este comando devolve o endereço nativo máximo suportado pelo
aparelho.
Código de comando
27h
Descrição
Idêntico ao anterior mas para aparelhos que suportem
endereçamento de 48bits.
Código do comando
20h
Descrição
Este comando lê 1 a 256 sectores como especificado no registo
Sector Count.
Código do comando
24h
Descrição
Idêntico ao comando anterior mas para aparelhos que suportem
endereçamento de 48bits.
Código do comando
2Ah
Descrição
Este comando lê 1 a 65536 sectores como especificado no
registo Sector Count.
Código do comando
2Bh
Descrição
Idêntico ao anterior mas a transferencia e efectuada no modo
PIO.
Código do comando
40h
Descrição
Este comando e idêntico ao READ SECTORS exceptuando no facto
de o aparelho ler os dados do media mas não os chegar a transferir para o
sistema.
Código do comando
42h
Descrição
Idêntico ao
comando anterior mas destinado a aparelhos que suportem endereçamento de 48
bits.
Código do comando
F6h
Descrição
Este comando
recebe uma password e se esta verificar com a previamente definida, o aparelhos
desactiva esta opção de Lock.
Código do comando
F3h
Descrição
Este comando deve ser “emitido” para a unidade antes de um
SECURITY ERASE de modo a permitir o seu apagamento.
Código do comando
F4h
Descrição
Este comando recebe uma password do sistema e, se esta for
igual a previamente guardada no aparelho, este procedera a escrita de zeros em
toda a área de escrita de dados.
Código do comando
F5h
Descrição
Este comando coloca o aparelho em modo “congelado”. Após este
comando ter terminado com sucesso, qualquer outro comando que altere o estado
de Lock do aparelho deve ser abortado pelo mesmo.
Código do comando
F1h
Descrição
Este comando permite definir uma password de acesso.
Código do comando
F2h
Descrição
Este comando permite colocar o aparelho em modo “Unlock”.
Código do comando
A2h
Descrição
O comando SERVICE e usado para obter informação relativa a um
comando anterior.
Código do comando
EFh
Descrição
Este comando
permite definir parâmetros de funcionamento do aparelho. Após um corte de
alimentação ou um reset de hardware, todas as definições são ignoradas e o
aparelho volta aos parâmetros definidos pelo fabricante.
Código do comando
F9h
Descrição
Após este comando
ter sido aplicado, todas as tentativas de acesso a endereços acima do
especificado serão negadas.
Código do comando
F9h
Descrição
Este comando
permite definir uma password. Esta password será retida ate um corte de
alimentação.
Código do comando
F9h
Descrição
Este comando coloca
o aparelho no estado “Set_Max_Locked”. Posteriormente, qualquer outro comando
da categoria SET MAX (excepto SET MAX UNLOCK e SET FREEZE LOCK) devem ser
abortados pelo aparelho.
Código do comando
F9h
Descrição
Operação inversa a
do comando anterior.
Código do comando
F9h
Descrição
Este comando coloca
o aparelho no estado “Set_Max_Frozen”. Posteriormente, os seguintes comando
ficaram desactivados:
-SET MAX ADDRESS
-SET MAX SET PASSWORD
-SET MAX LOCK
-SET MAX UNLOCK
Código do comando
37h.
Descrição
Idêntico ao comando SET_MAX mas destinado a aparelhos que
suportem endereçamento de 48bits.
Código do comando
C6h
Descrição
Este comando define o block count para os comandos READ MULTIPLE, READ MULTIPLE EXT, WRITE MULTIPLE
e WRITE MULTIPLE EXT.
Código do comando
E6h
Descrição
Este comando coloca
o aparelho em modo “sleep”.
Código do comando
B0h
Descrição
Este comando
desactiva a capacidade SMART no aparelho.
Código do comando
B0h
Descrição
Este comando
activa/desactiva a capacidade de auto-save do aparelho.
Código do comando
B0h
Descrição
Este comando activa
o acesso e activa todas as capacidades SMART do aparelho.
Código do comando
B0h
Descrição
Este comando forca
o aparelho a imediatamente activar todas os sensores que processam os dados
SMART
Código do comando
B0h
Descrição
Este comando
devolve a estrutura de dados SMART do aparelho.
Código
B0h
Descrição
Este comando
devolve ao sistema o log especificado.
Código do comando
B0h
Descrição
Este comando forca
o aparelho a indicar ao sistema o seu estado de confiabilidade.
Código do comando
B0h
Descrição
Este comando
devolve ao sistema o log especificado.
Código do comando
E2h
Descrição
Este comando coloca o aparelho em modo de standby.
Código do comando
E0h
Descrição
Este comando forca o aparelho a entrar em standby
imediatamente.
Código do comando
E8h
Descrição
Este comando
permite ao sistema escrever os conteúdos de um sector no buffer do aparelho.
Código do comando
CAh
Descrição
O comando WRITE DMA permite ao sistema escrever dados fazendo
uso do protocolo de transferencia DMA.
Código do comando
35h
Descrição
Idêntico ao anterior mas destinado a aparelhos que suportem
endereçamento de 48bits.
Código do comando
3Dh
Descrição
O comando WRITE DMA FUA EXT e idêntico ao comando WRITE DMA
EXT mas assegura que os dados serão escritos para o media antes de o comando
completar.
Código do comando
CCh
Descrição
Este comando executa de forma similar ao WRITE DMA mas
permite que o aparelho liberte a bus ate que os dados estejam disponíveis.
Código do comando
36h
Descrição
Idêntico ao comando anterior mas destinado a aparelhos que
suportem endereçamento de 48 bits.
Código do comando
3Eh
Descrição
Idêntico ao anterior mas este comando só vai terminar após os
dados terem sido escritos para o media.
Código do comando
3Fh
Descrição
Este comando escreve um pacote de 512bytes de dados para o
log especificado.
Código do comando
C5h
Descrição
O comando WRITE MULTIPLE escreve o numero de sectores
definido no registo Sector Count.
Código do comando
39h
Descrição
Idêntico ao comando anterior mas destinado a aparelhos que
suportem endereçamento de 48 bits.
Código do comando
CEh
Descrição
Similar ao anterior, embora este comando só vá terminar após
os dados terem sido escritos para o media.
Código do comando
30h
Descrição
Este comando escreve 1 a 256 sectores conforme especificado
no registo Sector Count.
Código do comando
34h
Descrição
Idêntico ao comando anterior mas destinado a aparelhos que
suportem endereçamento de 48 bits.
Código do comando
3Ah
Descrição
O comando WRITE STREAM DMA permite ao sistema escrever dados
usando o protocolo de transferencia DMA.
Código do comando
3Bh
Descrição
Este comando escreve 1 a 65536 sectores de acordo com o
especificado no registo Sector Count.
1 – Qual a principal vantagem do Serial ATA (SATA) sobre o AT – Attachment (ATA)?
A velocidade máxima suportada pela controladora SATA e de 150MB/s enquanto que na ATA/ATAPI-7 é de (apenas) 133MB/s.
2 – Quais foram as inovações introduzidas com o ATA-3 em termos de performance?
Não existem quaisquer incrementos nas taxas de transferência. As únicas inovações introduzidas foram o suporte SMART e algumas funcionalidades de segurança.
www.t13.org - Technical Committee T13
AT Attachment
www.Ata-atapi.com -
Information, Test Software and Consulting Services
for Developers of Products using ATA (IDE/EIDE), Serial ATA (SATA), ATAPI and Other Interfaces
http://www.pcguide.com/ref/hdd/if/ide/std.htm - Official IDE/ATA Standards and
Feature Sets
The SCSI
Bus & IDE Interface Second Edition, Friedhelm Schmidt, 1997,ISBN
0-201-17514-2