LABORATORIO DE SISTEMAS ELECTRÓNICOS DIGITALES LSEDG CURSO 98/99 PRÁCTICA BASADA EN EL MICROCONTROLADOR 68HC11 DE MOTOROLA. Versión 1.01 (25-FEB-1999) GRABADOR DE MEMORIAS EPROM/EEPROM Introducción El objetivo de esta práctica es que el alumno, que opcionalmente haya decidido realizar la práctica del laboratorio utilizando un microcontrolador de la familia 68HC11 de Motorola, diseñe e implemente un sencillo Grabador de memorias EPROM/EEPROM. El desarrollo de un sistema digital basado en un microprocesador, en un microcontrolador sin demasiada memoria interna, o en un PIC, necesita de la grabación de una memoria no volátil (Ej. EPROM, EEPROM) (en el caso de un microprocesador siempre es necesario y en el de un microcontrolador depende del mismo y de la aplicación). Veamos un ejemplo: suponga que desea diseñar un sistema capaz de emitir mensajes de voz grabados. Dichos mensajes ocupan muchos bytes de memoria pues a una frecuencia de muestreo de 8 KHz, con un byte por muestra, 1 segundo de voz necesita 8000 bytes. Cualquier mensaje necesita de varios segundos y la memoria no volátil interna de un microcontrolador suele ser pocos Kbytes, por lo que no podremos grabar dicha información en el propio microcontrolador, necesitando de una memoria externa. Durante el desarrollo de un prototipo son muchas las veces que se grabarán y borrarán estas memorias hasta conseguir la funcionalidad requerida. Este proceso de grabación/borrado de memorias no volátiles se realiza utilizando un dispositivo conocido como Grabador de Memorias. Se puede comprar en cualquier tienda especializada y su precio suele ser superior a las 40.000 ptas., dependiendo de sus prestaciones. -1-
Con el fin de que el alumno aprenda a diseñar e implementar sistemas digitales basados en un microcontrolador (en concreto uno de la familia 68HC11 de Motorola) y además, pueda disponer personalmente de su propio Grabador de Memorias de bajo coste, se ha diseñado y propuesto la presente práctica. Descripción de la práctica El Grabador de Memorias propuesto grabará memorias de dos tipos: EPROM y EEPROM. Aunque existen distintos modelos de cada una de ellas, las más habituales (utilizadas) son la serie 27xxx para las EPROM y la serie 28xxx para las EEPROM. Estas dos series son las únicas que deberá programar o grabar nuestro prototipo. El motivo de esta limitación es por un lado pedagógica y por otro práctica, pues se trata de aprender los fundamentos de un Grabador de Memorias en un tiempo limitado por la duración de la asignatura y además, el proceso de grabación y los terminales de las memorias varía ligeramente pero suficiente para complicar el diseño del hardware necesario sin aportar información útil, desde el punto de vista académico, al alumno. Para el desarrollo de la práctica se recomienda que el alumno adquiera o se construya un pequeño sistema basado en el modelo 68HC11E2 de esta familia. De este modo, dispondrá de la suficiente memoria EEPROM interna para guardar su programa de aplicación (Grabador de Memorias). Básicamente, el sistema dispondrá de: Circuito de reloj a 8 MHz Circuito de reset Circuito de alimentación regulada y estabilizada de +5v Circuito de adaptación de niveles serie compatibles RS-232C Un microcontrolador 68HC11E2 (con 2 Kb de EEPROM interna) Jumpers de configuración del modo de funcionamiento El Grabador de Memorias EPROM/EEPROM se comunicará con un PC a través del puerto serie del mismo (COMx). El único software necesario en el PC será un programa de comunicaciones serie estándar (Qmodem, Kermit, Hyperterminal, etc.), que tendrá como función enviar el fichero ASCII con la información a grabar en la memoria desde el PC al Grabador de Memorias. Este fichero de datos no deberá tener ningún formato de código máquina específico (Ej. S28, S19, etc.) para tener la mayor versatilidad posible. Por tanto, cuando queramos grabar un programa de aplicación, deberemos extraer del fichero con el código máquina del programa obtenido después de ensamblar y linkar, el código de las instrucciones, eliminando la información adicional (checksum, formato del registro, dirección del registro, número de bytes del registro, etc.). El Grabador de Memorias (microcontrolador) estará esperando recibir bytes a través de su puerto serie (debidamente configurado en velocidad y en -2-
el formato de los caracteres) los caracteres ASCII a grabar en la memoria seleccionada. A medida que recibe los caracteres en hexadecimal, el programa del Grabador de Memorias irá grabando esa información (en binario) en la memoria colocada en el zócalo de grabación, realizando la verificación de cada dato grabado. En caso de problemas, abortará el proceso de grabación. Hardware del Grabador de Memorias El Grabador de Memorias necesita de un hardware adicional que el alumno deberá diseñar e implementar a partir de las recomendaciones que se dan en esta memoria, aunque podrá alterar el diseño propuesto si así lo cree conveniente siempre que no reduzca las prestaciones y las posibilidades del sistema. Cualquier mejora del diseño será evaluada y valorada. El esquema de bloques del hardware a diseñar e implementar es el que se incluye a continuación. Vcc GND MÓDULO DE TENSIONES DE GRABACIÓN ZÓCALO DE GRABACIÓN DE MEMORIAS MÓDULO DE CONFIGURACIÓN MÓDULO DE DIRECCIONES MÓDULO DE DATOS PORTB PORTA,D PORTC En el diagrama de bloques de la figura anterior podemos destacar los siguientes módulos: Módulo de Direcciones. Es el encargado de poner un valor de dirección en el bus de direcciones de la memoria insertada en el zócalo de grabación. Deberá comprobar si esa dirección es posible para la memoria seleccionada, es decir, que no supera el tamaño de la memoria. Este módulo estará formado por 2 latchs (74373) de 8 bits (podrá ser ampliado a 3 latchs en el caso de querer grabar memorias mayores de 64 Kb), de este modo podremos tener direcciones representadas con 16 bits (hasta 32 Kb). Además, se utilizará un decodificador de 3 entradas y 8 salidas (74138) para poder seleccionar uno de los 2 latchs de direcciones. Se utilizará el -3-
puerto PORTB como puerto de direcciones. El programa de aplicación deberá ser capaz de escribir cada uno de los 2 bytes que conforman un valor de dirección en su latch correspondiente, como paso previo a la lectura o escritura de un dato en la memoria insertada en el zócalo de grabación. El alumno debe tener en cuenta que el bus de dirección de las memorias es de 14 bits como máximo (27256, 28256), y el bus de direcciones del grabador es de 16 bits. Nota.- Es posible que el alumno necesite algún circuito adicional (puertas lógicas) para implementar correctamente este módulo. Módulo de Datos. Este módulo es el encargado de poner el dato a escribir o leer un dato del bus de datos de la memoria insertada en el zócalo de grabación. El bus de datos de las memorias es de 8 bits (1 byte), por lo que se debe utilizar el PORTC como puerto de datos del Grabador aprovechando su bidireccionalidad. Para no cargar el PORTC, debemos utilizar un buffer triestado bidireccional (74245) cuyo sentido habrá que configurar para poder leer o escribir datos, a través de él, en el bus de datos de la memoria del zócalo de grabación. Nota.- Es posible que el alumno necesite algún circuito adicional (puertas lógicas) para implementar correctamente este módulo. Módulo de Configuración. Está formado por un conjunto de jumpers o microswitchs que permitirá la conexión correcta de los terminales de las distintas memorias a las señales correspondientes del Grabador de Memorias. Módulo de Tensiones de Grabación. Las memorias EPROM que se deben utilizar son aquellas cuya tensión de grabación es + 12.5 v. Recuerde que existen versiones más antiguas cuya tensión de grabación es + 25 v, y por tanto, no podrán ser grabadas en el sistema que se va a desarrollar. Durante el proceso de grabación de una EPROM es necesario mantener la tensión del terminal Vpp de la memoria a + 12.5 v y el terminal Vcc a + 6.25 v, aproximadamente. Para grabar un byte sólo habrá que generar un pulso negativo en el terminal PGM de la EPROM. Debido a ello necesitamos diseñar e implementar un módulo capaz de entregar + 12.5 v a Vpp y + 6.25 v a Vcc cuando activemos una señal de control al comienzo de un ciclo de grabación de un byte en EPROM, y por otro lado, en condiciones normales (lectura de la memoria), capaz de generar una tensión de + 5 v para Vpp y para Vcc. Este módulo se alimentará con una tensión superior a + 15 v, no sobrepasando + 20 v para no dañar los reguladores de tensión. Para construir este módulo se recomienda utilizar reguladores de tensión (7812, 7805) para generar las tensiones de + 12.5 y de +6.25. Para conseguir esas tensiones basta con colocar en el terminal de masa del regulador (patilla central) diodos que eleven la tensión de referencia + 1.2 v (con 2 diodos en serie entre el terminal de masa y la propia masa del circuito) para conseguir -4-
+ 6.2 v y + 0.6 v (con un solo diodo) para conseguir + 12.6 v, en los reguladores 7805 y 7812, respectivamente. Los diodos pueden ser del tipo 1N4418. El condensador electrolítico puede ser de 100 uf, 25 v, y el de salida del regulador, de 100 nf, 30v, de tántalo. 7812 V pp 7805 V cc El control de la tensión obtenida a la salida del circuito de generación de tensiones (+ 5 v o + 6.2 v, +5 v o +12.6 v), se puede realizar a través de un transistor funcionando en corte y saturación, del tipo BC557B. Para implementar el circuito de control podemos seguir el siguiente diseño: V a (+6.2 o +12.6) V b (+5.6) D 1 1N4148 Scontrol R 2 10K TRT BC557B 7407 R 1 4K7 si Va = + 6.2 10K si Va = +12.6 C 1 100pF R 3 10K V o +5 si Scontrol = 1 +6.2 o +12.6 si es 0-5-
En el circuito anterior, la salida V o depende del valor de la señal de control S control. Cuando ésta última vale 1 (+ 5 v) el TRT se encuentra en corte, y la tensión de salida V o es la tensión V b, mientras que si la señal de control es 0 (GND), el TRT pasa a un estado de saturación y la tensión de salida V o es la tensión V a, La señal de control es generada por algún terminal de un puerto del 68HC11E2. Zócalo de Grabación de Memorias. Este es un zócalo especial de inserción de memorias que puede encontrarse en comercios del ramo, pero su precio es elevado (unas 5.000 ptas.). Permite la inserción/extracción de memorias con facilidad, sin perjudicar o dañar los terminales de las mismas. Se puede sustituir por un zócalo estándar para circuitos integrados del tamaño adecuado, que son siempre de más bajo coste. Nota.- Las señales de control necesarias (R/W#, PGM#, Vpp, Vcc, etc.) se obtendrán de terminales de los puertos PORTA y PORTD debidamente configurados. Software del Grabador de Memorias Para implementar toda esta funcionalidad el alumno deberá desarrollar las siguientes rutinas: Rutinas de control del puerto serie asíncrono RS-232C (driver COM) Rutinas de escritura/lectura de memorias EPROM (driver EPROM) Rutinas de escritura/lectura/borrado de memorias EEPROM (driver EEPROM) Rutina de comprobación del borrado de la memoria EPROM Rutinas de control y ejecución de los comandos enviados desde el PC al Grabador de Memorias (configuración puerto serie, tipo de memoria a grabar, memoria a grabar (27256, 27128, 2764, 28256, 28128, 2864), dirección inicial y final de grabación, verificación de borrado de una memoria EPROM, volcado del contenido de cualquier memoria). Además, deberá diseñar e implementar el programa principal encargado de llamar adecuadamente a cada de las rutinas antes mencionadas. Tenga en cuenta que todo el programa debe tener un tamaño menor de 2 Kb y necesitar una memoria RAM de menos de 256 bytes (la memoria interna) si no quiere conectar una memoria RAM externa. Se valorará todo aquello que sea incorporado por el alumno y que mejore la funcionalidad del grabador (p. ej. indicadores acústicos, I/F de usuario fácil de manejar, verificadores on-line del proceso de grabación, etc.). Además, se valorará la reducción del hardware necesario (menor coste), la posibilidad de grabar más tipos de memoria (p. ej. flash EPROM), etc. -6-
Información Complementaria A continuación se incluye información interesante para el desarrollo de la práctica. Esta información deberá complementarse con las datos técnicos de los fabricantes de los distintos componentes que se utilicen durante la realización de la misma. Memorias EPROM Las memorias EPROM (erasable and programmable read-only memory or ROM) son memorias regrabables un número elevado de veces. Su función suele ser almacenar programas y datos que nunca, o con muy escasa frecuencia, necesitan ser alterados. El motivo es que el borrado de dichas memorias no puede realizarse in situ, sin extraer la memoria del sistema del que forma parte, pues necesita de luz UV (ultravioleta) y de un proceso de grabado imposible de realizar, la mayor parte de los casos, sobre el propio sistema del que forman parte (necesitan tensiones especiales por encima de los +5 v. típicos de la alimentación de un sistema digital). Borrado de una EPROM El borrado de una memoria EPROM necesita de iluminación UV. La radiación alcanza las células de la memoria a través de una ventanilla transparente situada en la parte superior de la misma. Debido a que la radiación solar e incluso la luz artificial proveniente de tubos fluorescentes borra la memoria lentamente (de una semana a varios meses), es necesario tapar dicha ventanilla con una etiqueta opaca que lo evite, una vez que hayan sido grabadas. El proceso de borrado necesita de una lámpara de luz UV que emita radiación en torno a los 2537 Å a una distancia de unos 2,5 cm de la memoria. Para borrarla se necesita que la cantidad de radiación recibida por la misma se encuentre en torno a los 15 W/cm 2 durante un segundo. El tiempo de borrado real suele ser de unos 20 minutos debido a que las lámparas utilizadas suelen tener potencias en torno a los 12 mw/cm 2 (12 mw x 20 x 60 seg. = 14.4 W de potencia suministrada). Es importante recordar que no es aconsejable la sobreexposición, es decir, sobrepasar el tiempo de radiación o lo que es lo mismo, la potencia luminosa suministrada a la memoria. Conviene que exista algún procedimiento para comprobar el estado de una EPROM después del proceso de borrado. Si está bien borrada todos los bytes que se lean deben contener el valor $FF (todos a 1). En el laboratorio de SEDG existe un borrador de EPROMs a disposición del alumno, para que pueda utilizarlo durante el desarrollo de la práctica. Para su uso deberá hablar con algún profesor de la asignatura con el fin de regular lo mejor posible el empleo del único borrador disponible por todos los alumnos que decidan hacer esta práctica. -7-
Grabado de una EPROM Las memorias EPROM que se grabarán son de la serie 27xxx, en su versión moderna, con una tensión de grabación de 12.5 v (en el encapsulado de la memoria suele existir información de la tensión de grabación como PGM 12.5). Es importante que el alumno se asegure que las memorias que adquiera tengan esa tensión y no otra. Su precio oscila en torno a las 300 ptas. De la serie 27xxx sólo se grabarán las memorias siguientes: 27256 (32 Kb), 27128 (16 Kb), 2764 (8 Kb), por considerar que esos tamaños son suficientes para almacenar los programas y los datos de pequeñas aplicaciones. Además, los terminales de las 3 memorias tienen funciones muy parecidas, lo que simplifica mucho el hardware a diseñar. Para grabar una memoria EPROM es necesario utilizar un algoritmo recomendado por los fabricantes de memorias con el fin de acelerar el proceso de grabación de un byte y es el siguiente: 1. Establecer la dirección a grabar en el bus de direcciones de la EPROM 2. Establecer el dato (byte) a grabar en el bus de datos de la EPROM 3. Cambiar las tensiones (Vcc de +5 v a + 6.2 v, y Vpp de +5 v a 12.6 v), y poner OE# a 1. 4. Inicializar a 0 un contador de pulsos de grabación aplicados 5. Generar un pulso de grabación (PGM#) negativo de al menos 1 ms 6. Incrementar en 1 el número de pulsos aplicados 7. Si se han aplicado ya 25 pulsos, activar un flag de fin de pulsos aplicados 8. Leer el byte que se acaba de grabar. Para leer el byte basta con poner la señal OE# a 0 después de desactivar el pulso negativo en PGM#. 9. Compararlo con el byte original 10. Si son distintos: Si no se han aplicado 25 pulsos, ir a 5; Si se han aplicado los 25 pulsos, dar un mensaje de fallo de la memoria, poner Vcc a +5 v y Vpp a +5 v, y salir. 11. Si son iguales, poner Vcc a +5 v y Vpp a +5 v, y salir. Para poder realizar el proceso de grabación del algoritmo es necesario disponer del circuito electrónico capaz de generar las tensiones necesarias: + 6.25 v para Vcc y + 12.5 v para Vpp, que ya hemos estudiado. Es conveniente obtener la información técnica que facilita el fabricante para cada una de las memorias que vamos a grabar. Observaremos que no existe compatibilidad total entre ellas, por lo que se recomienda utilizar jumpers o microswitchs para la configuración hardware adecuada en función de la memoria a grabar. -8-
Memorias EEPROM Las memorias EEPROM (electrically erasable and reprogrammable ROM) o E 2 PROMs como son llamadas habitualmente, son memorias más caras y más rápidas que las EPROM (pueden tener tiempos de acceso alrededor de 35 ns) y una vida media en torno a los 10.000 ciclos de borrado/escritura. Se caracterizan por usar una única tensión para su lectura y su escritura, coincidiendo con la tensión de + 5 v. de alimentación de un sistema digital. Este hecho las hace muy atractivas en muchas aplicaciones, pues permite alterar su contenido sin necesidad de extraer la memoria del sistema digital del que forma parte. Borrado de una EEPROM El proceso de borrado de una EEPROM es muy sencillo. En realidad las memorias actuales incorporan en su interior los recursos necesarios para borrar la propia memoria eléctricamente. Durante el proceso de grabado, la propia memoria realiza el borrado previo del byte que va a grabar de forma automática. No es necesaria ninguna tensión especial de borrado ni ningún procedimiento. Grabado de una EEPROM La grabación de una memoria EEPROM no requiere ninguna tensión especial (basta con los + 5 v de la alimentación general del sistema y de la propia memoria, su Vcc), ni dispone de terminales especiales de grabado como en el caso de la EPROM. Su aspecto, desde el punto de vista de terminales y de funcionalidad es similar al de una memoria SRAM (estática) equivalente. Es el propio terminal de lectura/escritura el que hace las funciones de terminal de grabación. Lo único que varía con respecto a una memoria RAM es el tiempo necesario para grabar la memoria (en torno a los 10 ms/byte). El hecho de necesitar sólo una tensión de alimentación/grabación de + 5 v es debido al hecho de que las EEPROMs actuales incorporan las bombas de carga necesarias durante el proceso de grabación y funcionan con esta tensión. De la serie 28xxx de EEPROMs sólo vamos a grabar la 28256, 28128, 2864, por las mismas razones que vimos en el caso de las memorias EPROM. Además, esta serie 28xxx y la 27xxx de las EPROM son bastante parecidas en terminales, por lo que el hardware adicional se simplifica. Los fabricantes recomiendan seguir el siguiente procedimiento (algoritmo) para grabar sus memorias: -9-
1.Establecer la dirección a grabar en el bus de direcciones de la EEPROM 2.Establecer el dato (byte) a grabar en el bus de datos de la EEPROM 3.Activar la señal R/W# a 0 (escritura) 4.Leer el byte que se acaba de grabar. Para leer el byte basta con poner la señal R/W# a 1. Leer el bit MS del byte grabado. 5.Compararlo con el bit MS del byte original 6.Si son distintos, volver a 4. Si son iguales, salir. Durante el proceso de grabación de un byte, mientras se está grabando el dato, el bit de mayor peso (MS) tiene el valor complementado del valor real del mismo, es decir, si realmente es un 1 en el byte que se está grabando, mientras se realiza el proceso, valdrá 0. Este mecanismo incorporado en la memoria permite simplificar el proceso de grabación de la misma pues sólo habrá que esperar a que este bit MS deje de estar complementado (tiempo de grabación de la memoria) para continuar grabando otro dato. Igual que en el caso de las EPROM, se recomienda obtener las hojas técnicas del fabricante de cada una de las memorias de la serie 28xxx que vamos a grabar. Como observará, no existe compatibilidad total entre ellas, y se recomienda utilizar jumpers o microswitchs para la configuración hardware adecuada en función de la memoria a grabar. Bibliografía Hojas de características de las memorias 2764, 27128, 27256, 2864, 28128, 28256 de cualquiera de sus fabricantes (INTEL, ST THOMSON, etc.). Esta información se podrá conseguir en la ventanilla del laboratorio. Microprocessor Systems Design, 68000 Hardware, Software and Interfacing, Alan Clements, Third Edition, PWS Publishing Company, Boston -10-