Autor Tema: Problemas con una 24AA1025 (acceso al bloque 1)  (Leído 2290 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


 

anything