Ler EEPROM do SDRAM DDR

Boa noite,
Já estou a 3 dias tentando ler a eeprom (firmware) de um pente de memória RAM.
Quando inicio a leitura ele começa a mostrar valores que com certeza não condizem com o esperado.
Conectei A0 para VCC (3.3V) forçando o endereço de memória 0x51.
SDA - Pino 4 (arduino uno r2)
SCL - Pino 5
Enfim, não estou lendo a eeprom...
O código que fiz já deletei e comecei a editar um que encontrei pela internet e que teoricamente serve para o mesmo propósito. Mas ainda sim sem sucesso.
Agradeço qqr ajuda.

Queres ajuda ou queres que alguem te faca isso por ti?

eeprom (firmware) de um pente de memória RAM

Eeprom num pente de RAM?

Conectei A0 para VCC (3.3V) forçando o endereço de memória 0x51.
SDA - Pino 4 (arduino uno r2)
SCL - Pino 5

Que tipo de barramento de dados usa a tua eeprom ou RAM?
Pelo que descreves penso que seja I2C é correto?
o pino SDA não é o pino 4 mas sim o A4 assim como o SCL não e o 5 mas sim o A5

TWI: A4 or SDA pin and A5 or SCL pin

bubulindo:
Queres ajuda ou queres que alguem te faca isso por ti?

Quero ajuda, vou colocar o código que estou usando no momento aqui no forum.

Eeprom num pente de RAM?

Sim, os pentes de memória possuem uma eeprom inicializá-la (serial presence detect).

Que tipo de barramento de dados usa a tua eeprom ou RAM?

Isso mesmo, a eeprom é i2c. Desculpe-me faltou essa informação, os pinos que estou usando são os analógicos.
grato.

Já modifiquei, deletei e reescrevi, mas pesquisando por ai vi que o pessoal usa este para gravação e leitura na eeprom (i2c). Assim, comecei a trabalhar nele.
Este é o código que estou usando:

#include <Wire.h>

#define eeprom_externa 0x51

void setup(){
 
 Serial.begin(9600);
 
 Wire.begin();
 
 unsigned int address = 0;
 
 for (address = 0; address < 1024; address++) {  //4096
  
 Serial.print(address); 
 Serial.print("\t"); 
 Serial.print(readEEPROM(eeprom_externa, address), DEC); 
 Serial.println(); 
 
  }
 }
 
 void loop(){ }
 
  byte readEEPROM(int deviceaddress, unsigned int eeaddress ) {
  byte rdata = 0xFF;
 
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.endTransmission();
  Wire.requestFrom(deviceaddress,0);
 
  if (Wire.available()) rdata = Wire.read();
  return rdata;
 
}

Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,0);

if (Wire.available()) rdata = Wire.read();
return rdata;

o metodo write escreve um byte, porque fazes o cast para int
o metodo requestFrom aceita 2 argumentos, o endereço e o numero de bytes que queres de volta do slave, porquê pedes 0 bytes?

Syntax

Wire.requestFrom(address, quantity)
Wire.requestFrom(address, quantity, stop)
Parameters

address: the 7-bit address of the device to request bytes from

quantity: the number of bytes to request

stop : boolean. true will send a stop message after the request, releasing the bus. false will continually send a restart after the request, keeping the connection active.
Returns

byte : the number of bytes returned from the slave device

Ja agora que chip estamos a falar

o metodo write escreve um byte, porque fazes o cast para int
o metodo requestFrom aceita 2 argumentos, o endereço e o numero de bytes que queres de volta do slave, porquê pedes 0 bytes?

Nas versões da IDE antes da 1.0 seria Wire.send. Lendo um material a respeito, percebi que foi substituído pelo write. A ideia é pegar os resultados, converter para hex e depois ascii.
Quanto ao requestFrom não tinha reparado nisso. Tanto que o resultado é sempre 0 e 255, 1 e 255 até chegar no 1024..
Vou alterar está linha.
Uma outra coisa que notei é a seguinte: Todo o resultado que venho obtendo (no serial monitor) é de qualquer lugar menos da EEPROM do pente de mémoria. Independentemente se a memória está ou não conectada ao arduino. O grande problema é que não estou conseguindo conectar na memória mesmo que seja para ler um resultado errado.

Ja agora que chip estamos a falar

É um TMC24A02
Obrigado pela ajuda!

So por curiosidade... como estas a alimentar a eeprom?

Eu digo isto porque os pentes de RAM nao tem chips em formato DIP... entao tiveste de colocar alimentacao na eeprom e gostava de saber como.

Eu digo isto porque os pentes de RAM nao tem chips em formato DIP... entao tiveste de colocar alimentacao na eeprom e gostava de saber como.

Uma boa questao.
Ja agora porque é que queres ler a eeprom no pente de RAM.Se fosse eu a tentar fazer isso primeiro arrancava a eeprom pra fora do pente para ter a certeza que nada no circuito da ram esta a afectar o circuito entre a eeprom e o arduino.
Quando tivesse resultados voltava a coloca-la depois ...
Inda te pode estar a falhar outra coisa.A eeprom dispoe de um pino Write protect que provavelmente deve estar ativo, logo nao deves conseguir escrever nada nela.

Input pin for hardware write protection control. If you tie this pin to VCC, the write function is disabled to protect previously written data in the entire memory; if you tie it to VSS, the write function is enabled.
This pin is internally pulled down to VSS

Como estará o teu pino?
Há uns tempos atras para clonar placas de rede com o mesmo MAC address, desoldei a eeprom da placa , li o e clonei umas quantas para ter de reserva para o software :grin: que olhava pra licença como sendo o mac da placa.No teu caso é diferente mas acredito que deves isolar o chip de todo o resto primeiro

#define eeprom_externa 0x51

Como confirmaste o endereço da eeprom?
Para isto ser correcto o pino A0 da eeprom tem de estar a High, A1 a low e A2 a low.

Uma boa questao.
Ja agora porque é que queres ler a eeprom no pente de RAM.Se fosse eu a tentar fazer isso primeiro arrancava a eeprom pra fora do pente para ter a certeza que nada no circuito da ram esta a afectar o circuito entre a eeprom e o arduino.
Quando tivesse resultados voltava a coloca-la depois ...
Inda te pode estar a falhar outra coisa.A eeprom dispoe de um pino Write protect que provavelmente deve estar ativo, logo nao deves conseguir escrever nada nela.

A leitura da eeprom faz parte do estudo que iniciei em engenharia reversa de hardware. Ele está soldada no pente. Infelizmente não consigo instalar o pente e tentar pegar as informações porque só disponho de notebooks. Então soldei fios nos pinos Vcc, Gng, SDA, SLC e A0,1e2.
O A0 está soldado no Vcc os demais aterrados.

Input pin for hardware write protection control. If you tie this pin to VCC, the write function is disabled to protect previously written data in the entire memory; if you tie it to VSS, the write function is enabled.
This pin is internally pulled down to VSS
Como estará o teu pino?
Há uns tempos atras para clonar placas de rede com o mesmo MAC address, desoldei a eeprom da placa , li o e clonei umas quantas para ter de reserva para o software :grin: que olhava pra licença como sendo o mac da placa.No teu caso é diferente mas acredito que deves isolar o chip de todo o resto primeiro

O WP não está conectado.

Vou agora retirar a memória do pente dar uma revisada no código com suas observações.

Obrigado!

Apenas para encerrar o tópico, infelizmente não foi possível ler a EEPROM, mas para não deixar o assunto totalmente de lado fiz outros trabalhos e coloquei aqui:

e

Obrigado pela ajuda!