Autor Tema: Borrar memoria 24lcxxx  (Leído 6189 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Borrar memoria 24lcxxx
« en: 05 de Septiembre de 2006, 18:46:01 »
Hola

Alguno sabe si existe algún método para borrar una memoria completamente o se puede "borrar" sólo colocando el apuntador de escritura en la primer localidad reescribiendo los datos previamente almacenados??

De antemano gracias

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Borrar memoria 24lcxxx
« Respuesta #1 en: 05 de Septiembre de 2006, 19:37:05 »
Borrarla la puedes borrar escribiendo en todas las posiciones 0xFF...


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Re: Borrar memoria 24lcxxx
« Respuesta #2 en: 06 de Septiembre de 2006, 11:57:09 »
Hola vszener

Mmm creo que no entendi muy bien, si yo escribo en esa posición se borra toda la memoria o tengo que ir sobreescribiendo desde el principio hasta llegar a esa localidad??

Gracias

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Borrar memoria 24lcxxx
« Respuesta #3 en: 06 de Septiembre de 2006, 12:29:13 »
Hola vszener

Mmm creo que no entendi muy bien, si yo escribo en esa posición se borra toda la memoria o tengo que ir sobreescribiendo desde el principio hasta llegar a esa localidad??

Gracias

Debes escribir toda la memoria completamente con 0xFF.

El 0xFF es el estado "en reposo" de las memorias EEprom.

Para agilizar la tarea, puedes usar el modo de grabación contínua o "por páginas" sin mover el puntero.  Esto es muy útil ya que no necesitas mandar el address de memoria RAM todas las veces.

Esto lo puedes ver comentado en el datasheet de la memoria.

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 vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Borrar memoria 24lcxxx
« Respuesta #4 en: 06 de Septiembre de 2006, 12:35:08 »
Pues como ya te han comentado, sobreescribir todo a 0xFF


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Re: Borrar memoria 24lcxxx
« Respuesta #5 en: 06 de Septiembre de 2006, 13:44:03 »
Muchas gracias, aunque me podrian explicar un poco mas como es eso de la grabación continua o por páginas, ya leí el datasheet pero todavia no me cae el veinte. Lo que quiero en algunas ocasiones es borrar la memoria a partir de cierta dirección y en otras borrala completamente, desde principio a fin.

Saludos
« Última modificación: 06 de Septiembre de 2006, 13:59:52 por badtzdizzy »

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Borrar memoria 24lcxxx
« Respuesta #6 en: 06 de Septiembre de 2006, 14:37:03 »
Pues con la sentencia for las puedes borrar, desde la dirección que deseas hasta incluso toda la memoria, lo de escribir un byte o una pagina entera esta en el data sheet explicado, se diferencian una de otra en la condición de stop, por ejemplo en una memoria 24lc256, mandas la condición de start, despúes el byte de control, después el byte alto de la dirección, el byte bajo d ela dirección y seguidamente el byte de dato 0 hasta el 63, posteriormente la condición de stop y ya está (Con sus ACK corespondientes, mirate el data sheet en la parte que pone Page Write)

En el post de Ejemplitos en C para 16F648A, concretamente el número 52, se trabaja con una memoria eeprom 24lc256, y una de las funciones es poder borrarla.


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Borrar memoria 24lcxxx
« Respuesta #7 en: 06 de Septiembre de 2006, 14:41:25 »
Muchas gracias, aunque me podrian explicar un poco mas como es eso de la grabación continua o por páginas, ya leí el datasheet pero todavia no me cae el veinte. Lo que quiero en algunas ocasiones es borrar la memoria a partir de cierta dirección y en otras borrala completamente, desde principio a fin.

Saludos

1) Borrarlo en forma continua a partir de la posición 1 o a partir de otra posición, es igual, solo cambias el "address" a partir del cual borras.

2) El modo por página es idéntico al que borras byte a byte, solamente que no vuelves a enviar el address sino que envías datos.

Ej.

Cuando grabas un dato en una posición cualquiera haces

1) Señal de Start
2) Byte de address de hardware (ej. 0xA0) y esperas el ACK
3) Byte o Word con el ADDRESS de la posición de memoria a escribir
4) Dato a escribir en dicha posición
5) Stop

Cuando grabas en forma continua haces

1) Señal de Start
2) Byte de address de hardware (ej. 0xA0) y esperas el ACK
3) Byte o Word con el ADDRESS de la posición de memoria a escribir (esperando el ACK).
4) Dato  #1 a escribir en la posición ADDRESS y esperas el ACK
5) Dato #2 a escribir en la posición ADDRESS+1 (la memoria incrementa el puntero automáticamente)
6) ...
7) Dato #n a escribir en la posición ADDRESS+(n-1)
8 ) Stop


Esta es la diferencia.

Una cosa a tener en cuenta es que si tu memoria tiene más de 128 bytes es que el puntero que se incrementa 'automáticamente' solo tiene 7 bits entonces cuando la cuenta inferior del address llega a una página se pone a 0, si no tienes en cuenta esto con los bits más altos estarás reescribiendo abajo.



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 badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Re: Borrar memoria 24lcxxx
« Respuesta #8 en: 06 de Septiembre de 2006, 18:48:15 »
A ver si les voy entendiendo, se me hace mas facil lo de utilizar un for para borrar la memoria entonces tendría que hacer lo siguiente para el caso de una 24lc512:
Código: [Seleccionar]
for(i=0;i<=localidadmaxima;i++)
{
i2c_write(i,0xff)
}

Para probar lo de la escritura y lectura utilicé un código que encontré en un post, solo le modifiqué algunas cosas para adaptarlo a la lc512. Segun yo estoy mapeando toda la memoria, y pues a través del puerto serie observo que si se grabaron datos  en todas las posiciones que utilicé.
El codigo que utilicé fue el siguiente:
Código: [Seleccionar]
#include <18f4320.h>
#use delay(clock=3579545)
#fuses XT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT
#define EEPROM_SDA  PIN_C4
#define EEPROM_SCL  PIN_C3
#use rs232(baud=9600, xmit=PIN_c6,rcv=PIN_c7)
#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL, FORCE_SW)
#include <24LC512.c>

long int dir;
int val;

main()
{
val=0;
delay_ms(50);
printf("Grabando...");
delay_ms(500);
init_ext_eeprom();
for(dir=0;dir<=8192;++dir)
{
write_ext_eeprom(dir,val);
val=val+1;
if (val>=255)
{
val=0;
}
delay_ms(1);
}
delay_ms(500);
printf("Leyendo...");
delay_ms(200);
printf("Iniciando Transmision");
for(dir=0;dir<=8192;++dir)
{
printf("  %lu --> %u",dir,read_ext_eeprom(dir));
delay_ms(500);
}
printf("Fin de la Transmision");
delay_ms(1000);
while(true)
{
}
}

Segun habia leído por ahí no se podia mapear toda la memoria y pues me quedó esa duda, porque entonces que estaría haciendo yo. Si me pueden despejar esa incógnita se los agradeceria bastante.

Saludos y gracias por todo
« Última modificación: 06 de Septiembre de 2006, 19:17:39 por badtzdizzy »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Borrar memoria 24lcxxx
« Respuesta #9 en: 06 de Septiembre de 2006, 20:24:20 »
Si la función i2cwrite, hace toda la gestión de start y stop y verificación de acknowledge , entonces si, te va a funcionar.

Sino debes seguir los pasos que debes seguir para cualquier operación con una memoria i2c.  Los pasos son los que te he dicho en el punto anterior.

La 2da opción que te puse en mi post anterior es para que hagas la operación "más rapidamente" pero no significa que byte a byte no vaya a funcionar.

Respecto a eso del rango, no sé que habrás leído, pero me parece que si pones qué leiste exactamente te podremos ayudar.

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 badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Re: Borrar memoria 24lcxxx
« Respuesta #10 en: 07 de Septiembre de 2006, 11:43:04 »
Hola Maunix

Mira adjunto una imagen del hyperterminal de windows que es donde muestro los datos, algunos de ellos serian los siguientes:
Código: [Seleccionar]
Grabando...Leyendo...Iniciando Transmision  0 --> 0  1 --> 1  2 --> 2 3 --> 3             
4 --> 4  5 --> 5  6 --> 6  7 --> 7  8 --> 8  9 --> 9  10 --> 10  11 --> 11  12 -
-> 12  13 --> 13  14 --> 14  15 --> 15  16 --> 16  17 --> 17  18 --> 18  19 -->
19  20 --> 20  21 --> 21  22 --> 22  23 --> 23  24 --> 24  25 --> 25  26 --> 26
 27 --> 27  28 --> 28  29 --> 29  30 --> 30  31 --> 31  32 --> 32  33 --> 33  34
 --> 34  35 --> 35  36 --> 36  37 --> 37  38 --> 38  39 --> 39  40 --> 40  41 --
> 41  42 --> 42  43 --> 43  44 --> 44  45 --> 45  46 --> 46  47 --> 47  48 --> 4
8  49 --> 49  50 --> 50  51 --> 51  52 --> 52  53 --> 53  54 --> 54  55 --> 55
56 --> 56  57 --> 57  58 --> 58  59 --> 59  60 --> 60  61 --> 61  62 --> 62  63
--> 63  64 --> 64  65 --> 65  66 --> 66  67 --> 67  68 --> 68  69 --> 69  70 -->
 70  71 --> 71  72 --> 72  73 --> 73  74 --> 74  75 --> 75  76 --> 76  77 --> 77
  78 --> 78  79 --> 79  80 --> 80  81 --> 81  82 --> 82  83 --> 83  84 --> 84  8
5 --> 85  86 --> 86  87 --> 87  88 --> 88  89 --> 89  90 --> 90  91 --> 91  92 -
-> 92  93 --> 93  94 --> 94  95 --> 95  96 --> 96  97 --> 97  98 --> 98  99 -->
99  100 --> 100  101 --> 101  102 --> 102  103 --> 103  104 --> 104  105 --> 105
  106 --> 106  107 --> 107  108 --> 108  109 --> 109  110 --> 110  111 --> 111
112 --> 112  113 --> 113  114 --> 114  115 --> 115  116 --> 116  117 --> 117  11
8 --> 118  119 --> 119  120 --> 120  121 --> 121  122 --> 122  123 --> 123  124
--> 124  125 --> 125  126 --> 126  127 --> 127  128 --> 128  129 --> 129  130 --
> 130  131 --> 131  132 --> 132  133 --> 133  134 --> 134  135 --> 135  136 -->
136  137 --> 137  138 --> 138  139 --> 139  140 --> 140  141 --> 141  142 --> 14
2  143 --> 143  144 --> 144  145 --> 145  146 --> 146  147 --> 147  148 --> 148
 149 --> 149  150 --> 150  151 --> 151  152 --> 152  153 --> 153  154 --> 154  1
55 --> 155  156 --> 156  157 --> 157  158 --> 158  159 --> 159  160 --> 160  161
 --> 161

El conteo va desde el 0 hasta 8192 para el numero de la izquierda, a lo que yo entiendo es que el numero de la izquierda es la posición y el de la derecha el dato. Espero no equivocarme si no es asi corrijanme por favor.
« Última modificación: 07 de Septiembre de 2006, 11:45:13 por badtzdizzy »

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Borrar memoria 24lcxxx
« Respuesta #11 en: 07 de Septiembre de 2006, 12:56:42 »
Me parece ami que te estas liando...lo tienes en tu programa
Código: C
  1. for(dir=0;dir<=8192;++dir)
  2.          {
  3.                 printf("  %lu --> %u",dir,read_ext_eeprom(dir));
  4.                 delay_ms(500);
  5.          }
Primero te pinta la dirección y despues el contenido de la eeprom, ¿qué tiene que ver eso con el borrado? :shock:


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Re: Borrar memoria 24lcxxx
« Respuesta #12 en: 07 de Septiembre de 2006, 13:09:17 »
Exacto, lo que sucede es que yo tenia la duda sobre lo relacionado a lectura y escritura de una eeprom de 512 y maunix me preguntó por los valores que obtenía. Referente a lo del borrado ya quedó. Mi duda está ahora en saber si lo que estoy obteniendo es realmente la dirección en memoria y el contenido.

Saludos y gracias

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Borrar memoria 24lcxxx
« Respuesta #13 en: 07 de Septiembre de 2006, 15:10:56 »
Exacto, lo que sucede es que yo tenia la duda sobre lo relacionado a lectura y escritura de una eeprom de 512 y maunix me preguntó por los valores que obtenía. Referente a lo del borrado ya quedó. Mi duda está ahora en saber si lo que estoy obteniendo es realmente la dirección en memoria y el contenido.

Saludos y gracias

badtzdizzy, en mi caso cuando quise comprobar unas rutinas de grabado de i2c, hice lo siguiente

1) le grabé unos datos, conocidos por mi y por supuesto que era todo el mismo número sino que eran 512 bytes diferentes.

2) Apagué el circuito completamente

3) Lo reencendí y puse a leer los datos de la memoria


Si lo leído concuerda con lo que quisiste grabar, entonces está funcionado todo bien.

Ahora si lo leído no funciona bien, puede ser que hayas grabado mal o que leas mal.  En este caso solo usar un lector externo te puede ayudar a saber si al menos has grabado bien pero estás leyendo mal.



- 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 badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
Re: Borrar memoria 24lcxxx
« Respuesta #14 en: 07 de Septiembre de 2006, 18:40:19 »
Ok maunix, checaré lo que me dices. De hecho creo que despues de dar varias leídas al datasheet voy comprendiendo mejor el asunto. Lo que yo entendí fue que si quiero hacer el grabado por página puedo hacerlo con hasta 128 bytes, porque despues de este valor estaría sobreescribiendo. Para este caso tendría que volver a empezar el proceso pero escribiendo desde la posición 128 verdad? En el caso de grabar byte a byte puedo hacerlo con toda la memoria, cierto?

Comenzaré con los códigos y en cuanto los termine los pongo para que me los revisen

Muchas gracias


 

anything