Autor Tema: Problemas con una 24AA1025 (acceso al bloque 1)  (Leído 2291 veces)

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

Desconectado McFly

  • PIC10
  • *
  • Mensajes: 3
Problemas con una 24AA1025 (acceso al bloque 1)
« en: 25 de Septiembre de 2009, 17:15:28 »
Hola gente, pues lo que dice el título, que no hay manera de escribir en el bloque 1 de una eeprom 24AA1025.
El bloque 0 funciona bien, pero cuando intento acceder al bloque 1 se quede quieto despues de escribir la direccion por el I2C (supongo que no hace ni el acknowledge).
A continuacion les pongo las rutinas que estoy usando para escribir y leer de la eeprom, no les pongo las rutinas del I2C ya que he usado bastantes perifericos con ellas y dudo que sea ese el problema.
Como veran las rutinas de lectura y escritura estan pensadas para solucionar el problema de una lectura/escritura secuencial que passe de un banco a otro (es decir, que empiece en 0x0XXXX y termine en 0x1XXXX). Solo comentar que el acceso al bloque 1 no funciona ni al hacer una lectura/escritura que empiece en el bloque 0 i pase al bloque 1 ni si se empieza directamente en el bloque 1 (la unica que funciona es la que empieza y termina en el bloque 0), por lo tanto, dudo que el problema este en la forma en que gestiono el passo del banco 0 al 1.

Muchas gracias de antemano.

Código: [Seleccionar]
#include"TAD_EEP24AA.h"

void EEP24AA_read(long int addr, char* info, int bytes) { //This is the fuction in charge of writting data to the 24AA I2C eeprom.
//It will write "bytes" bytes of data starting at the eeproms address "addr",
char count; //the data written will be read starting at the "info" address.
int i; //The user should be carefull as "addr + bytes - 1" should not be higher than 0x1FFFF.
//Also, the same read instruction can not cross the page boundaries. Sequential
LEDS |= YELLOW_LED;

I2C_start();
if (addr&0x00010000) { I2C_write_byte(EEP24AA_WRITE | EEP24AA_BLK1); }
else { I2C_write_byte(EEP24AA_WRITE | EEP24AA_BLK0); }
I2C_write_byte((addr&0x0000FF00) >> 8);
I2C_write_byte(addr&0x000000FF);

I2C_start();
if (addr&0x00010000) { I2C_write_byte(EEP24AA_READ | EEP24AA_BLK1); }
else { I2C_write_byte(EEP24AA_READ | EEP24AA_BLK0); }
i = 0;
while (i < bytes) {
info[i] = I2C_read_byte();
i++;
if (i < bytes) {
if ((i+(addr&0x0000FFFF)) == 0x00010000) {
I2C_nack();
I2C_stop();
I2C_start();
I2C_write_byte(EEP24AA_WRITE | EEP24AA_BLK1);
I2C_write_byte(0x00); I2C_write_byte(0x00);
I2C_start();
I2C_write_byte(EEP24AA_READ | EEP24AA_BLK1);
}
else { I2C_ack(); }
}
else { I2C_nack(); }
}
I2C_stop();
LEDS &= nYELLOW_LED;
}

void EEP24AA_write(long int addr, char* info, int bytes) { //This is the fuction in charge of writting data to the 24AA I2C eeprom.
//It will write "bytes" bytes of data starting at the eeproms address "addr",
char count; //the data written will be read starting at the "info" address.
int i; //The user should be carefull as "addr + bytes - 1" should not be higher than 0x1FFFF

LEDS |= YELLOW_LED;

I2C_start();
if (addr&0x00010000) { I2C_write_byte(EEP24AA_WRITE | EEP24AA_BLK1); }
else { I2C_write_byte(EEP24AA_WRITE | EEP24AA_BLK0); }
I2C_write_byte((addr&0x0000FF00) >> 8);
I2C_write_byte(addr&0x000000FF);
i = 0;
while (i < bytes) {
if ((i+(addr&0x0000FFFF)) == 0x00010000) {
I2C_stop();
I2C_start();
I2C_write_byte(EEP24AA_WRITE | EEP24AA_BLK1);
I2C_write_byte(0x00); I2C_write_byte(0x00);
}
I2C_write_byte(info[i]);
i++;
}

I2C_stop();
LEDS &= nYELLOW_LED;
}

Desconectado McFly

  • PIC10
  • *
  • Mensajes: 3
Re: Problemas con una 24AA1025 (acceso al bloque 1)
« Respuesta #1 en: 26 de Septiembre de 2009, 19:53:24 »
Por favor que algien me ayude.... :(

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problemas con una 24AA1025 (acceso al bloque 1)
« Respuesta #2 en: 26 de Septiembre de 2009, 20:30:12 »
Revisa el siguiente enlace, hay 2 librerías ya probadas.  ;-)

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Problemas con una 24AA1025 (acceso al bloque 1)
« Respuesta #3 en: 26 de Septiembre de 2009, 21:21:35 »
Bueno, uno de esos códigos es mío y te digo que tengo el mismo problema, o tuve, ya que comprimí lo que guardaba en la memoria de modo que con el banco 0 me alcansó para mi aplicación...
Llegué a pensar y no lo descarto, que los chips sean memorias de 24FC512 que le escribieron 24FC1025. Habría que probar con la librería que viene con el CCS (versiones nuevas) y ver si lo permite...
     

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Problemas con una 24AA1025 (acceso al bloque 1)
« Respuesta #4 en: 27 de Septiembre de 2009, 04:54:20 »
Yo hice esto: Circuito y Driver C para 4 Memorias EEPROM 24AA1025 con un total de 512 Kbytes y llevo dos años utilizándolo masivamente sin problema alguno.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado McFly

  • PIC10
  • *
  • Mensajes: 3
Re: Problemas con una 24AA1025 (acceso al bloque 1)
« Respuesta #5 en: 27 de Septiembre de 2009, 09:53:55 »
Me he mirado los otros codigos y no veo ninguna diferencia.
La verdad es que esta eeprom es de las que davan antes los de microchip gratis
y eso me lleva a pensar que quizas si que simplemente no tengan el segundo bloque....

Desconectado gonzalonalbandian

  • PIC10
  • *
  • Mensajes: 7
Re: Problemas con una 24AA1025 (acceso al bloque 1)
« Respuesta #6 en: 04 de Febrero de 2011, 03:42:31 »
Yo lo solucione escribiendo el address de la memoria con osea 0b10101000 para acceder al bloque 1, pero las direcciones de memoria, osea adonde escribir, lo comenze en 0. y ahi comenzo a escribir en el segundo bloque por su primera direccion..

Ya se que revivi post viejo, pero como no le vi solucion escrita, posteo la mia.
Saludos, espero que les ayude