Boa tarde pessoal, estou com um arduíno MEGA 2560 fazendo a comunicação com o eeprom I2C, porém ja analisei o código e parece que o EEPROM mesmo com as pinagens corretas e com o pinos A0, A1, A2 e GND tudo aterrado(usamos o endereço 0x50) e o WP liberado para gravação, ele fica bloqueando a leitura ou gravação.. o Código que estou utilizando é este;
//Inclusao de Bibliotecas
#include <Wire.h>
// Endereços EEPROM I2C
#define eepromAdd1 0x50 //1o Bloco
#define eepromAdd2 0x51 //2o Bloco
//Variáveis
int readVal = 0;
int maxaddress = 256;
// Função de escrita na EEPROM
void escritaEEPROM(int address, byte val, int i2c_address)
{
//inicia transmissão
Wire.beginTransmission(i2c_address);
//Envia endereço de memoria, descomentar linha se necessario (memorias maiores)
Wire.write((int)(address >> 8)); //MSB (memorias maiores)
Wire.write((int)(address & 0xFF)); //LSB
//Grava dado
Wire.write(val);
Wire.endTransmission();
delay(5);
}
//Função para ler EEPROM
byte leituraEEPROM(int address, int i2c_address)
{
byte dataMem = 0xFF;
//Inicia transmissão
Wire.beginTransmission(i2c_address); //iniciar trasmissão, via I2C, para a EEPROM
//Envia endereço de memória, descomentar linha se necessário (memórias maiores)
Wire.write((int)(address >> 8)); //MSB (memórias maiores)
Wire.write((int)(address & 0xFF)); //LSB (endereço onde está gravado o valor)
Wire.endTransmission(); // end the writing part but don’t stop transmission
Wire.requestFrom(i2c_address, 1); //Faz leitura
dataMem = Wire.read(); //Lê o byte, aponta para 1 byte no endereço determinado
return dataMem;
}
void setup(){
//Inicia I2C e Serial
Serial.begin(9600);
Wire.begin();
//Grava dados
Serial.println("Gravando...");
for (int address = 0; address <= maxaddress; address++) {
escritaEEPROM(address, 0xCD, eepromAdd1); //grava bloco 1
escritaEEPROM(address, 51, eepromAdd2); //grava bloco 2
Serial.print("Bloco = ");
Serial.println(address);
delay(5);
}
Serial.println("Gravado!");
delay(2000);
//Faz leitura dos Dados
Serial.println("Lendo dados...");
for (int address = 0; address <= maxaddress; address++) { //Lendo bloco 1
readVal = leituraEEPROM(address, eepromAdd1);
Serial.print("Bloco 1: ");
Serial.print(address);
Serial.print("\t");
Serial.println(readVal);
delay(5);
}
for (int address = 0; address <= maxaddress; address++) { //Lendo bloco 2
readVal = leituraEEPROM(address, eepromAdd2);
Serial.print("Bloco 2: ");
Serial.print(address);
Serial.print("\t");
Serial.println(readVal);
delay(5);
}
Serial.println("Leitura finalizada!");
}
void loop()
{
//sem ação!
}
