
¡Descubre cómo las memorias EEPROM I2C están revolucionando el almacenamiento en equipos electrónicos, manteniendo tus datos a salvo incluso ante desconexiones prolongadas...!
Las memorias EEPROM que funcionan bajo el protocolo I2C han ganado poco a poco un espacio en el hardware de los equipos electrónicos hasta transformarse en uno de los medios de almacenamiento de información más populares por su practicidad y sencillez de manejo. Tener la posibilidad de almacenar datos de diversa índole en una memoria no volátil, es una característica importante de los equipos que les permite la desconexión prolongada de cualquier suministro energético y conservar durante mucho tiempo información valiosa que de otro modo, se perdería al desconectar un sistema. También conocidas como memorias de protocolo “serie” las 24CXX son infaltables en cualquier equipo electrónico de consumo masivo y aquí te ayudaremos a comprender su funcionamiento.
Estos diminutos circuitos integrados poseen la capacidad de almacenar datos organizados, los que deben ser grabados de manera apropiada en su interior y, además, tienen particularidades que los hacen sobresalir y destacar dentro de su género. Algunas de las características dignas de mencionar, pueden ser las que a continuación enumeramos:
- Pueden ser escritas y borradas de forma eléctrica = Electrically Erasable Programable Read Only Memory
- Están garantizadas para 1 millón de ciclos de escritura/lectura.
- Pueden llegar a retener la información sin ser alimentadas durante cientos de años.
- Se organizan por páginas para facilitar su direccionamiento y almacenamiento de la información.
- Utilizan para su funcionamiento una tensión única (5Volts o 3,3Volts).
- Son compatibles con el protocolo serial I2C (Marca registrada de Philips).
- Bajísimo costo.
- Amplia variedad de encapsulados para adaptar el modelo necesario, de acuerdo al tamaño de la aplicación.

Repasemos el Concepto I2C El Bus I2C (Inter - Integrated Circuit) es un sistema de comunicación de dos cables, con propiedades de velocidad de transferencia de datos considerada de media a baja (400 Khz. a 100 Khz.) y que fue desarrollado por Philips Semiconductor, a comienzos de la década del 80. Originalmente creado para reducir los costos de los equipos electrónicos, tuvo sus primeras aplicaciones en controles de contraste, brillo y volumen en aparatos de televisión pero actualmente encontramos conexiones por bus I2C en una gran variedad de computadoras, equipos industriales, entretenimiento, medicina, sistemas militares y un ilimitado abanico de aplicaciones e importantes usos potenciales.
Antes de la aparición del Bus I2C, las transferencias de datos de memorias a microprocesadores se realizaban de forma paralela, requiriendo encapsulados con una gran cantidad de pines. La asignación de funciones de los pines se repartía entre el direccionamiento, la selección, el control y la transferencia de datos. Esta última solo requería 8 pines más otros ocho para direccionamiento, entre otros. En contraste con este despilfarro, el Bus I2C permite la comunicación “chip-to-chip” usando solo dos cables, transmitiendo un BIT por vez.

SDA está encargada del intercambio de datos, mientras que SCL sincroniza transmisor y receptor durante la transferencia. En el sistema de comunicación I2C, los dispositivos se identifican como Maestro y Esclavo, según la función que desempeñen.

En Proton debemos indicarle al programa y/o al microcontrolador cuáles son los pines que cumplirán las funciones de SDA y SCL, ya que en algunos desarrollos el dispositivo no posee un módulo SSP nativo. En este caso, se debe indicar mediante instrucciones de programa qué pines se usarán para la interconexión del Bus I2C.
Otra de las cosas a indicar es la velocidad a la que se intercambiarán los datos del bus. La mayoría de los dispositivos pueden operar a 400 Khz o a 100 Khz. Sin embargo, algunas memorias EEPROM no soportan velocidades mayores a 100 Khz. Por ello, si se opta por la frecuencia mínima, se incluye el siguiente comando: DECLARE SLOW_BUS=ON
Luego de esto, ya estamos listos para “abrir” el diálogo dentro del bus con el comando BSTART
De esta forma, el bus ya habrá sido abierto por el microcontrolador (quien asume la función de Master), y se prepara la transferencia de datos hacia el dispositivo Slave. Para leer datos, se utiliza el comando BUSIN seguido de Control, Dirección y la variable destino.
La sintaxis indica que el Master recibirá (BUSIN) un dato, el cual se almacenará en una variable luego de ser extraído del dispositivo conectado al bus.
Escribir en la misma dirección se realiza con el comando BUSOUT seguido de Control, Dirección y la variable que contiene el dato a grabar.
El último bit de la palabra de control pasa de 1 a 0 (por ejemplo, de 161 a 160) para indicar la operación de escritura, y el dato a grabar se toma de la variable correspondiente.

Con este sencillo programa de ejemplo, se puede leer la primer página de una memoria EEPROM I2C y mostrar cada uno de los valores en un display LCD durante medio segundo, antes de pasar al siguiente valor. Para otras páginas, se varía la palabra de control según la necesidad.
De esta forma se pueden guardar multitud de datos en una memoria EEPROM I2C, manteniéndolos listos para su uso durante el desarrollo del programa. Además, funciones extras permiten detectar cortes en la tensión de alimentación y, mediante una batería de respaldo, grabar inmediatamente todas las variables antes de apagar el sistema. Un ejemplo de esta aplicación son los contadores de fichas de los videojuegos de salón, flippers y otras máquinas recreativas. ¿Lo sabías?
como siempre Mr. Sacco, desasnandonos sobre la electronica, bien ahi maestrazo.
Nuevamente muhcas gracias por la explicacion clara sbre un tema por ahi tan jodido de abordar como las memorias. Bah jodido para gente como yo que recien esta adentrandose en el tema.
notas como esta , los hace superiores a otros blog ;)
Felicitaciones
¡Larga vida a Sacco! buenisimos estos temas, siempre preocupandose por sacar de la ignorancia y ayudar en lo posible al lector por interesarse en temas de UTILIDAD.
Me facinaria saber mas sobre lectores opticos y como repararlos, espero tomen en cuenta mi peticion.
¡Saludos!
Muchas gracias, estoy muy interesado en I2C, lo conoció fue por aquí y es verdad muy interesante, igual que RS-485.
Que buena Sacco. Pero en lugar de Proton no podrías poner otro ejemplo más barato?? XD
Buen dia Mario:
Muy buen articulo de enseñanza y practica, lo voy a emplear de una vez en un lcd que tengo y en el cual estoy trabajando, ademas hacerlo con una memoria de la que mencionas para evaluar diferencias. Me gusta mucho el articulo porque nos enseñas la teoria muy bien, pero la practica no la dejas tan molida o al menos no como en articulos anteriores; y pues bueno asi es como aprendemos.
Ha GARGO le cuento que hasta la semana pasada empece a trabajar con Proton y pues nos es facil de manejar cuando te inicias, pero cuando vas aprendiendo es una herramienta excelente, y pues si el costo es bastante alto, pero creo que si quieres dedicarte a esto de los microcontroladores es un precio razonable para una herramienta tan poderosa. Por ahora como dice Mario, lo puedes descargar de la pagina, ademas hay bastante informacion en la red y tambien te dan soporte en la pagina de Proton.
Este tema de las memorias es importantisimo para muchisimas cosas y pues bueno hay muchas aplicaciones que ya tengo en mente para realizar, muchas gracias Mario y pues algun dia te devolveremos tanta informacion y enseñanza que nos has entregado, no se como pero creo que tienes amigos en muchas partes del mundo, o por lo menos en Colombia tienes uno fijo.
Una abrazo Mario, y no dejes estos articulos, que son espectaculares.
Exactamente Mario, pues me he dado cuenta que es algo muy frecuente, me refiero a que a cada rato me aparecen amigos y familiares; que no me lee tal cosa el lector de la pc y antes si, que me hace un ruido extraño el DVD, y otro monton de problemas recurrentes respecto a los lectores, y pues no me queda mas que decir que es algun virus, asi que te agradeceria, Mario, que talvez alguna vez pusieras un tutorial o informacion al respecto.
Por lo pronto estoy rebuscandome por conseguir ciertas cosas como un tester para comenzar unas cositas por alli que he visto en tus articulos.
uuuuuuuu... que lento soy, si ese ya lo lei antes, pero como bien supusiste Mario, solo me lei la primer pagina, que pena, el segundo link es el que necesitaba, asi que tengo pa escudriñar un rato. Muchisimas gracias!
¿Hay alguna forma de conectar una memoria USB al pic para tener GigaBytes de información y no sólo uno o dos Kilobytes?
Muy bueno el artículo Mario, siempre tan didactico y simple. Muchas gracias.
Perfecto! justamente lo que andaba buscando. He leidos tus posts y me parecen de lo mejor, por lo menos para mi que voy empezando con esto de los PICS.
Muchas gracias, y coincido, estos posts hacen la diferencia con otros blogs copy paste.
Como siempre Mario un excelente articulo, un poco tarde el comentario pero aqui estamo al tanto de esta pagina neoteo y sobre todo en lo personal de tus articulos¡¡¡......muchas gracias por este articulo que me hacia bastante falta.....un saludo y abrazo desde Mexico.
gracias por la aportacion de este nuevo0 conocimiento eternamente agradecido
Exelente material de ayuda y enseñanza en los temas abordados.
buenisimo el tema tratado justamente estoy co un tv que tiene el 24c04 y me biene de perilla muchas gracias .
hola quise progrmar una memoria de esta con un aduc 702x perono pude hacer andar el puerto i2c si tenes algun idea.
yo me volvi loco pero no funciono
Tengo armado un circuito de cekit de un secuenciador de luces en proteus vsm bueno soy nuevo en esto la memoria es la 2732 podrias indicarme como programarla para simular en el vsm gracias de ante mano.
Buenas noches... Tengo una pregunta con la que creo me podrías ayudar...
Necesito leer de una memoria eeprom i2c de 8k bytes (64kbits). Que tiene un addressing the 2 bytes.
Pero tengo un lector de smartcards alcor 9528 (una &"%$#(!) no trabaja con protocolo i2c extended y por lo tanto solo funciona hasta memorias de 2k... Por lo tanto, dentro de los comandos que uno le manda al alcor, de lectura... solo envia un byte de address... Existirá alguna forma de igualmente lograr que me lee correctamente la memoria de 8kbytes? Ya logré que escribiera pero la lectura es mucho más difícil cortesía del protocolo...
muy buena información ojala y sigan poniendo mas sobre el tema
magnifica la explicacion tecnica ,clara y precisa mis felicitaciones
amigo una preguntita
si tu estas usando el BUSIN , BUSOUT ,BSTAR,BSTOP
entonces para que sirven HBUSIN , HBUSOUT ,HBSTAR,HBSTOP
y los I2CIN y el I2COUT
porque todos creo que son para el I2C no?
porfavor contestame o mandame la respuesta al :
[email protected]
garcias de antemano!
o acaso todos son para la memoria eeprom
porque si fuera asi dime cual de esos comandos son mejores para compilar
Hola..soy nuevo en nuevo en neoteo, quisiera saber si existe alguna forma de imprimir los temas...me gusto mucho
la forma de explicar ..ahh simplemente esplendida!!
recien estoy que me inicio en esto de eeproms
..cuando copio el documento sale negro no se ve el contenido que hago??
HOLA AMIGO QUIERO SABER CUALES SON LOS DOS PROTOCOLOS DE MEMORIAS EN SERIE GRACIAS
Buenaxo...!!!! chevre
Buen tema, y sobre todo una buena explicacion breve y claro. Felicidades.
yo queria saver si se podia remplasar la memoria eeprom por una memoria usb solo eso grasias
buenas, he actualizado el firmware de un monitor samsung led, el problema es que la actualizacion falló y luego de reiniciar ya no enciende nada el monitor ni la luz de prendido, es acaso la memoria de la que hablan en este articulo la que se debe reparar??
Exelente aporte me ayudo mucho.., Gracias
me gustaría que me ayudaran en lo siguiente; tengo una impresora xerox phaser 3100 mfp y los toner originales traen un chip, como puedo evitar lo del ingreso de la tarjeta y solo poder recargar el toner y me lo reconozca automáticamente
interesante el artículo...pero el verbo "recepciona" no existe..debe ser reemplazado por el verbo "recibir" en la persona y tiempo adecuado...
buen dia:
el pic16f84a tiene i2c por hardware ?? , es en esos pines que declarastes?? , saludos y espero tu respuesta porfa
Mario Sacco, te agradezco enorme mente por sacarme de la ignorancia de
este tema la verdad que yo creía que era mas complicado el bus i2c y las memorias eeprom, y en un solo blog!!! mil gracias me veras por aquí a diario jejeje
Estoy desesperado por llegar a casa y tener tiempo de probar esta comunicación. Es increíble la simplicidad con la que lo explican, y por si fuera poco con mi compilador favorito Proton. Muchas gracias y sigan así
Me gustaría saber cuanto aumentaría esto la memora ram del aparato, por ejemplo un dispositivo arduino viene con 500MG de memoria, con estos módulos se podría ampliar a un giga como un teléfono movil?, o incluso más como si fuera un ordenador?, muchas gracias.
Debes iniciar sesión para publicar un comentario.