Ayant acheté un kit Arduino MEGA depuis peu.
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 )
Après quelque beau ruinage notamment la tentative de dumper 512 kilo octets d'une EEPROM de 512 kilo bits, ca fonctionne relativement bien ;).
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); }
/* 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); } }