Mudanças entre as edições de "IntelbrasOP4114"

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
Linha 17: Linha 17:
 
trata-se de uma 27C256 (DIP28)
 
trata-se de uma 27C256 (DIP28)
   
Rascunho de código de arduino para fazer dump dessa eprom:
+
Código de arduino utilizado para fazer dump dessa eprom:
  +
http://code.google.com/p/felipesanches/source/browse/#svn%2Ftrunk%2Farduino%2F27c256%2F_27c256read
 
  +
<pre>
  +
//counter ICs = 2x HCF74393 (total of 16 bits of which we use 15 to address the 32k of ROM mem)
  +
int counter_reset = 2; //pin 2 & 12 of both counter ICs
  +
int counter_increment = 3; //pin 1 of the first counter IC
  +
  +
//eprom IC = 27c256
  +
int eprom_data[8] = {6,7,8,9,10,11,12,13}; // pins 11, 12, 13, 15, 16, 17, 18, 19 of the eprom IC
  +
int oe=4; //pin 22 of the eprom IC
  +
int ce=5; //pin 20 of the eprom IC
  +
  +
long int address;
  +
int data;
  +
  +
void reset_counter(){
  +
digitalWrite(counter_increment, HIGH);
  +
  +
digitalWrite(counter_reset, HIGH);
  +
delay(10);
  +
digitalWrite(counter_reset, LOW);
  +
}
  +
  +
void increment_counter(){
  +
digitalWrite(counter_increment, LOW);
  +
//delay(10);//do we need it?
  +
digitalWrite(counter_increment, HIGH);
  +
}
  +
  +
void setup(){
  +
address=0x0;
  +
int i;
  +
  +
for (i=0;i<8;i++){
  +
pinMode(eprom_data[i], INPUT);
  +
}
  +
  +
pinMode(counter_reset, OUTPUT);
  +
pinMode(counter_increment, OUTPUT);
  +
pinMode(oe, OUTPUT);
  +
pinMode(ce, OUTPUT);
  +
  +
reset_counter();
  +
Serial.begin(38400);
  +
}
  +
  +
int read27c256_counter(){
  +
int i,j;
  +
  +
digitalWrite(oe, LOW);
  +
digitalWrite(ce, LOW);
  +
  +
data=0;
  +
for (i=0, j=1; i<8; i++,j*=2){
  +
if (digitalRead(eprom_data[i])==HIGH){
  +
data+=j;
  +
}
  +
}
  +
  +
digitalWrite(oe, HIGH);
  +
digitalWrite(ce, HIGH);
  +
  +
increment_counter();
  +
return data;
  +
}
  +
  +
long int MAXADDR=0x7fff;
  +
int chunk_size = 32;
  +
void loop(){
  +
reset_counter();
  +
  +
while(address<=MAXADDR){
  +
  +
Serial.print(address, HEX);
  +
Serial.print("\t");
  +
for (int i=0; i<chunk_size; i++){
  +
Serial.print(read27c256_counter(), HEX);
  +
Serial.print(" ");
  +
}
  +
Serial.println();
  +
  +
address+=chunk_size;
  +
}
  +
}
  +
</pre>
   
 
pinagem:
 
pinagem:

Edição das 10h39min de 3 de maio de 2012

OP4114 é um telefone da marca intelbras. O telefone possui 2 módulos: o principal com fone/gancho, teclado alfanumérico, display LCD e botoes para funcionalidade básica do telefone) e o painél auxiliar para ramais.

módulo principal

  • processador Z180 (retrocompativel com z80) da Zilog

módulo de ramais

  • utiliza um microcontrolador 8051
  • alimentação e dados por um conector de telefone de 4 fios (GND, VCC, RX e TX)
  • EPROM
  • CIs básicos da família 74
  • placa mãe interfaceia com um painél genérico de LEDs e botões que deve ser facilmente interfaceável usando um arduino.

EPROM

trata-se de uma 27C256 (DIP28)

Código de arduino utilizado para fazer dump dessa eprom:

//counter ICs = 2x HCF74393 (total of 16 bits of which we use 15 to address the 32k of ROM mem)
int counter_reset = 2; //pin 2 & 12 of both counter ICs
int counter_increment = 3; //pin 1 of the first counter IC

//eprom IC = 27c256
int eprom_data[8] = {6,7,8,9,10,11,12,13}; // pins 11, 12, 13, 15, 16, 17, 18, 19 of the eprom IC
int oe=4; //pin 22 of the eprom IC
int ce=5; //pin 20 of the eprom IC

long int address;
int data;

void reset_counter(){
  digitalWrite(counter_increment, HIGH);

  digitalWrite(counter_reset, HIGH);
  delay(10);
  digitalWrite(counter_reset, LOW);
}

void increment_counter(){
  digitalWrite(counter_increment, LOW);
  //delay(10);//do we need it?
  digitalWrite(counter_increment, HIGH);
}

void setup(){
  address=0x0;
  int i;

  for (i=0;i<8;i++){
    pinMode(eprom_data[i], INPUT);
  }
  
  pinMode(counter_reset, OUTPUT);
  pinMode(counter_increment, OUTPUT);
  pinMode(oe, OUTPUT);
  pinMode(ce, OUTPUT);
  
  reset_counter();
  Serial.begin(38400);
}

int read27c256_counter(){
  int i,j;

    digitalWrite(oe, LOW);
    digitalWrite(ce, LOW);

    data=0;
    for (i=0, j=1; i<8; i++,j*=2){
      if (digitalRead(eprom_data[i])==HIGH){
         data+=j;
      }
    }
  
    digitalWrite(oe, HIGH);
    digitalWrite(ce, HIGH);

    increment_counter();
  return data;
}

long int MAXADDR=0x7fff;
int chunk_size = 32;
void loop(){
  reset_counter();
  
  while(address<=MAXADDR){
    
      Serial.print(address, HEX);
      Serial.print("\t");
      for (int i=0; i<chunk_size; i++){
        Serial.print(read27c256_counter(), HEX);
        Serial.print(" ");
      }
      Serial.println();
    
    address+=chunk_size;
  }
}

pinagem:

  • 28: VCC
  • 27: A14 (CPU 24)
  • 26: A13 (CPU 23)
  • 25: A8 (CPU 18)
  • 24: A9 (CPU 19)
  • 23: A11 (CPU 21)
  • 22: /PSEN (CPU 26)
  • 21: A10 (CPU 20)
  • 20: VSS (CPU 16)
  • 19: AD7 (CPU 30)
  • 18: AD6 (CPU 31)
  • 17: AD5 (CPU 32)
  • 16: AD4 (CPU 33)
  • 15: AD3 (CPU 34)
  • 14: VSS (CPU 16)
  • 13: AD2 (CPU 35)
  • 12: AD1 (CPU 36)
  • 11: AD0 (CPU 37)
  • 10: XXXX
  • 9: XXXX
  • 8: XXXX
  • 7: XXXX
  • 6: XXXX
  • 5: XXXX
  • 4: XXXX
  • 3: XXXX
  • 2: A12 (CPU 22)
  • 1: VCC (CPU 38)