NAND Flasher

Ciao a tutti, smanettando frequentemente con XBOX 360 mi è venuta un'idea: perchè non creare con Arduino un NAND flasher per poter dumpare il contenuto della memoria? Soluzioni simili esistono già sia LPT(lentissime e rognose) e USB(artigianali basate su 18F2455 o commerciali) ma io volevo provare a crearmene una basata su questa board. Xbox monta Hynix HY27US da 16MB alla quale pensavo di interfacciarmi con il mio Arduino(Mega2560 FTDI) , sparare i dati letti su USB collegata al PC e tramite un app ad hoc costruirmi il .bin con il contenuto della NAND.

Il mio dubbio è: E' una cosa fattibile? O meglio, ne vale la pena? Un flasher LPT ci impiega circa 45 minuti a dumpare il contenuto, mentre quello USB solamente una manciata di minuti. Sarebbe realizzabile una soluzione che abbia risultati nettamente migliori della LPT(non dico a livello del flasher fatto col PIC)?

Il mio timore è che la connessione Arduino-PC possa essere un collo di bottiglia, dubbio alimentato dai post che segnalano problemi di latenza elevata sulla connessione seriale.

Voi cosa ne dite dell'idea?

Grazie a tutti!

Up!

Usane una basata su 18F2455 ed USB già testata e funzionante e risparmierai un sacco di tempo, quanti dump devi fare per giustificare tante ore di lavoro? Non è una cosa che si fa in pochi minuti. Ad ogni modo se sei talmente matto da addentrarti in un'opera del genere devi partire dal datasheet della memoria NAND in oggetto che contiene tutto quello che devi sapere per leggerla, leggere correttamente il datasheet non è però una cosa per tutti. Ciao

Beh, se avessi voluto la comodità e una soluzione già pronta non avrei nemmeno aperto questo thread :slight_smile:
Il datasheet ce l’ho già in mano e tutto sommato ci capisco abbastanza, quello che volevo sapere era un parere sulla fattibilità in generale del progetto.

Avevi chiesto: “E’ una cosa fattibile? O meglio, ne vale la pena?”

Ti avevo risposto in sostanza, è fattibile se lo sai fare (comunque non con il solo Arduino Mega, servono anche altri componenti), ne vale la pena se hai da fare mille-mila dump della memoria.

Tutto è possibile, se sei in grado di leggere il datasheet hai tutti gli elementi per risponderti da solo.

Comunque per iniziare la memoria lavora a massimo 3.3v, con Arduino Mega che lavora a 5v avresti da adattare tutti i livelli di tensione, solo questo è un elemento per lasciare perdere Arduino Mega per altre soluzioni più semplici, magari un sistema interamente a 3.3v

Ciao

Non dovrei interfacciarmi direttamente con la NAND, ma tramite SPI al suo flash controller. Le linee che vengono normalmente usate con flasher LPT/USB sono 6:

Name Description MOSI Master out, Slave in SS Slave Select SCK Serial Clock MISO Master in, Slave out XEJ Eject XXX ?

E questo è l'esempio di un flasher LPT:

Quindi ti collegheresti tramite il connettore icsp di arduino.
Potresti usare invece del mega un arduino a 3,3 e se hai il sorgente di questo parallelo lanciarti verso un porting

Xbox monta Hynix HY27US da 16MB alla quale pensavo di interfacciarmi

Non abbiamo mica la sfera di cristallo, sembrava che volevi interfacciarti direttamente alla NAND e non al controller sull'XBOX di cui non hai parlato e non hai specificato la sigla.

Mi scuso se sono stato poco chiaro e confuso, ma sono concetti che anch'io sto apprendendo a piccoli passi. La mia idea era quella di interfacciarmi sul bus SPI del flash controller(della cui esistenza sono venuto a conoscenza da poco) per poter poter leggere scrivere la NAND. Di alternative migliori e già fatte ce ne sono già, ma non c'è niente di open.I flasher LPT e USB sono pilotati dall'applicazione NANDPro, della quale l'autore non ha mai reso disponibili i sorgenti.La mia intenzione era quella di creare( o almeno provarci) una soluzione USB open basata su un hardware diffuso su larga scala come Arduino.

Tornando alle questione tecniche:come ho appena appreso i flasher non si interfaccia direttamente alla NAND ma al suo controller, i cui test point sono disponibili sulla motherboard della console. A questo punto più che i datasheet della Hynix penso che serva documentarsi come interfacciarsi col controller attraverso il bus SPI(con cui non ho mai assolutamente avuto a che fare), ma la MS è arida di specifiche tecniche con i "non addetti ai lavori", quindi devo cercare di recuperarle da altre fonti. A questo punto sono di fronte ad un bivio:continuare con la strada dell'SPI sul controller o attaccarsi direttamente ai pin della NAND?

Questo è il materiale che sono riuscito a recuperare: http://www.free60.org/NAND http://www.free60.org/SPI

Supponiamo che il protocollo non sia disponibile, l'unica strada percorribile allora è dissaldare la memoria, leggerla e risaldarla. Leggere la NAND non è un grosso problema visto che è disponibile il datasheet e che la loro interfaccia è standard (se segue la ONFI Open NAND Flash Interface), non puoi però andare a tentativi, altrimenti rischi di sovrascrivere la memoria, il codice del firmware deve essere funzionante perfettamente fin da subito. Ti ritroverai però a maneggiare package non hobbystici con stazione di rework per non rompere tutto

Ciao

Dover dissaldare la NAND era una cosa che volevo evitare, in quanto volevo creare una soluzione relativamente semplice da usare. A questo punto non mi resta che percorrere la strada dell'SPI.

A meno che non trovi qualcuno che abbia già reversato il controller la vedo dura, le uniche strade percorribili sarebbero il disassembly di NANDPro o attaccarmi con un LA al flasher e vedere cosa spara in output per interfacciarsi col controller. Quello che non mi spiego è come abbia fatto il creatore del software a a capire come interfacciarsi col controller senza uno straccio di documentazione.

E' anche strano che non si trovino notizie su questo componente. Su Free60 sono spiegate cifrature, exploit, File System e molto altro, quindi non penso che sia per motivi legali, anche perchè solo con un dump della memoria non ci si fa niente, essendo criptata.

Certamente, più compiti riesco ad affidare all'hardware onboard meglio è. :) Resta però il problema di come accedere a questo buffer.Immagino che il controller risponda con pagine di memoria in seguito a particolari richieste inviategli, giusto?

UPDATE:Ho trovato Xflash 1.3, un tool in python per Linux che permette di interfacciarsi col classico flasher USB/PIC. Penso(ma non sono sicuro) che il flasher col PIC sia solo un convertitore di protocollo(passatemi il termine), in quanto usa gli stessi test point della versione LPT. Quindi non mi basterebbe spulciarmi il source di Xflash per vedere gli opcode inviati sulla USB e replicarli?

Se c'è un IC controller lo vedi fisicamente sulla scheda madre e puoi leggerne la sigla, se le linee finiscono nel chip principale vuol dire che quest'ultimo funge anche da NAND controller custom di cui non troverai mai datasheet.

Per la strada del reversing.. penso che dovresti procedere da solo, se hai una analizzatore logico adeguato sei già a metà strada

Ciao

Un IC controller non lo vedo, le linee sono su un layer non superficiale e penso che portino al southbridge o comunque a qualche altro componente proprietario, quindi nada datasheet.

Più che reversare via hardware il flasher stavo dando un'occhiata al souce di Xflash e noto questi comandi:

CMD_DATA_READ   = 0x01
CMD_DATA_WRITE  = 0x02
CMD_DATA_INIT   = 0x03
CMD_DATA_DEINIT = 0x04
CMD_DATA_STATUS = 0x05
CMD_DATA_ERASE  = 0x06
CMD_DATA_EXEC   = 0x07
CMD_DEV_VERSION = 0x08
CMD_XSVF_EXEC   = 0x09
CMD_XBOX_PWRON  = 0x10
CMD_XBOX_PWROFF = 0x11
CMD_DEV_UPDATE  = 0xF0

Che sembra(non me ne intendo di python) che vengano inviati tramite usb al flasher. Ora non so come si comporti il PIC del flasher(è disponibile il relativo HEX, potrei provare a convertirlo in ASM e cercare di capirci qualcosa), ma penso che sia un HEX generico, o meglio solo un convertitore di protocollo non legato allo specifico NAND controller.

Riprendendo il metodo hardware: E se al posto di un LA utilizzassi un Pirate Bus per sniffare ciò che esce dal flasher?

Puoi usare quello che vuoi basta che sia in grado di leggere correttamente i dati che transitano sulle linee, mi sembra però un progetto alquanto noioso e poco originale = tempo perso

bisogna vedere quale e' l'obiettivo, nulla e' noioso se non lo e', e' soggettivo. qui molte cose le si fa per studio, se a lui piace studiare quest'argomento va bene cosi'

L'obiettivo è fare un porting open di una soluzione closed su un'altra piattaforma per estenderne la portabilità e magari rilasciare un po' di documentazione. Non che la cosa abbia una utilità in se(come già detto ci sono soluzione prefabbricate relativamente economiche), ma lo vorrei fare principalmente per farmi un po' di mano e acquisire dimestichezza nel settore,solo per puro interesse personale.

Mi piace cercare di affrontare i problemi in maniera non convenzionale :)