Header
Accueil Forum Membres Téléchargements Services Gratuits
BestPig ToolBox > News > Début de l'aventure avec Arduino
Début de l'aventure avec Arduino-   Posté le Mardi 24 Mai 2011 à 22h27

Ayant acheté un kit Arduino MEGA depuis peu.
http://www.bestpig.fr/images/uploaded/ArduinoMega.jpg

J'ai cherché quelque chose à faire, j'ai donc démonté un vieux lecteur CD H.S. qui trainait par la, et dedans j'ai trouvé une EEPROM M27C512.
Mon but était donc de réussir à dumper la mémoire de l'EEPROM par l'intermédiaire du kit Arduino.

Donc direction la datasheet :
http://www.datasheetcatalog.org/datasheet/stmicroelectronics/2387.pdf

L'électronique et moi c'était pas vraiment encore ça, donc j'ai un peu galéré à tout comprendre mais finalement ça a donné ceci.

Oui le câblage de la bête est pas pas joli joli, mais ca reste fonctionnel :D)
http://www.bestpig.fr/images/uploaded/cablage-m27c512.jpg

Après quelque beau ruinage notamment la tentative de dumper 512 kilo octets d'une EEPROM de 512 kilo bits, ca fonctionne relativement bien ;).

http://www.bestpig.fr/images/uploaded/dump-m27c512.jpg

Et pour finir voici le code développé pour cet usage, faite en ce que vous voulez et surtout bon usage ;)

Le code C à utiliser sous Linux
Code C : [Séléctionner le code]

 
#include <stdio.h>
#include <stdlib.h> 
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <sys/ioctl.h>
#include <getopt.h>
    
char buf[1024];
    
int     main(int argc, char **argv)
{
  int   fd;
 
  fd = serialport_init();
  if (fd == -1)
    {
      fprintf(stdout, "Cannot open arduino serialn");
      return (1);
    }
  serialport_read_until(fd);
  exit(EXIT_SUCCESS);
}
    
int     serialport_read_until(int fd)
{
  char  b[1];
  int   i;
  int   n;
    
  i = 0;
  while (i < 65536)
    {
      n = read(fd, b, 1);
      if (n <= 0)
        usleep(100 * 1000);
      else
        {
          write(1, b, 1);
          ++i;
        }
    }
  return (0);
}
    
int                     serialport_init(void)
{
    struct termios      toptions;
    speed_t             brate;
    int                 fd;
    
    fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
    if (fd < 0)
    {
        perror("Unable to open port ");
        return (-1);
    }
    brate=B9600;
    cfsetispeed(&toptions, brate);
    cfsetospeed(&toptions, brate);
    return (fd);
}


Le code à utiliser sur l'arduino
Code C : [Séléctionner le code]
/*
 M27C512 Reader
 Read data in an M27C512 EPROM with an Arduino MEGA
*/
    
int A0_ADDR  = 38;
int A1_ADDR  = 39;
int A2_ADDR  = 40;
int A3_ADDR  = 41;
int A4_ADDR  = 42;
int A5_ADDR  = 43;
int A6_ADDR  = 44;
int A7_ADDR  = 45;
int A8_ADDR  = 46;
int A9_ADDR  = 47;
int A10_ADDR = 48;
int A11_ADDR = 49;
int A12_ADDR = 50;
int A13_ADDR = 51;
int A14_ADDR = 52;
int A15_ADDR = 53;
    
int Q0_DATA = 2;
int Q1_DATA = 3;
int Q2_DATA = 4;
int Q3_DATA = 5;
int Q4_DATA = 6;
int Q5_DATA = 7;
int Q6_DATA = 8;
int Q7_DATA = 9;
    
int E    = 11;
int GVPP = 12;
    
void setup()
{
  Serial.begin(9600);
    
  pinMode(A0_ADDR, OUTPUT);
  pinMode(A1_ADDR, OUTPUT);
  pinMode(A2_ADDR, OUTPUT);
  pinMode(A3_ADDR, OUTPUT);
  pinMode(A4_ADDR, OUTPUT);
  pinMode(A5_ADDR, OUTPUT);
  pinMode(A6_ADDR, OUTPUT);
  pinMode(A7_ADDR, OUTPUT);
  pinMode(A8_ADDR, OUTPUT);
  pinMode(A9_ADDR, OUTPUT);
  pinMode(A10_ADDR, OUTPUT);
  pinMode(A11_ADDR, OUTPUT);
  pinMode(A12_ADDR, OUTPUT);
  pinMode(A13_ADDR, OUTPUT);
  pinMode(A14_ADDR, OUTPUT);
  pinMode(A15_ADDR, OUTPUT);
    
  pinMode(Q0_DATA, INPUT);
  pinMode(Q1_DATA, INPUT);
  pinMode(Q2_DATA, INPUT);
  pinMode(Q3_DATA, INPUT);
  pinMode(Q4_DATA, INPUT);
  pinMode(Q5_DATA, INPUT);
  pinMode(Q6_DATA, INPUT);
  pinMode(E, OUTPUT);
  pinMode(GVPP, OUTPUT);
}
    
void  set_address(unsigned long addr)
{
  digitalWrite(A0_ADDR, addr & 1);
  digitalWrite(A1_ADDR, (addr >> 1) & 1);
  digitalWrite(A2_ADDR, (addr >> 2) & 1);
  digitalWrite(A3_ADDR, (addr >> 3) & 1);
  digitalWrite(A4_ADDR, (addr >> 4) & 1);
  digitalWrite(A5_ADDR, (addr >> 5) & 1);
  digitalWrite(A6_ADDR, (addr >> 6) & 1);
  digitalWrite(A7_ADDR, (addr >> 7) & 1);
  digitalWrite(A8_ADDR, (addr >> 8) & 1);
  digitalWrite(A9_ADDR, (addr >> 9) & 1);
  digitalWrite(A10_ADDR, (addr >> 10) & 1);
  digitalWrite(A11_ADDR, (addr >> 11) & 1);
  digitalWrite(A12_ADDR, (addr >> 12) & 1);
  digitalWrite(A13_ADDR, (addr >> 13) & 1);
  digitalWrite(A14_ADDR, (addr >> 14) & 1);
  digitalWrite(A15_ADDR, (addr >> 15) & 1);
}
    
int    read_value(void)
{
  int  value;
      
  value = digitalRead(Q0_DATA)
    | digitalRead(Q1_DATA) << 1
    | digitalRead(Q2_DATA) << 2
    | digitalRead(Q3_DATA) << 3
    | digitalRead(Q4_DATA) << 4
    | digitalRead(Q5_DATA) << 5
    | digitalRead(Q6_DATA) << 6
    | digitalRead(Q7_DATA) << 7;
  return (value);
}
    
void loop()
{
  unsigned long  i = 0;
    
  digitalWrite(22, HIGH);
  while (1)
  {
    if (i == 0)
    {
      digitalWrite(E, LOW);
      digitalWrite(GVPP, LOW);
      while (i < 65536)
      {
        set_address(i);
        Serial.print(byte(read_value()));
        ++i;
      }
    }
    else
      delay(2000);
  }
}
 

Vous devez être loguer pour pouvoir déposer un commentaire
Copyright © 2008 PigBox Tous droits réservés.
Toute reproduction totale ou partielle est interdite sans l'accord de l'auteur
Requete(s) SQL : 1 | Temps d'execution : 23.69 ms
Webmaster :
Valid XHTML 1.0 Transitional  Valid CSS!