Programación EEPROM 24cXX
24c01-24c02-24c04-24c08-24c16
con
Arduino y Gambas
xsetaseta@gmail.com
En el anterior montaje (programación EEPROM 24c02 24c01) había realizado un grabador de memorias 24c01 y 24c02 de 128bytes y 256 bytes. Estos modelos tienen un direccionamiento de 1byte, 256 posiciones de memoria. El bus I2C se había diseñado para en principio para direccionar 256 tipos de dispositivos (Circuitos integrados), y era mas que suficiente. Pero que ocurrió que se utilizó para memorias EEPROM, y las memorias crecieron en capacidad, y ahora es fácil encontrar memoria de hasta 8Mbytes.
Para memorias de entre 256 bytes a 2Kbytes, quitaron los ping de selección de chip E0,E1,E2 para internamente utilizarlos como direccionamiento.
En memorias 24c32 al 24c256, 4Kbytes a 64Kbytes, se mandan dos bytes para sacar la dirección de la memoria. Cuando me lleguen estos modelos de chip actualizaré el programa. Recomiendo leer las hojas de características de los chip para entender su funcionamiento.
Cuando empece a programar los chip 24c04-24c08-24c16 desde arduino no encontré ningún ejemplo, y el que vi resulto que direccionaba mal la memoria, mandando 2Bytes.
Tampoco entendía que en la librería Wire de arduino , asignaran para las memorias la dirección 0x50, #define EEPROM_I2C_ADDRESS 0x50 ,cuando en realidad era 0xA0 (0b10100000). Después de investigar, descubrí que desplazaba 1 bit a la derecha para eliminar el bit de escritura, claro está que luego la librería Wire, vuelve a desplazar a la izquierda para volver a colocar el verdadero valor.
Ahora entendido como se debía utilizar la EEPROM_I2C_ADDRESS como parte de direccionamiento de la memoria, se modifica la programación del arduino. Utilizo los bits A8,A9,A10 de la dirección de memoria, para colocarlos en el Device Select Code en la posición b1,b2,b3. deviceaddress=deviceaddress | (eeaddress >> 8) ;
Conexionado de la memoria con el arduino nano para memorias 24c01-24c02-24c04-24c08-24c16 .
Circuito montado.
Adaptando los modelos SO8 Pin Connections
Programa en gambas.
El programa en gambas (VB para Linux) es sencillo, pero tiene un poco de todo, lee, graba,compara, guarda, restaura, y un pequeño editor.
Para evitar ciclos de escritura, conviene leer la memoria a programar, y cuando se graban datos en dicha memoria se compara el dato que hay en esa posición de memoria y el dato que va se va ha escribir, sin son el mismo no graba nada. Esto evita muchas grabaciones innecesarias y hace grabaciones rápidas. A esto llamo WriteComparación.
Para empezar el programa debemos seleccionar el puerto, normalmente /dev/ttyUSB0 , y pulsamos start . Si todo nos va bien nos saldrá EMPIEZA 24C 01/02 .
Insertada la memoria, leemos sus datos con el botón Read, se visualizaran automáticamente. Si queremos cambiar el modo de visualización seleccionamos DEc , Char, Hex .
Si queremos editar algún dato, pulsamos sobre la pantalla de los datos y mediante los cursores seleccionamos la dirección que queramos modificar. Ahora introducimos el valor en la casilla de Valor y pulsamos Enter, automáticamente cambia el dato e incrementamos la posición de memoria.
Ahora podemos grabar los datos en memoria o guardarlos en un fichero.
Espero que le sirva a alguien este programa.
Mi intención es actualizar el programa para grabar todo tipo de memorias
Programa
Saludos.
Juan Galaz