Autor Tema: Grabar en eeprom 24LC1024  (Leído 4221 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Grabar en eeprom 24LC1024
« en: 10 de Abril de 2006, 09:59:50 »
Hola compañeros tengo un problema al grabar una eeprom 24lc1024 y es el siguiente, a la hora de direccionar la posicion de memoria yo solo le digo su direccion fisica [1010XXXW/R] un dato de [16 bits] y el [dato a grabar], pero asi creo que no puedo conseguir la capacidad de 1 mega, ya que solo llegaré a 1024 posiciones, que hago mal??? o que he entendido mal??, que que en cada una de las direcciones del dato de 16 bits debo de tener unas 1000 posiciones, pero no se como acceder a ellas, alguna idea?? muchas gracias y a pasar unas buenas pascuas
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Grabar en eeprom 24LC1024
« Respuesta #1 en: 10 de Abril de 2006, 10:16:28 »
Hola compañeros tengo un problema al grabar una eeprom 24lc1024 y es el siguiente, a la hora de direccionar la posicion de memoria yo solo le digo su direccion fisica [1010XXXW/R] un dato de [16 bits] y el [dato a grabar], pero asi creo que no puedo conseguir la capacidad de 1 mega, ya que solo llegaré a 1024 posiciones, que hago mal??? o que he entendido mal??, que que en cada una de las direcciones del dato de 16 bits debo de tener unas 1000 posiciones, pero no se como acceder a ellas, alguna idea?? muchas gracias y a pasar unas buenas pascuas

Hola qiqe, no he usado puntualmente esa memoria pero fijate que con frecuencia las memorias se declaran en bits.  Es decir que si es de 1024 , puede que sean 1024 Mbits? es decir 128KBytes?  Y más aún, si son de 16 bits cada dato, tendrías 65K posiciones de 16 bits cada una (osea 2 bytes por posicion) lo cual redondearía justo el número.

De todas formas, para no decir barbaridades me podrias apuntar un link a la datasheet del integrado que usas?

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Grabar en eeprom 24LC1024
« Respuesta #2 en: 10 de Abril de 2006, 10:38:29 »
si estoy utilizando el 24lc1025 de microchip en esta direccion esta su datasheet

http://ww1.microchip.com/downloads/en/DeviceDoc/21941B.pdf

muchas gracias
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Grabar en eeprom 24LC1024
« Respuesta #3 en: 10 de Abril de 2006, 10:55:06 »
si estoy utilizando el 24lc1025 de microchip en esta direccion esta su datasheet

http://ww1.microchip.com/downloads/en/DeviceDoc/21941B.pdf

muchas gracias

Bien, ahi acabo de leer el datasheet.

Efectivamente es de 1024Kbits, es decir 1Mbit. 

Esta armada de a 8 bits por dato, osea que tienes 128K por 8 bits de información.

Con 16 bits no puedes direccionar los 128K pero fijate que en el datasheet te habla de un "Block Select Bit" (denominado B0).  Si este está en 0, accedes a los primeros 64K, si está en 1, accedes a los segundos 64K

El B0 está en el Control Byte.

Espero que eso te haya disipado tus dudas.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Grabar en eeprom 24LC1024
« Respuesta #4 en: 10 de Abril de 2006, 11:30:36 »
gracias pero no entiend una cosa haber se supone que en B0 me divide la memoria en dos de 512k, con lo que tendria 512.000 bytes, posiciones de memoria para almacenar datos de 8 bits, pero a la hora de direccionarlo solo tengo direcciones de 16 bits, con lo que solo puedo alcanzar 65.536 posiciones de memoria,me quedo como en la novena parte de toda a capacidad del chip no??
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Grabar en eeprom 24LC1024
« Respuesta #5 en: 10 de Abril de 2006, 11:40:39 »
gracias pero no entiend una cosa haber se supone que en B0 me divide la memoria en dos de 512k, con lo que tendria 512.000 bytes, posiciones de memoria para almacenar datos de 8 bits, pero a la hora de direccionarlo solo tengo direcciones de 16 bits, con lo que solo puedo alcanzar 65.536 posiciones de memoria,me quedo como en la novena parte de toda a capacidad del chip no??

Tal vez no leíste o interpretaste bien mi post.

Para que te vayas acostumbrando, las memorias se suelen especificar en bits, no en Bytes.  Esto se debe a que muchas se puden direccionar de a 8bits por vez, 16bits por vez o  32bits por vez.  Entonces como regla general se definen en bits.

Vamos a tu memoria.

Son 1024Kbits (no bytes). = 1Mbit.

8 bits = 1 byte

La memoria tiene 1MBits = 1024Kbits = 128KBytes

Entonces, tu memoria tiene 128KBytes.  Fijate, eso está en la primera hoja del datasheet que me indicaste: The Microchip Technology Inc. 24AA1025/24LC1025/24FC1025 (24XX1025*) is a 128K x 8 (1024K bit)

Con 16 bits puedes direccionar 64KBytes, y con el B0 seleccionas los 64KBytes inferiores o superiores (depende de si está en 0 o 1).


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Grabar en eeprom 24LC1024
« Respuesta #6 en: 10 de Abril de 2006, 21:47:34 »
Ahi Maunix te aclaro un poco el tema.Como bien dice Maunix, esta memo tiene 128Kbytes.

Si B0 = 0 entonces, tendras un rango de acceso desde la posicion 0 de la EEPROM hasta la posicion 65535 inclusive.
Si B1 = 1 entonces, tendras un rango de acceso desde la posicion 65536 de la EEPROM hasta la posicion 131071 inclusive.
Esto da un total de 131072 bytes. Esa es la cantidad que posee tu memoria.

Si programas en ASM, fijate en almacen de Assembler que postee unas rutinas para utilizar el modulo I2C de la flia 16F87Xx.Con unos retoques en las funciones de lectura y escritura de la EEPROM, deberia salir andando con tu memoria.

Te destaco que en este tipo de protocolo(I2C) la deteccion de los acknowledge que envia la EEPROM "deberia" ser obligatoria, sino no tendras manera fehaciente de saber si realmente leiste o grabaste un dato correctamente en la memo.

Una cosa mas, acordate de los bits Chip Select, que en este caso, la memo posee 2, por lo que te permitira poner hasta 4 EEPROM 24LC1025 en paralelo.

Los valores logicos de los pines A0 y A1 de la EEPROM deben coincidir con los valores que envias en el bye control de cada comunicacion.Si no son correctos, la memoria no respondera ya que considera que estas intentando comunicarte con otra...

Ejemplos:
Supongamos que tenes la memoria con un valor de chip select = binario 00
Supongamos que quiero grabar el  dato 10000000(binario) en la posicion 0 de la EEPROM, y luego leerlo.

Pa escribir un byte en modo random harias asi:

1)PIC envia Evento START
2)PIC envia Byte control = 10100000 ; 1010 = identificador EEPROM 0 = Pagina 0 de la EEPROM 00 = Seleccion de Chip 0 = Escribir
3)la EEPROM envia acknowledge
4)PIC envia posicion alta donde grabar = 00000000
5)la EEPROM envia acknowledge
6)PIC envia posicion baja donde grabar = 00000000
7)la EEPROM envia acknowledge ;aqui el contador interno de la EEPROM se ha seteado a la posicion 00000000 00000000
8)PIC envia dato a grabar= 10000000
9)la EEPROM envia acknowledge
10) el PIC finaliza enviando Evento STOP

Ahora vamos a leer la posicion 0(el dato que recien grabamos) de la eeprom. Pa esto voy a utilizar el RANDOM READ.
Destaco que la EEPROM posee un contador interno, que cuando lees o grabas un dato, se autoincrementa en 1 luego del evento.Fijate en el datasheet este tema, muy util.

Por lo tanto, como anteriormente grabe un dato en la posicion 0 de la EEPROM, al finalizar la grabacion(le lleva 5ms en promedio a estas EEPROM !ojo con eso!), el contador interno ahora vale 00000000 00000001. por lo tanto, si hiciese una Current Address Read, la EEPROM leeria la posicion 1 de la EEPROM, y no es la que yo quiero leer...

Lectura en modo random:

1)PIC envia Evento START
2)PIC envia Byte control = 10100000 ; 1010 = identificador EEPROM 0 = Pagina 0 de la EEPROM 00 = Seleccion de Chip 0 = Escribir
3)la EEPROM envia acknowledge
4)PIC envia posicion alta donde grabar = 00000000 (si! grabar! xq en realidad primero hay que iniciar una grabacion para poder setear el contador interno del que te hable)

5)la EEPROM envia acknowledge
6)PIC envia posicion baja donde grabar = 00000000
7)la EEPROM envia acknowledge ;aqui el contador interno de la EEPROM se ha seteado a la posicion 00000000 00000000
8)el PIC envia RE-START ;con este evento se interrumpe la grabacion, pero el puntero interno de la EEPROM quedo seteado!
9)PIC envia Byte control = 10100001 ; 1010 = identificador EEPROM 0 = Pagina 0 de la EEPROM 00 = Seleccion de Chip 1 = Leer
10)la EEPROM envia acknowledge
11)la EEPROM envia el dato leido, el PIC almacena el dato.
12)el PIC genera el evento NACK (No Acknowledge)
13) el PIC finaliza enviando Evento STOP

Los demas modos de escritura y grabacion son parecidos(pero muy distintos :D :D)! espero no haberte hecho mas lio!

Exitos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.


 

anything