Leitura e gravação do EEPROM I2C com problemas

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!
}

Olá,
vejo que é a primeira vez que voce usa o forum.
Seja bem vindo.
Mas procure seguir as recomendações do forum.
Lei o tópico que descreve como fazer um bom uso do forum.
" How to get the best out of this forum "
Se tiver dificuldade com o ingles, use a opção de tradução nos tres pontinhos do navegador.

Re-edite o seu tópico ajustando o código e em seguida coloque o entre as tags recomentadas, </>.

Que tipo de EEPROM você está usando? (daatasheet).
Qual o esquema de ligações está fazendo? (post um esquemático), mesmo feito a mão livre.
Você está usando resistores de pull-up no I2C?
Já rodou o scanner.ino para assegurar que o endereço I2C está correto?

Olá tudo bem? Desculpa a demora da resposta, tenho uma estrutura do I2c que utilizamos, porém temos o desafio de saber qual o modelo do EEPROM (numeração raspada de fábrica). Vou postar aqui o resultado do scanner, o que vc me recomenda fazer para achar o datasheet ou alguma caracteristica para saber o modelo da eeprom?

Este scanner é oque utilizei para lê-lo.

#include <Wire.h>
#define TEMPOLEITURA 100
#define TEMPOESPERA 5
byte endereco;
byte codigoResultado=0;
byte dispositivosEncontrados=0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  while (!Serial); 
  scanI2c();           
}

void scanI2c(){
    for (endereco=0; endereco<128; endereco++){
    Wire.beginTransmission(endereco);
    codigoResultado = Wire.endTransmission();
    if (codigoResultado==0){
      Serial.print ("Dispositivo I2c detectado no endereço: 0x");
      Serial.println(endereco,HEX);
      dispositivosEncontrados++;
      delay(TEMPOESPERA);

    }
    delay(TEMPOLEITURA);
  }
  if (dispositivosEncontrados>0){
    Serial.print("Foi encontrado um total de: ");
    Serial.print(dispositivosEncontrados);
    Serial.println(" dispositivos");
  }
  else{
    Serial.println("Nenhum dispositivo foi encontrado !!!");
  }
}


void loop() {

}

Serial Monitor:
Dispositivo I2c detectado no endereço: 0x58
Dispositivo I2c detectado no endereço: 0x59
Dispositivo I2c detectado no endereço: 0x5A
Dispositivo I2c detectado no endereço: 0x5B
Dispositivo I2c detectado no endereço: 0x5C
Dispositivo I2c detectado no endereço: 0x5D
Dispositivo I2c detectado no endereço: 0x5E
Dispositivo I2c detectado no endereço: 0x5F
Dispositivo I2c detectado no endereço: 0x78
Dispositivo I2c detectado no endereço: 0x79
Dispositivo I2c detectado no endereço: 0x7A
Dispositivo I2c detectado no endereço: 0x7B
Dispositivo I2c detectado no endereço: 0x7C
Dispositivo I2c detectado no endereço: 0x7D
Dispositivo I2c detectado no endereço: 0x7E
Dispositivo I2c detectado no endereço: 0x7F
Foi encontrado um total de: 16 dispositivos

OBS: A0 e WP estão no GND (aterrados)

Essa EEPROM está numa placa para saberes que ligaste nos sítios correctos?

EDIT:

Descobri este site, poderá ajudar?