Introducción al protocolo ATAPI

Hola electrónicos! 
Hace algún tiempo estuvimos introduciendo un proyecto que consistía en controlar una compactera (CD-ROM) a través de un puerto integrado IDE que utiliza un protocolo ATAPI... 




Pero que es un ATAPI?
Sin preambulos digamos que ATAPI es Advanced Technology Attachment Packet Interface o para nuestro idioma algo así como una "interfaz de paquetes adjuntos de tecnología avanzada" : ( pero se entendió menos que antes... veamos: muchos de uds. deben conocer algún protocolo serie. Estos trabajan enviando palabras de algún número de bits constante con una velocidad de bits dada por alguna señal de clock. En estos tipos de comunicación utilizan solamente 2 o 3 conductores debido al modo que trabajan. En cambio, un protocolo ATAPI utiliza un puerto paralelo en el que se envian bajo la habilitación de algún puerto un paquete de datos que puede ser más de una palabra en una sola transmisión. La ventaja del protocolo ATAPI es la posibilidad de interconectar todos los dispositivos de un sistema complejo como puede ser una computadora. 


Podremos controlar el CDROM a través del puerto IDE (Integrated Drive Electronics) que significa que las funciones vienen integradas en los dispositivos que estos controlan y esto facilita aún más la comunicación del dispositivo.Generalmente se utiliza para conectar esta con la PC o el dispositivo controlador una correa de este tipo:




Pero dejemonos de algunas definiciones complicadas y pasemos a lo que nos interesa...Es importante centrarnos en la definición del protocolo ATAPI para el manejo de CDROMs. El puerto de la compactera o CDROM se ve como en la siguiente imagen:


 
Fuente de la imagen: http://www.elektroda.pl/rtvforum/files-rtvforum/ide_44pin_9389.jpg 

Observemos que tenemos una serie de pines que van desde DA0 hasta DA15, estos conforman el puerto de 16 bits bidireccional paralelo, es decir, los datos entran y salen "todos al mismo tiempo" o de manera concurrente
Una palabra de datos entonces va a tener un tamaño de 16 bits y la siguiente forma:


MSB [ D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 ] LSB

Los sistemas CDROM mas modernos ya poseen un puerto IDE mas extendido que posee 4 pines adicionales. Nosotros no los usaremos, ni le encontraremos utilidad por ahora, asi que olvidense de ellos.

Si seguimos inspeccionando el puerto, encontramos 6 pines adicionales que utilizaremos convenientemente para comunicarnos con el dispositivo:

/RESET -->  Reseteo general del puerto ATAPI.
/DIOW  -->  DataInOutWrite --> Habilita la escritura en el puerto de 16 bits.
/DIOR  -->  DataInOutRead  --> Habilita la lectura en el puerto de 16 bits.
 DA2  }
 DA1  }-->  DataAdress --> Estos 3 bits direccionan un dato en base al reg. ATA.
 DA0  }

Tanto el pin RESET, DIOW y DIOR, trabajan con valores lògicos '0' para habilitarse, o con logica negada o negativa. Por ahora no nos interesaran los otros pines, excepto GROUND, los cuales todos deben ponerse a tierra.

Resumiendo entonces diremos que con este conjunto de 16+6=22 pines estamos en condiciones de poder comandar nuestro CDROM a traves de una comunicacion ATAPI.

Pero, ¿còmo podemos comandar nuestra compactera?
        ¿còmo es el protocolo?
Obviamente, tenemos muchisimos interrogantes en nuestra cabeza, pero sentemos algunas bases. 

Registros ATA

Quien programo PICs conoce lo que es un registro y lo entendera mejor. Para todos los demas, digamos que el registro es una palabra de n bits que posee una cierta direccion para acceder a su contenido y poder leerla. Esta palabra generalemente tiene un tamaño fijo de bits, y cada uno de los bits que la componen se llaman flags. Las flags o banderas son bits que se ponen en '1' o 'se levantan' al ocurrir cierto evento. En una operacion matematica, una bandera llamada 'CERO', por ej, podrìa ponerse en '1', al obtener un resultado nulo.

Los registros ATA o Task File Registers que vamos a utilizar son basicamente 9, pero tengan en cuenta que existen muchos màs. No vale la pena ponerse a tocar temas tediosos. Evitaremos en lo posible eso. Estos registros son:
DATA           -->  direccion 0x00
ERROR/FEATURES -->      "     0x01     
SECTORCOUNT    -->      "     0x02
SECTORNUMBER   -->      "     0x03
CYLINDERLOW    -->      "     0x04
CYLINDERHIGH   -->      "     0x05
DRIVEHEAD      -->      "     0x06
STATUS/COMMAND -->      "     0x07

Estos registros tienen la particularidad de poder ser "configurables", es decir, no solo se pueden leer sino que tambien pueden escribirse, para acceder a ciertas configuraciones.
Trabajaremos con un termino que nos facilitara todo las explicaciones que seguiran del protocolo: cualquiera de estos registros pueden estar "apropiados" por la compactera, diremos que los registros estan owned.Cuando un registro es owned no puede modificarse, o sea son solo leibles. Cuando el controlador o compactera "lo suelta" ya es modificable por nosotros... Es importante entender esto, porque sobre estos registros escribiremos para ejecutar comandos, como ya veremos, tales como Play Audio, Stop Audio, Scan Audio, Pause Audio, etc.

Si les parece mucho, es solo el comienzo; si les parece poco, ya siguen las demas entradas demasiado pronto...

Thanks !

 

1 comentario:

  1. que paso con la continuacion de este articulo?, en estos tiempos me serviria muchisimo

    ResponderEliminar

Deja tu crítica, comentario o novedad sobre el proyecto...