Une toute petite mise à jour qui n'apporte rien de plus que le support du kernel 13146 grace au FbBuild 0.31.
Lien : http://www.bestpig.fr/files/freeBOOT_ToolBox_Maker271a.exe
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); } }
Une toute petite mise à jour qui n'apporte rien de plus que le support du kernel 12625 grace au fbuild 0.20.
Lien : http://www.bestpig.fr/files/freeBOOT_ToolBox_Maker27c.exe
Cette nouvelle version propose de désactiver la vérification du hash.
Ce qui permet a ceux qui avaient un KV corrompu avec un beau sapin de noël de maintenant profiter des nouvelles versions du dashboard sur leur JTAG ;).
Mise à jour :
- La fonction "Ma console ne possède pas de lecteur DVD" fonctionne correctement maintenant.
Lien : http://www.bestpig.fr/files/freeBOOT_ToolBox_Maker27a.exe
Une nouvelle version de freeBOOT.
Changelog freeBOOT V0.11
- Ajout de la méthode LBA des "jasper16a" LBA comme défaut pour les jasper
- Ajout d'une vérification pour l'encryption et le hack du SMC
- Recherche d'un hash valide de smc_config à la place d'un "hard coded"
les offsets, supportent le nom de fichier filename "config.bin"
- Amélioration de la vérification d'encryption du KV
- Désactivation de l'extension de vérification DVD pour les KV OSIG (aka: AP25).
Voici donc la nouvelle version de freeBOOT Toolbox 0.04 Maker v2.6 qui va vous permettre de créer facilement une image freeBOOT 0.04 offrant le support du Kernel 12611 ainsi que de Kinect.
Cette version apporte en plus un support du suédois, et une nouvelle option permettant d'utiliser un patch alternatif pour les consoles n'ayant pas de lecteur DVD.
Lien : http://www.bestpig.fr/files/freeBOOT_ToolBox_Maker26.exe