G640T brickato: impossibile scrivere sulla flash tranne i primi 64Kb

  • 28 Risposte
  • 12033 Visite

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline guybrush

  • Esperto
  • ****
  • 810
Ciao a tutti! :) Ho un G604T "brickato": nonostante adam2 non sia corrotto, quando si esegue il boot, adam2 tenta di scrivere i valori di default nella mtd3 e si blocca all'inizio della scrittura (cosa verificata via seriale). Ho collegato la jtag e provato con Flash Programmer: qualunque cosa faccia, mi da il messaggio di errore "unable to stop target" che, a detta dell'help dipende da un problema di connessione (cosa non possibile dato che con Ciclamab e debrick-mod tutto va alla perfezione).
Lasciato stare Flash Programmer, sono passato a debrick-mod da linea di comando e non attraverso Ciclamab per avere più controllo e libertà d'azione: il risultato inaspettato a cui sono giunto è che non solo non scrive mtd3 ma non scrive in nessun'altra zona esclusi i primi 64Kb della flash (quelli riservati proprio ad Adam2).
Con la modalità custom, ho provato a scrivere l'immagine di mtd3 un pò in tutte le posizioni della flash e il risultato è sempre il blocco mentre (nonostante sia ovviamente assurdo) se scrivo nel primo blocco riservato ad adam2 la scrittura va a buon fine. Insomma, sembra che ci sia un lock hardware su tutta la flash escluso il primo blocco. Questo, se verificato, deporrebbe per il fatto che la flash è bloccata esattamente alla rovescia di come dovrebbe essere (quando c'è un hw lock di solito è rivolto proprio alla zona dove risiede il bootloader) e questo di fatto apre le porte ad un problema ben più ampio cioè il fatto che, anche riuscendo a ripristinare mtd3, non sarebbe comunque possibile riprogrammare il firmware in queste condizioni.
Ho scaricato il datasheet della flash atmel (AT49BV322A):

http://www.atmel.com/dyn/resources/prod_documents/doc3308.pdf

e visto che l'unico modo di disabilitare il blocco è quello di resettare la flash (pagina 8, sezione 4.8.2) o attraverso cicli di accensione (non ho idea di cosa intenda...Devo accendere e spegnere il router ripetutamente?). Ho individuato il pin di reset ma non ho idea di come si possa resettare (sicuramente applicandoci un'alimentazione ma come?).
Mi verrebbe da pensare ad un danneggiamento della flash ma possibile che un danneggiamento possa essere così selettivo? Mi sembra improbabile che sia sia danneggiata tutta la flash tranne i primi 64Kb... Mi ricordo di aver letto che c'era un metodo per scirvere le partizioni in blocchi da 8Kb per superare proprio problemi di scrittura ma non ricordo dove l'ho letto, devo fare altre ricerche...
Insomma, prima di arrendermi sono sicuro ci sia qualche altra prova da fare e chiedo a voi qualche dritta a riguardo. Grazie a tutti! :)

Offline zdnko

  • Esperto
  • ****
  • 1750
All'accensione o dopo un reset tutti i settori sono sbloccati (pag.7), quindi è il programma di boot che provvede a bloccare il settore da proteggere.

Una volta bloccato l'unico modo per sbloccarlo è un reset o una riaccensione.

La procedura di blocco è descritta a pag.26 e non mi sembra possa ripetersi per sbaglio su tutti i settori escluso proprio quello che dovrebbe essere protetto.

O hai il bootloader corrotto e blocca i settori sbagliati o la tua flash è guasta e si comporta esattamente al contrario di quello che dovrebbe.

bye
Non rispondo a chi usa cappa ed abbreviazioni inutili.
Cestino immediatamente i PM riguardanti argomenti trattabili nel forum (nessuna deroga).

Offline guybrush

  • Esperto
  • ****
  • 810
Ciao e grazie della tua risposta! :) Sono d'accordo con te però se fosse il bootloader a bloccare alcuni settori, quando lo stesso bootloader vuole scrivere su quegli stessi settori dovrebbe parimenti essere in grado di sbloccarli e mi pare molto strano che non sia così.
Il tasto reset del router (almeno a quanto ne so) serve solo a resettarne le impostazioni ma questo solo a boot regolarmente eseguito (cosa che non accade dato che si blocca in scrittura su mtd3), in caso contrario non ha nessuna funzione. Per quello mi chiedevo se ci fosse (sono praticamente certo che ci debba essere) un modo di resettare la flash manualmente (di sicuro cortocircuitando il pin di reset con un'altro pin contenente un alimentazione adatta).
Per quanto riguarda la corruzione del bootloader, la escludo perchè ne ho riprogrammati diversi tramite jtag (presi da altri tre G604Ti, tutti con flash non Intel e uno addirittura con la stessa esatta flash e ovviamente perfettamente funzionanti) quindi il fatto che Adam2 sia in ordine è l'unica certezza che ho.
Insomma, da quel che dici, mi pare di intuire tu pensi ci sia ben poco da fare... Sono sostanzialmente d'accordo con te però sono altrettanto sicuro ci sia qualche altra prova possibile prima di gettare definitivamente la spugna.

Offline zdnko

  • Esperto
  • ****
  • 1750
Ciao e grazie della tua risposta! :) Sono d'accordo con te però se fosse il bootloader a bloccare alcuni settori, quando lo stesso bootloader vuole scrivere su quegli stessi settori dovrebbe parimenti essere in grado di sbloccarli e mi pare molto strano che non sia così.
Citazione
At power-up or reset, all sectors are unlocked.
The only way to unlock a sector that is locked down is through reset or power-up cycles. After
power-up or reset, the content of a sector that is locked down can be erased and reprogrammed.

Il tasto reset del router (almeno a quanto ne so) serve solo a resettarne le impostazioni
Per reset si intende un restart del dispositivo, non il riportarlo alla situazione di default con il tastino.

Per quello mi chiedevo se ci fosse (sono praticamente certo che ci debba essere) un modo di resettare la flash manualmente (di sicuro cortocircuitando il pin di reset con un'altro pin contenente un alimentazione adatta).
Da quello che ho capito il pin di reset non serve ad azzerare la flash ma solo a riportare la logica sequenziale interna allo stato iniziale.

Per quanto riguarda la corruzione del bootloader, la escludo perchè ne ho riprogrammati diversi tramite jtag (presi da altri tre G604Ti, tutti con flash non Intel e uno addirittura con la stessa esatta flash e ovviamente perfettamente funzionanti) quindi il fatto che Adam2 sia in ordine è l'unica certezza che ho.
Visto che con la jtag puoi comunque ripristinarlo, azzera il bootloader e restarta il router. Se la situazione non cambia è sicuramente un problema hw (flash). :'(

bye

Non rispondo a chi usa cappa ed abbreviazioni inutili.
Cestino immediatamente i PM riguardanti argomenti trattabili nel forum (nessuna deroga).

Offline guybrush

  • Esperto
  • ****
  • 810
Ciao di nuovo! :) La parte del datasheet che hai citato ovviamente l'avevo già letta e compresa ed avevo altrettanto ovviamente capito che il tasto reset del router non servisse a nulla (se noti lo scrivo anche nel mio precedente messaggio).
La mia speranza è proprio quella che resettando lo stato della flash si possa eliminare quel blocco inspiegabilmente indotto da chissà cosa. Non sono un esperto quindi prendi queste mie parole con il beneficio del dubbio e correggimi se sbaglio ma, ragionando per logica, non penso che una flash si danneggi proteggendosi alla rovescia... Mi pare più probabile si corrompa tutta (primi 64Kb compresi).
Proprio perchè (anche questo te l'ho già detto, hai anche citato la mia frase) ho già fatto la prova di riscrivere il bootloader via jtag, prima di arrendermi volevo tentare un hard reset sulla flash (per questo chiedevo dritte su come fosse possibile farlo) o quantomeno tentare di cancellare la flash con qualcosa di diverso da debrick-mod (motivo per cui ho provato con Flash Programmer e per cui mi sarebbe interessato capire il perchè di quel messaggio di errore che ho descritto oppure conoscere se c'era un'alternativa per cancellare la flash via jtag con una wiggler non bufferizzata meglio nota come la poor jtag). Ciao e grazie di nuovo.

Offline zdnko

  • Esperto
  • ****
  • 1750
non penso che una flash si danneggi proteggendosi alla rovescia... Mi pare più probabile si corrompa tutta (primi 64Kb compresi).
A meno che non sia giunta ai fatidici 100000 cicli mentre la parte normalmente protetta funzioni ancora perché cancellata meno volte. Ma non penso sia il tuo caso.  ;)

Proprio perchè (anche questo te l'ho già detto, hai anche citato la mia frase) ho già fatto la prova di riscrivere il bootloader via jtag.
Hai provato a scrivere la flash dopo aver restartato il router senza bootloader (azzerato)?

prima di arrendermi volevo tentare un hard reset sulla flash (per questo chiedevo dritte su come fosse possibile farlo)
Non penso ci sia qualcosa del genere, o almeno nel datasheet non è riportato.

o quantomeno tentare di cancellare la flash con qualcosa di diverso da debrick-mod (motivo per cui ho provato con Flash Programmer e per cui mi sarebbe interessato capire il perchè di quel messaggio di errore che ho descritto oppure conoscere se c'era un'alternativa per cancellare la flash via jtag con una wiggler non bufferizzata meglio nota come la poor jtag). Ciao e grazie di nuovo.
Non so che metodo usa il debrick-mod o il Flash Programmer, ma gli unici modi per cancellare (riportare a FF) la flash sono quelli indicati dalla tabella a pag.14:
Citazione
Chip Erase 6    555 AA AAA 55 555 80 555 AA AAA 55 555 10
Sector Erase 6    555 AA AAA 55 555 80 555 AA AAA 55 SA 30

Resta comunque il problema dei settori protetti:
Citazione
If the sector lockdown has been enabled, the chip erase will not erase the data in the sector that has been locked out; it will erase only the unprotected sectors.
An attempt to erase a sector that has been protected will result in the operation terminating immediately.

bye
Non rispondo a chi usa cappa ed abbreviazioni inutili.
Cestino immediatamente i PM riguardanti argomenti trattabili nel forum (nessuna deroga).

Offline guybrush

  • Esperto
  • ****
  • 810
Farò la prova di scrivere la flash dopo aver riavviato il router con la flash azzerata, non è male come idea... Per il resto, non so che dire: in gran parte concordo con te. Ti spieghi il perchè del mio problema con Flash Programmer? Per me sarebbe importante poter avere una pietra di paragone ma, se non risolvo il problema, non ho alternative. Conosci per caso qualche alternativa a debrick-mod e flash programmer?

Offline guybrush

  • Esperto
  • ****
  • 810
Ho provato a cancellare la flash completamente con -erase:wholeflash e quindi riavviare: a questo punto ho provato a riprogrammare prima mtd3 (solito blocco all'inizio) quindi adam2, riavviare e di nuovo tentare di programmare mtd3 (di nuovo blocco) quindi niente di fatto. Credo questo chiarisca definitivamente che il blocco non dipende dal bootloader ma è la flash fisicamente bloccata (o danneggiata anche se, lo ripeto, mi pare un guasto alquanto anomalo).
Da notare la cosa strana che a fare l'erase dell'intera flash ci ha messo solo 13s. So perfettamente che l'erase è molto ma molto più veloce della scrittura ma 13s mi sembrano veramente pochi: credo questo deponga ulteriormente per la protezione della flash infatti blocchi protetti vengono saltati in cancellazione.
A questo punto l'unica altra strada è riuscire a far funzionare Flash Programmer (ho la versione 2.53 ma anche con altre più recenti che ho provato il comportamento è lo stesso) oppure trovare una terza alternativa (che però io non conosco).
Per quanto riguarda flash programmer, ho un dubbio circa la configurazione: so di averlo già usato con successo con un altro G604T ma non ricordo la configurazione perchè è passato parecchio tempo. Cmq stavolta ho usato questa configurazione:

ho lasciato la cpu indefinita (la TNETD7300GDU della Texas non è supportata da Fpgm) con memory start a $0000
ho scelto al AT49BV322A come flash e messo l'inizio in 0x90000000

Con questa configurazione mi da il già citato messaggio di errore "unable to stop target".
Se invece scelgo come cpu la arm7 (cosa che dovrebbe essere corretta dato che la cpu, seppur prodotta da TI,  è una ARM7 da che ne so) e lascio memory start a $0000, l'errore diventa "unable to put target into background mode", errore immagino dovuto all'errata definizione della cpu (ma al riguardo non ho spulciato l'help).
Insomma, in ogni caso non sono in grado di utilizzare fpgm. Sono a corto di idee, spero che qualcuno sappia darmi una dritta. Ciao e grazie a tutti! :)

Offline zdnko

  • Esperto
  • ****
  • 1750
Non conosco Flash Programmer e simili. L'unica mia esperienza con la jtag l'ho fatta sui decoder sat, quindi non posso aiutarti.

L'unica cosa che mi viene in mente è che leggendo la flash dovresti trovare tutto a ff se la cancellazione è andata a buon fine. Se trovi altri valori quel settore non è stato cancellato.

bye
Non rispondo a chi usa cappa ed abbreviazioni inutili.
Cestino immediatamente i PM riguardanti argomenti trattabili nel forum (nessuna deroga).


Offline marven

  • VIP
  • *****
  • 3882
Re: G640T brickato: impossibile scrivere sulla flash tranne i primi 64Kb
« Risposta #10 il: 23 Ottobre 2007, 17:30 »
Guybrush in flash programmer prova a impostare la flash a 8 bit anzichè 16 e come indirizzo della flash prova anche 0x10000000. Prima prova una cosa e poi l'altra, poi insieme. Ti può anche servire OCD Commnader che trovi nel sito Macraigor, in particolare, per fermare la CPU, i comandi halt  e reset.
Se ci sono aree protette le puoi sproteggere con l'apposita funzione del flash programmer accessibile mediante il bottone  Protect.

Nel caso proprio non riesci prova anche con JTAG Tools:

http://star.oai.pp.ru/jtag/jtag-brecis-ok.zip

Segui un po' quello che ho fatto io tempo fa con un 300t:

https://www.ilpuntotecnico.com/forum/index.php/topic,3034.msg37483.html#msg37483

Riguardo JTAG Tools guarda un po' in giro anche nel thread e nel wiki di Openwrt:
http://wiki.openwrt.org/OpenWrtDocs/Customizing/Hardware/JTAG_Cable

PS
Il processore non è un ARM7 http://www.arm.com/products/CPUs/families/ARM7Family.html
ma un MIPS 4KEC integrato nel chip TI AR7 (che non è una CPU ma la contiene). Architetture completamente diverse.

PS2
Prova anche con la flash AT49BV322AT, ha la geometria invertita rispetto alla AT49BV322A, magari è quello il problema...

PS3
Talvolta, raramente, debrick e Ciclamab hanno dei problemi che possono essere risolti dando, prima di usarli, un halt con OCD Commander... può servire.

PS4
Come indirizzo della flash prova anche quelli citati sul sito openwrt:
Citazione
To access a Flash chip in 8-, 16- or 32-bit mode via EJTAG, use 0x1fc00000, 0x3fc00000 and 0x5fc00000 addresses respectively.
rispettando il bit mode.
Per il momento ho finito le idee... poi si vedrà  ;)

« Ultima modifica: 23 Ottobre 2007, 18:00 da marven »

Offline guybrush

  • Esperto
  • ****
  • 810
Re: G640T brickato: impossibile scrivere sulla flash tranne i primi 64Kb
« Risposta #11 il: 23 Ottobre 2007, 23:24 »
Grazie ragazzi per tutte le dritte che mi avete dato! :) Grazie a bovirus1963 per la correzione sul processore!

@marven

Grazie anche a te per la correzione sul processore, ero convinto fosse un arm7 e sbagliavo. Potrebbero dipendere da questo i problemi con fpgm? Credo proprio di sì, peccato che non ho modo di provarlo subito... Grazie per tutte le dritte che mi hai dato! Sono talmente tante che ci vorrà un pò per fare tutte le prove! ;)
Provvederò a fare le prove che mi hai suggerito nonchè a scaricare OCD Commander e Jtag Tools. Il secondo l'avevo già trovato ma l'avevo scartato dato che, se non mi confondo (cosa probabile visto tutto il materiale vagliato negli ultimi giorni), era per Linux e al momento non ho Linux installato su nessuna macchina.
Ora vado a dare un'occhiata al topic che mi hai segnalato. Riguardo il PS2, ho già provato con la flash AT49BV322AT e non è servito a nulla.

Vi aggiorno appena possibile su eventuali sviluppi... Grazie di nuovo a tutti e due! :)

Offline guybrush

  • Esperto
  • ****
  • 810
Re: G640T brickato: impossibile scrivere sulla flash tranne i primi 64Kb
« Risposta #12 il: 24 Ottobre 2007, 13:53 »
Ho avuto tempo di fare solo qualche prova e questi sono i risultati:

  • Impostato fpgm con:
    CPU MIPS32_4KE
    Target RAM $0000
    EEPROM AT49BV322A
    Starts at: 90000000
    Width: 16x2
    riesco ad eseguire la cancellazione della flash però con alcune anomalie:
    Se seleziono la cancellazione dell'intera flash non mi da nessun errore ma non la termina nemmeno dopo più di mezz'ora (dopo di che ho terminato la cancellazione)
    Se seleziono la cancellazione settore per settore, per i primi 8 settori mi da l'errore "unable to erase target flash: sequence aborted" e in effetti la cancellazione non avviene (verificato tramite blank check) mentre cancella correttamente dal blocco 9 al blocco 71
    Se richiedo la lettura dell'ID della flash, altra anomalia: come ID produttore legge 0x40809000 invece dell'atteso 0x1F001F e come ID della flash 0x300030 anzichè 0xC800C8
  • Come mi ha suggerito Marven, ho provato sia con l'indirizzamento ad 8 che a 16 bit senza cambiamenti, ho provato anche gli indirizzi 0x10000000 (stesso esatto comportamento che con 0x90000000), 0x3fc00000 e 0x1fc00000 rispettivamente per i 16 e gli 8 bit (l'errore sopra menzionato si estende a molti altri settori anzichè solo i primi 9)
  •  
  • In ogni caso, la scrittura di mtd3 con debrick-mod fallisce come sempre
  • Ho scaricato Jtag Tools ma non ho ancora installato Cygwin (dato che come detto non ho Linux attualmente installato su nessuna macchina) quindi non ho potuto provarlo.

Spero che già questi primi risultati possano essere utili per capire qualcosa in più... Molto strano mi sembra che le ID di produttore e flash non corrispondano a quelle della ATMEL49BV322A, come pure il fatto che i primi 8 settori non siano cancellabili nonchè il fatto che, anche eseguendo la cancellazione con un secondo programma, non cambi nulla.
« Ultima modifica: 24 Ottobre 2007, 13:57 da guybrush »

Offline marven

  • VIP
  • *****
  • 3882
Re: G640T brickato: impossibile scrivere sulla flash tranne i primi 64Kb
« Risposta #13 il: 24 Ottobre 2007, 14:22 »
Il target RAM è sbagliato. Quello giusto è 0xA0000000
L'indirizzo della flash mettilo nel formato 0x90000000 forse gli piace di più  ::)
« Ultima modifica: 24 Ottobre 2007, 14:24 da marven »

Offline guybrush

  • Esperto
  • ****
  • 810
Re: G640T brickato: impossibile scrivere sulla flash tranne i primi 64Kb
« Risposta #14 il: 24 Ottobre 2007, 16:29 »
In riferimento al mio precedente messaggio, correggo una mia svista dovuta al fatto che nella fretta ho confuso blocchi (cui fa riferimento debrick-mod) con settori (cui fa riferimento) fpgm. Ovviamente i primi 8 settori da 8Kb che mi impedisce di cancellare sono quelli riservati ad adam2 quindi direi che è un comportamento più che corretto: quello che semmai è strano è che lo stesso non accada con debrick-mod che mi fa cancellare tutta la flash. Non ho ancora provato con OCD Commander (lo devo ancora scaricare) anche se dubito cambi qualcosa: se avessi problemi di scrittura con debrick-mod da cercare di aggirare con halt e reset, non dovrei avere problemi anche a scrivere i primi 64Kb di adam2 (cosa che invece non accade)? Correggetemi se sbaglio...
Ho invece tentato anche di installare jtag tools ma senza successo. Ho scaricato i pacchetti jtag 0.5.1, ioperm 0.4 e openwince include 0.4.2 e li ho instllati (il pacchetto openwince non mi ha dato problemi di sorta mentre non sono riuscito ad installare ioperm a causa dell'impossibilità di trovare l'header ntddk.h. Di conseguenza, quando ho fatto ioperm -i, il servizio non è stato avviato (ci mancherebbe!).
Sono comunque andato avanti con la compilazione di jtag.exe (quello già compilato nel pacchetto brecis se eseguito mi dava un errore dovuto all'impossibilità di trovare un entry point, immagino a causa del fatto che la compilazione sia stata eseguita su un sistema fondamentalmente diverso dal mio) e anche qui non ho avuto successo a causa della funzione "detect flash" cui non verrebbero forniti abbastanza paramertri.
Non mi spiego questi errori dato che non credo di aver fatto nulla di sbagliato nella compilazione. A questo punto sono piuttosto scoraggiato: non riesco a far funzionare l'unica alternativa a fpgm e debrick-mod e questi ultimi non mi hanno aiutato. Non riesco ad accettarlo perchè mi pare sia veramente assurdo un guasto alla flash così anomalo ma credo di dovermi arrendere...
Fatemi sapere se c'è qualcos'altro che possa tentare.

@marven

Ho dimenticato di dirti che la funzione protect nel mio fpgm è disabilitata (probabilmente è una funzione non disponibile nella demo, non so). Ovviamente avevo già messo l'indirizzo in formato 0x..., ho abbreviato scrivendolo.