Come già anticipato in un altro post, grazie ad un AGPWI fornitomi dall'utente notthesun, ho potuto sperimentare il debrick di questi device.
> Cos'è il debrick: E', nel senso stretto del termine, la procedura che permette la ri-scrittura del bootloader dell'apparato.
Si applica generalmente a causa di una scrittura errata del bootloader stesso, o comunque in tutti quei casi in cui
bootloader viene corrotto o sovrascritto con dei dati non validi. La procedura di debrick dell'AGPWI (e dei router similari, vedi l'AGTWI di Technicolor) risulta leggermente più complessa rispetto ad apparati quali AGPF, AGA, WRT54G etc, nei quali è possibile usare la JTAG.
Sebbene, infatti, l'AGPWI sia dotato di interfaccia JTAG, al momento la combinazione BCM6328 e flash seriale non è supportata da nessun programma come tjtag, brjtag od anche il famoso alice03bis.
Risulta pertanto necessario scrivere direttamente sulla flash, bypassando tutto il resto dei componenti.
A tale scopo ci vengono in aiuto due risorse: una software ed una hardware.
Il software altro non è che spipgm, sviluppato e mantenuto da RayeR, link:
http://rayer.g6.cz/programm/programe.htm.
Si tratta di un piccolo programma che permette, attraverso l'interfacciamento diretto alla flash tramite porta parallela, la scrittura e lettura delle più diffuse flash seriali disponibili ad oggi.
A corredo della parte software si necessita anche pertanto dell'interfaccia hardware, che in buona sostanza è composto da 1 connettore DB25, 4 resistenze da 150ohm 1/4W e qualche spezzone di cavo elettrico.
La sua costruzione è banale e poco costosa (a Catania ho comprato tutto per 5€).
REALIZZAZIONE DELL'INTERFACCIA PARALLELAPrima di tutto partiamo dallo schema di ciò di cui stiamo parlando:

Come è possibile vedere vengono sfruttati 4 pin sul connettore DB25 più quello di riferimento a massa.
In buona sostanza la loro funzione è:
Pin 7 : D5 => Chip Select #
Pin 8 : D6 => Clock
Pin 9 : D7 => Serial Data IN
Pin 10: ACK => Serial Data OUT
Pin 18: GND => Riferimento a massaPer quanto riguarda le connessioni sulla flash i pin DIO, DO, CLK e CS# sono di semplice comprensione.
Gli altri segnali invece sono:
>Vcc: ovvero la tensione di alimentazione della flash, che è generalmente 3,3V
>WP#: che sta per WriteProtect, si tratta di un segnale "negato", pertanto per impostarlo a 0 dovremo dargli in ingresso
un livello logico 1, e cioè Vcc.
>HLD#: anch'esso negato, la sua funzione è quella di bloccare temporaneamente lettura e scrittura , segue la stessa logica d
i WP#, e deve essere portato a Vcc.Il risultato finale non dovrebbe essere molto differente da un anonimo connettore DB25 con 5 cavi:
Tuttavia la flash usata dall'AGPWI ha una piccola differenza: il pin con funzione HLD# non è presente e pertanto può essere tranquillamente omesso.
Il pinout del contenitore è il seguente:
A questo punto resta da dissaldare la flash dalla board dell'AGPWI, al fine di poterla interfacciare con la porta parallela, e quindi saldare i cavi sui pin in questione.
La dissaldatura della flash non è certo un'operazione semplicissima per chi non ha molta dimestichezza col saldatore.
Si tratta infatti di un componente SMD con una spaziatura fra i pin dell'ordine del millimetro.
Tuttavia con un pò di dimestichezza non si tratta di un'operazione impossibile: basta prestare attenzione a questi particolari:
- abbiate cura a non riscaldare troppo il componente, per non danneggiarlo
- se usate un saldatore a stilo NON fate forza con la punta sui pin, per evitare di deformarli o addirittura spezzarli
- durante l'operazione di rimozione della flash dal PCB fate attenzione che tutti i pin siano disposti a staccarsi dal pad: in caso contrario correte il serio rischio di staccare quest'ultimo dal pcb con il risultato di poter andare a buttare tutto nell'immondizia.
- fate attenzione durante tutto il processo a non urtare o peggio ancora staccare i piccolissimi componenti SMD vicini alla flash. Il rischio mi sembra abbastanza chiaro!
Questo ad esempio è quello che dovreste ottenere una volta rimossa la flash (e magari ripulito il tutto dal flussante bruciato)
I più attenti noteranno un particolare: il chip BCM6328 è SENZA il suo dissipatore di calore.
Si tratta di un'operazione che raccomando caldamente per avere un margine di manovra decente. Infatti spesso e volentieri il dissipatore viene fissato non perfettamente dritto, ma del tutto storto
(Netgear DGND-3700 docet), impedendo l'accesso alla flash.
La sua rimozione è abbastanza semplice: è fissato al PCB attraverso un perno nell'angolo superiore destro, che bisogna quindi dissaldare dal lato opposto, facendo attenzione non incidere con la punta del saldatore le piccolissime piste che stanno attorno alla piazzola del perno.
Una volta dissaldato il perno bisognerà rimuovere il collante bianco che blocca il dissipatore nella parte opposta.
La via più semplice è quella di incidere il collante lungo la linea di contatto con il dissipatore. Prestate però molta attenzione a non affondare troppo la lama per evitare di incidere il pcb.
A questo punto l'unica cosa che impedisce al dissipatore di staccarsi dal chip è del biadesivo che ha il compito di assicurare l'aderenza e lo scambio termico (anche se avrei qualche dubbio sull'efficienza di questa soluzione).
Fate una leggerissima leva verso l'alto da uno degli angoli del dissipatore e poi sollevatelo a mano, cercando di rimanere il più paralleli possibile al pcb, per evitare che il perno di fissaggio si deformi.
Una volta rimossa la flash non vi resta che saldare i cavi di collegamento all'interfaccia parallela ed ad un alimentatore a 3,3V.
Vi consiglio di usare dei cavi molto fini ed elastici al fine di evìtare che un movimento brusco vada a fare forza sul pin, spezzandolo.
Nel mio specifico caso ho saldato dei cavetti molto corti, circa 6 cm, che si andavano a raccordare poi con i cavi dell'interfaccia parallela.

La lunghezza complessiva dei cavi, vi raccomando, deve essere inferiore ai 30cm, per evitare la degradazione dei segnali.
Vi ricordo infatti che l'interfaccia che si sta usando è si molto semplice, ma NON è bufferizzata.
Ulteriori raccomandazioni sono necessarie al riguardo della tensione di alimentazione:
- deve essere quanto più precisa e vicina ai 3,3V. Una piccolissima tolleranza di 0,2V sarà tollerata dalla flash, ma non di più
- deve essere quanto meno rumorosa possibile, il che vuol dire che ad esempio è meglio evitare trasformatori meccanici con un ulteriore regolatore di tensione a 3,3V.
- cercate se possibile di usare batterie anzichè alimentatori esterni. Un esempio: la CR2032 che si usa come tampone per il BIOS, che quando è completamente carica eroga circa 3,25V.
Tornando per un attimo allo schema di connessione: fra Vcc e GND è presente un condensatore di 1mF la cui funzione dovrebbe essere di filtraggio ai disturbi in alta frequenza. Se avete l'intenzione di usare la 3,3V del vostro alimentatore ATX è bene usarlo, altrimenti se usate una CR2032 può essere tranquillamente omesso.
Dopo questa lunga preparazione è tutto pronto per collegare il connettore DB25 alla porta LPT e ripristinare il bootloader!
Vi raccomando di usare un pc con sistema operativo a 32bit, quale ad esempio Win XP o Win Vista/7 x86.
Scompattate l'archivio contenente i binari di spipgm (che trovate qua:
http://rayer.g6.cz/programm/spipgm.zip) ed all'interno copiate anche il binario del bootloader (che vi ricordo essere di 128KB).
Procedete quindi ad aprire un prompt dei comandi, spostatevi nella cartella dove risiede l'eseguibile di spipgm.
I comandi e la sintassi sono:
spipgmw /comando <filename>
dove <filename> è il file a cui fa riferimento il comando;
comando può essere:
/i per verificare il corretto riconoscimento della flash
/r per specificare manualmente un indirizzo della flash sul quale operare
/d per fare un dump completo della flash
/p per programmare il file specificato a partire dall'inizio della flash
/v per verificare che quanto scritto sulla flash sia conforme al file specificato
/e per cancellare tutto il contenuto della flash
/eb per cancellare solo dei settori della flash
/u per sbloccare la scrittura della flashLa prima operazione da fare è quindi la verifica di riconoscimento della flash, con il comando:
spipgmw /iConsiderando che la flash installata sulla stragrande maggioranza degli AGPWI è una Macronix MX25L12845EMI-10G non dovrebbero
esserci problemi di sorta: la flash viene perfettamente riconosciuta, ma come una MX25L12835E/12536E, che è praticamente la stessa cosa.
Il prossimo step è quello di sbloccare la flash, con il comando:
spipgmw /uNel caso il software non riuscisse a sbloccare la flash vi raccomando di verificare che il pin WP# sia stato correttamente portato a livello logico 1 e quindi Vcc.
A questo punto bisogna cancellare il contenuto della flash. Sebbene sia disponibile il comando /eb che permette di cancellare solo delle porzioni di flash, personalmente ho preferito cancellare tutto il contenuto della flash, col comando:
spipgmw /eE' il momento di ri-scrivere il bootloader. Supponendo che il binario contenente il CFE si chiami cfe.bin, il comando sarà:
spipgmw /p cfe.binDopo il seguente comando il software vi avvertirà sul fatto che il file che avete specificato è lungo solo 128K, mentre la flash è 16384K. Semplicemente confermate di voler proseguire.
Attendete quindi il completamento dell'operazione, e successivamente verificate che la scrittura sia avvenuta correttamente con:
spipgmw /v cfe.binIl software dovrebbe avvertirvi al solito del mismatch della dimensione del file, ma che comunque la scrittura è verifica è avvenuta con successo.
A questo punto siete pronti a dissaldare dalla flash i cavetti, ripulire e raddrizzare (nel caso qualcuno si fosse leggermente deformato) i pin, al fine di garantire la perfetta aderenza ai pad sul pcb.
Effettuata la saldatura della flash resta solo da riattaccare il dissipatore sul BCM6328.Sarà quindi necessario applicare del biadesivo molto sottile sulla superficie del dissipatore, dopo aver ovviamente ripulito sia quest'ultimo che il BCM6328 dalle tracce di biadesivo precedente.
Una volta rimesso il dissipatore al suo posto, magari facendo una lieve pressione per assicurarsi della effettiva aderenza fra le due parti, bisognerà risaldare il perno di blocco del dissipatore.
Ecco il tutto a lavoro ultimato:

I più volenterosi potranno all'occorrenza ripulire tutto dalle tracce di collante bianco e riapplicare qualcosa di simile, per riprodurre lo "scenario pre-debrick" !
Io, onestamente, me ne sono fregato altamente, dato che il dissipatore è già immobile cosi.
Non vi resta che collegare la seriale e verificare se effettivamente il tutto sia andato per il verso giusto, godendovi il log del cfe !
Tutto ciò che riguarda il caricamento del firmware non è oggetto di questa guida, e dovrà quindi essere affrontato nei thread di competenza.Come ultima,
ma non ultima cosa, ci sono dei ringraziamenti da fare, alle persone che hanno contribuito direttamente ed indirettamente alla stesura di questa guida, e queste sono
notthesun, per avermi gentilmente fornito un AGPWI come cavia ed il maestro
roleo, per aver trattato per il primo l'argomento, sul thread dell'AGTWI, ed al quale mi sono indubbiamente ispirato, riportandolo sull'AGPWI.
Grazie!