ESCOLA POLITÈCNICA SUPERIOR UNIVERSITAT DE LES ILLES BALEARS Asignatura: Impartición: Curso: Profesor: Enginyeria Tècnica Industrial (esp. Electrònica Industrial) B.O.E. 6-Març-2001 4683-Informática Industrial (9 créditos) 2º Curso-Anual 2006-2007 Javier Antich y Francesc Bonin C O M U N I C AC I Ó N A T R AV É S D E UN BUS I2C FECHA DE ENTREGA: 18 DE ABRIL DE 2007 Se pretende comunicar un μC 8052 con una memoria EEPROM 24LC64 de Microchip por medio de un bus I2C configurado en modo estándar tal y como muestra la figura 1. El microcontrolador actuará como dispositivo maestro mientras que la memoria lo hará como esclavo. En estas circunstancias, notar que NO será en ningún caso necesario arbitrar el uso de bus. El microcontrolador deberá generar la señal de reloj (SCL) y de datos (SDA) para comunicarse con la memoria de acuerdo con el mencionado protocolo y el datasheet de la EEPROM que se encuentra disponible en http://dmi.uib.es/~jantich/ZonDes.html. Figura 1 Deberéis implementar dos subrutinas, una de lectura y otra de escritura, con las siguientes características: − Subrutina de Lectura. Dada una posición de memoria de la EEPROM (X), una posición de la memoria RAM interna del μC (Y) y un número (N), la subrutina debe guardar a partir de Y los N primeros bytes leídos a partir de X. Comunicación a través de un bus I2C Javier Antich, Francesc Bonin La memoria EEPROM permite la lectura de datos de acuerdo con tres tipos de operaciones básicas denominadas Current Address Read, Random Read y Sequential Read. Se deberán implementar tres versiones de la mencionada subrutina, cada una de ellas haciendo uso de un tipo de operación. Notar que, de forma excepcional, la implementación de la subrutina mediante operaciones de tipo Current Address Read podrá hacer uso de una única operación Random Read. Antes de llevar a cabo la lectura, deberéis realizar las siguientes comprobaciones/validaciones: • La posición de memoria X (X + N) debe encontrarse dentro del rango de posibles direcciones de la EEPROM. • La posición de memoria Y (Y + N) debe pertenecer a los 128 bytes altos de la memoria RAM interna del μC (80h<=Y<=FFh). • N debe ser un número positivo mayor que cero. La velocidad de las transferencias de datos I2C será de 50 Kbps, y la generación de las señales SCL y SDA se hará haciendo uso de temporizadores. − Subrutina de Escritura. Dada una posición de memoria de la EEPROM (X), una posición de la memoria RAM interna del μC (Y) y un número (N), la subrutina debe escribir a partir de X los N primeros bytes leídos a partir de Y. La memoria EEPROM permite la escritura de datos de acuerdo con dos tipos de operaciones básicas denominadas Byte Write y Page Write. Se deberán implementar dos versiones de la mencionada subrutina, cada una de ellas haciendo uso de un tipo de operación. Se realizarán las mismas comprobaciones/validaciones que para la subrutina de lectura. La velocidad de las transferencias de datos I2C será, en este caso, de 100 Kbps, y la generación de las señales SCL y SDA se hará SIN la ayuda de temporizadores. 2 Comunicación a través de un bus I2C Javier Antich, Francesc Bonin ENTORNO DE DESARROLLO La práctica se llevará a cabo haciendo uso del entorno de desarrollo Pinnacle 52. Para ello, deberemos configurar adecuadamente dicho entorno. Por un lado, debemos seleccionar el microcontrolador sobre el que queremos trabajar (μC 8052). Esta operación se realiza desde el menú “Project ⇒ Project Options ⇒ Microcontroller Options”. Por otro lado, para simular el esquema de la figura 1, debéis seguir los siguientes pasos: 1. Acceder a “Project ⇒ Project Options ⇒ I2C Bus Configuration”. Os aparecerá la ventana de la figura 2 desde donde podréis configurar las líneas de los puertos de E/S del microcontrolador que representarán las líneas SDA y SCL del bus I2C. Aunque se pueden simular dos buses denominados 1 y 2, realizar únicamente la configuración para el primero de ellos. 2. Acceder a “Project ⇒ Project Options ⇒ Serial I2C EEPROM 24LC64”. Os aparecerá la ventana de la figura 3 desde donde podréis asignar una dirección al dispositivo esclavo conectándolo, además, al bus 1 previamente configurado. A partir de aquí, SÓLO queda implementar el algoritmo que cumpla con la funcionalidad descrita generando las señales SDA y SCL a través de las líneas de E/S definidas en el paso 1. Por otro lado, notar que la funcionalidad de la EEPROM está ya implementada por Pinnacle 52. Finalmente, si durante la ejecución de vuestro programa queréis observar las transferencias que circulan por el bus así como el contenido de la memoria, lo podréis hacer accediendo al menú “View ⇒ I2C Devices” (ver figura 4). Figura 2 3 Comunicación a través de un bus I2C Javier Antich, Francesc Bonin Figura 3 Figura 4 4 Comunicación a través de un bus I2C Javier Antich, Francesc Bonin NOTA IMPORTANTE Cada alumno deberá entregar un informe en donde se explique claramente la solución dada al problema, y se presente el programa resultante comentado así como varios resultados de simulación obtenidos con la herramienta Pinnacle 52 que demuestren la validez de la solución aportada. En la primera página del informe deberá constar el nombre de la asignatura, el título de la práctica, el curso académico, el número asignado al grupo de prácticas, el nombre del autor del informe (en negrita) y, finalmente, el nombre del otro miembro del grupo (texto normal). Tras la entrega de la práctica, se acordará una fecha con cada grupo para la defensa de la misma con una duración aproximada de 30 minutos. La nota final se calculará de la siguiente forma: 10 % – Defensa 20 % – Informe 70 % – Solución al problema planteado No se aceptará ninguna práctica después del plazo de entrega establecido!!! 5