Proyecto Protocolo I2C, parte 2. (Control del hardware. Recursos avanzados)

                                    (Este enunciado será explicado en la primera clase que corresponda a cada grupo)

 

Descripción:
El alumno dispondrá de una placa hardware conectada al puerto paralelo y diseñará un driver de acceso a dicha placa. El driver debe de poder interactuar con el programa de la práctica 1. El diseño hardware se podrá adquirir de dos formas. Bien se lo construye el alumno con la documentación publicada más abajo, o bien lo puede tomar prestado de la Escuela, quedándoselo hasta que finalice el laboratorio, devolviéndolo al final.

Objetivos:
- Creación de ficheros .com
- Instalación/Desinstalación de interrupciones
- Uso del puerto paralelo como puerto de entrada/salida

- Formato de ficheros binarios
- Uso del RTC (Real Time Clock o Reloj de Tiempo Real)


Elementos que se le proporcionan al alumno
- Creación de ficheros .COM
- Documentación del Puerto Paralelo
- Documentación del RTC
- Esquema eléctrico de la placa, incluyendo la lista de componentes.
- Aplicación software que programa la EEPROM a partir de un fichero binario que se le proporcione.
 

Trabajo a realizar en esta práctica.

  1. Desarrollo del driver.
  2. Modificación del programa de usuario (práctica 1) para el funcionamiento con el hardware conectado. Para permitir compatibilidad entre todos los programas de los alumnos los datos que se graben en la memoria deberán estar en las siguientes posiciones:

        El resto de posiciones de la memoria se que libre, para lo que decida el diseñador (es decir, vosotros)

Desarrollo del driver. Las especificaciones del driver se definieron en la práctica anterior. Se trata de un programa residente que, básicamente, servirá de puente entre la aplicación de usuario y el hardware externo. Dentro del diseño del driver están involucradas dos interrupciones cuyas rutinas de atención son las que componen dicho driver:


Descripción Hardware: Detalles del circuito externo para la lectura y escritura de la memoria.

Programa de test y programador

Datos sobre el PCB, ¡¡ constrúyaselo usted mismo !!    (Ponerse en contacto con Guillermo Glez. de Rivera, despacho B-432))

El esquema eléctrico del sistema se muestra a continuación.

Figura 1. Esquema Lector/Escritor EEPROM Serie I2C. (Versión grande)

Fotografía del Circuito completamente montado:

Figura 2. Fotografía Lector/Escritor EEPROM Serie I2C.

 

NOTA IMPORTANTE: La alimentación del circuito se toma del pin 9 del conector, es decir, del bit de mayor peso del bus de datos (D7). Por tanto este bit DEBERÁ ESTAR A 1 DESDE EL COMIENZO DEL ACCESO A LA MEMORIA HASTA EL FINAL, nunca se debe poner a cero.

Para el correcto funcionamiento de la práctica se debe respetar un protocolo entre el PC y el hardware. Para el desarrollo de esta práctica es necesario conocer el funcionamiento y manejo del puerto paralelo, principalmente en modo SPP:

NOTA IMPORTANTE: Esta práctica puede funcionar en cualquier modo del puerto paralelo, se recomienda el modo SPP por ser el más sencillo  (los modos posibles son SPP o AT, PS/2, EPP y ECP). 


Descripción del protocolo I2C.

El bus I2C es un bus de 2 hilos o líneas: SCL (línea del reloj de sincronización de las transferencias de datos) y SDA (línea de datos). Ambos hilos se conectan a todos los dispositivos que estén conectados al bus. Además, existirá un tercer hilo con la masa (GND) común a todos los dispositivos. Ambas líneas trabajan en colector abierto en los distintos dispositivos por lo que será necesario añadir las resistencias de pull-up a nivel de bus como muestra la figura de abajo. Los valores no son críticos pudiendo oscilar entre 1K8 a 47K aunque valores típicos son 1K8, 4K7, 10K, etc. El valor más recomendado es 1K8. Los dispositivos conectados al bus I2C pueden comportarse como “maestro” o como “esclavo”. El “maestro” es el que genera la señal SCL y el que genera las peticiones de información. Los “esclavos” sólo mandan la información solicitada por el “maestro”. Suele haber un solo “maestro” y varios “esclavos”. En nuestro caso, el “maestro” será el PC y el “esclavo” la memoria EEPROM serie.

Podemos ver que cuando el “maestro” (PC) quiere hablar con el “esclavo”, tiene que enviar una secuencia de arranque (Start sequence) (flanco descendente de un bit) por SDA mientras SCL está a nivel alto. Con esta secuencia, el “maestro” alerta a todos los “esclavos” de que una transferencia de datos está empezando y que deberán “escuchar” para determinar si es para uno de ellos, en cuyo caso deberán “leer” todo lo que les llegue a continuación. Aquellos “esclavos” que no hayan sido “seleccionados” no procesarán el resto de las transacciones de información. Existe otra secuencia especial que se llama de parada (Stop sequence), de modo que todas las transferencias deberían terminar con esta secuencia.

Los datos son transferidos a través de SDA en secuencias de 8 bits (1 byte) empezando por el bit más significativo (MSB). Para enviar cada bit, la señal de reloj SCL debe valer 1 y pasar a 0. Tras enviar los 8 bits, el dispositivo que los ha recibido envía un bit (el 9) de reconocimiento (ACK) que es 0 si la recepción se ha efectuado sin problemas y está preparado para recibir un nuevo dato y 1 si no puede seguir recibiendo y por tanto, el maestro no debería seguir enviando nuevos datos. Las direcciones de los dispositivos conectados al bus I2C se codifican con 7 bits, lo que permite conectar hasta 128 dispositivos (0 a 127). Sin embargo, siempre se envían 8 bits (1 byte), los 7 primeros (A7-A1) con la dirección y el último, el de menor peso (LSB), con un 1 si el “maestro” está escribiendo (enviando) un dato a un “esclavo” o un 0 si está leyendo (recibiendo) un dato de un “esclavo”.

En el cronograma que se incluye a continuación puede observarse el detalle del protocolo de comunicación I2C con la memoria. Se recomienda leer detalladamente el protocolo I2C descrito en la hoja de datos de la memoria.

En nuestro caso, la dirección de la memoria es 0xA0 (ver Table 2. Device Select Code en la hoja de datos de la memoria).  Para acceder a la memoria, el PC (maestro) deberá enviar la secuencia de arranque seguida de un byte (0xA0) que contiene la dirección del módulo en sus 4 bits más significativos (b7-b4), las líneas de habilitación E0 a E2 seleccionadas (a cero) y la señal de control R/W# en el último bit (un 0 para indicar escritura o un 1 para lectura) y por último, un byte (D7-D0) con la dirección de memoria que queremos escribir o leer. Tras esto estamos preparados para escribir o leer un byte.

NOTA: La línea SDA es de lectura/escritura y está conectada a un pin del puerto de control, que inicialmente es sólo de escritura. En realidad, esta salida es en "colector abierto", lo que permite que también pueda ser leído SIEMPRE QUE PREVIAMENTE SE HAYA ESCRITO UN 1 en ese bit. Esto implica que la lectura en el protocolo I2C implementado en el puerto paralelo, según el esquema eléctrico mostrado anteriormente, tenga una cierta particularidad, que es que la lectura del valor de SDA se debe realizar mientras que SCL está a nivel bajo, puesto que si se pone a nivel alto se interpretaría como una señal de START o STOP.

Observar también, como parte del protocolo, que la última lectura de byte no se asiente, no se envía un ACK.


 Ejercicios previos opcionales:

1.- Usando el RTC, hacer un programa que muestre en la esquina superior derecha el carácter "7" cuyo color vaya cambiando de forma cíclica cada 500 msegundos, aproximadamente.
2.- Hacer residente el programa anterior.
3.- Encender y apagar un diodo led cada segundo, conectado al puerto paralelo de la siguiente manera: (este LED se encuentra en la placa que se entrega en esta práctica, conectado tal y  como muestra la siguiente figura)

         Pin 5 conector pto paralelo (D3)    o---------|>|-----/\/\/\/\--------o    pin 18 conector pto paralelo.    (R=330 ohmios )


Plazo de entrega : La presentación y evaluación de esta práctica será según el calendario propuesto. El nombre del fichero o ficheros a entregar será de la forma parejap2.asm, por ejemplo 3a28p2.asm. Si hay más de un fichero, nombrarlo con números sucesivos y añadir un Makefile (NO UN .BAT!!!!) que los ensamble y linke.(3a28p21.asm, 3a28p22.asm,... 3a28p2.bat)


Página editada y mantenida por Guillermo Glez. de Rivera
  Volver atrás