Grabador EEPROM casero

Desde el último post he intentado hacer un circuito con CPLD que genere señal VGA, pero no lo he conseguido, y no estoy para gastarme 200€ en un analizador lógico para debuguearlo. Quizá más adelante.


Lo que sí me ha salido bien es un grabador de memorias EEPROM casero, que me vendrá bien para trastear con ROMs para el clon de Spectrum (Harlequín) que me tiene que llegar en kit próximamente.


Para este programador he aprovechado código de acceso a RAM del proyecto del post anterior. Grabar una EEPROM es muy fácil, es como grabar un byte en una RAM sólo que hay que esperar 10 ms (una eternidad) después de haber grabado el byte para grabar el siguiente. Hay otra forma más rápida de programarlas que es haciendo polling en el bus de datos hasta que coincide con el valor grabado, pero a mí no me ha funcionado por lo que he dejado el modo lento. Una ROM de 16 KB tarda casi 3 minutos en grabarse.


_programadoreeprom_porarriba


Este programador puede programar EEPROMs que sean compatibles en patillado con las que me compré (en concreto las AT28C256-15PU, que son de 32 KBytes), y también es compatible para lectura de EPROMs estándar 27C64 y 27C128. Ya lo hice pensando en recuperar algunas ROMs de unas 27C64 grabadas en el año 2000, de cuando iba a la universidad (programas de microcontrolador 80C51), lástima que no hubiera ninguna cadena de texto reconocible en el binario.


El programador consta de un zócalo ZIF de 28 pines y un único chip, un microcontrolador ATMEGA1284P-PU –que hace todo el trabajo– con 32 pines utilizables que bastan para el bus de datos y los 15 bits de dirección, además de las señales de control /OE y /WE. Aparte de eso, la placa y algunos componentes pasivos para hacer funcionar el microcontrolador como el cristal, condensadores, la resistencia y el botón de reset, sólo hace falta uno de esos adaptadores serie de USB a TLL, que van muy bien tanto para programar el microcontrolador (que ha de tener bootloader de Arduino, eso sí) como para la comunicación con el PC para transferir el contenido a grabar o leer.


programadoreeprom_porabajo


También he hecho un programa para poder programar, leer o verificar un fichero del sistema en el dispositivo. La comunicación es muy simple: el PC envía un solo byte que indica operación, tamaño y offset, y a continuación el microcontrolador envía el contenido si se está leyendo, o lo recibe byte a byte si se está programando. La programación requiere un byte de confirmación por cada byte que se envía para sincronizarse y que el búfer del puerto serie del microcontrolador no se sature.


El programa en Java recibe los parámetros de comando a realizar, fichero, tamaño y offset por la consola (el offset me permite por ejemplo grabar una rom de 16 KBytes de Spectrum en la mitad alta de una EEPROM de 32 KBytes) Emite mensajes según lo que está ocurriendo, ya sean errores o éxitos. Algo que no había hecho hasta ahora y que me ha quedado curioso es una barra de progreso en la consola mientras se está leyendo o grabando el dispositivo. Queda resultón y es útil.


Aquí encontraréis todo: el programa en Java y el sketch de Arduino (donde está explicada la conexión entre el ATMEGA y la memoria en el zócalo ZIF). Una cosa a tener en cuenta es que el puerto serie lo he hardcodeado a /dev/ttyUSB0 (linux), por lo que para usarlo en Windows hay que cambiarlo, pero Eclipse te puede importar el proyecto y compilarlo automáticamente.


Hasta la próxima!