MODALITA' GOD MODE

per Win 7 - GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}


Programmazione:

Vi è morto un AtTiny-xx?

 

 

 

 


Proviamo a riesumarlo!

 

Utilizzeremo un AtTiny85, qualche riga di codice e un pochino di hardware
per tentare di rimettere in servizio un AtTiny che sembra essere morto stecchito.

 

Di questi aggeggini autocostruiti ne esistono parecchie versioni

sul Web e tutti sembrano fare il miracoletto descritto sopra,

...ma non è così...

 

Per gli smanettoni come me questo progettino fa veramente i miracoli,

permette di rimettere in vita una serie di microcontrollori dati per bruciati.

 

Chip supportati dal programma:

AtTiny13, AtTiny24, AtTiny25, AtTiny44

AtTiny45, AtTiny84, AtTiny85

 

Questi chip vengono utilizzati un pò dappertutto, un esempio

pratico è sui moduli DIGISPARK dove il piccolo AtTiny85

ogni tanto va in crash quando gli si tira un pò troppo il collo

o gli si programmano i FUSES in modo errato.

 

Capita che durante la programmazione di questi dispositivi

qualcosa non vada a buon fine, emerge quindi il classico errore

da parte dell'IDE del programmatore che ci informa che il dispositivo

non esiste, non risponde o addirittura ne rileva un'altro modello.

 

Tutto dipende dai famosi FUSES interni al chip, che per qualsiasi

imprevisto durante la programmazione vengono scritti in modo errato.

 

Conosciamo tutti il sistema HVSV Programming che provvede a

programmare vari chip tramite una tensione aggiunta di +12V,

ma anche utilizzando questo sistema professionale non si

riesce più a 'colloquiare' col chip e quindi lo si crede 'morto'

 

Quando succede questo e si è provato in tutti i modi a riprogrammare

il chip, ma 'lui' non risponde, ci si sente impotenti e l'unico gesto da

fare è quello di centrare il cestino portarifiuti col 'chip morto'.

 

TAAAC  ...AMEN!

 


 

Però, dovo svariati canestri messi a segno (...e non) ho ripensato

a lungo sul difetto che spesso mi rovinava le giornate, quindi

mi sono messo alla ricerca di ulteriori informazioni sul caso.

 

Mr. Google è stato come sempre fantastico, in breve tempo

ho trovato in rete altri sfortunati che come me lamentavano lo

stesso problema, e in mezzo a così tante informazioni ho trovato

il sito di un GENIO che con ostinazione pura è riuscito

a capire il perchè del problema e lo ha risolto 'quasi' al 99%.

 

Quell' 1 % rimasto comprende i chip 'arrostiti'... e ci sta!

 

Ho quindi adattato il software del GENIO e mi sono costruito

un circuito stampato per 'riesumare' questi preziosi chips.

 

Questo è lo schematico:

 

 

Ecco come si presenta, l'ho disegnato con DipTrace:


Ho inserito una femmina USB-B come ingresso per l'alimentazione a 5V,

un survoltore che da 5 eleva a 12 Volt per la tensione di programmazione HV,

uno zoccolo da 8 pin, un bus ISP espandibile per zoccoli SMD e un pulsante.

 

Qui sotto un preview di come come si presenta la scheda con il modulo

di espansione SMD a innesto e i files Gerber del progetto:

 

 


Nulla vi vieta comunque di assemblarlo su basetta millefori

oppure direttamente sulla vostra affezionatissima breadboard,

molto velocemente e con quattro componenti in croce.

 

 

 


Perchè succede che non va più?

 

In breve, sembra che quando il buon Murphy ci mette lo zampino

faccia in modo che una errata scrittura dei valori dei FUSES

scaturisca in una configurazione del clock casuale dai 32 a 128 KHz.

 

Uno pensa, vabbè, ma tanto se il micro è 'buono' deve poter

comunicare col programmatore a qualunque velocità, no?

Quindi basterebbe riprogrammare i FUSES a dovere, o no?

 

Verissimo, ma il vero problema sta nel firmware dei programmatori!

 

Nel senso che, quando un programmatore 'chiama' il chip e

poi si mette in attesa di una risposta (HANDSHACKING)

per capire chi c'è connesso sul bus di programmazione,

pare che abbia molta fretta di farlo... tanta fretta.

 

FRETTA? ma che stiamo dicendo?

 

Eh si, la temporizzazione di attesa del programmatore

pare sia troppo breve, e questo vale per una lunga

lista di programmatori che vengono normalmente utilizzati,

dai più semplici fino ai modelli professionali.

 

Un altro problema riguarda la protezione dei FUSES

da parte di un registro dedicato, la Memory Lock Bits.

 

Ecco un sunto tratto dal datasheet:

 

Se erronamente vengono alterati questi valori può

succedere che il chip non possa più essere programmato

ma FORTUNATAMENTE il comando CHIP ERASE può

risolvere l'inghippo e riabilitare il chip al 100%.

 

Infatti, sempre dal datasheet possiamo leggere questa nota:

 

 

Siamo a cavallo, finalmente una bella notizia!

 


Qualche info in più...

 

In sostanza ecco cosa succede durante la programmazione

sopprattutto nella fase iniziale, l'HANDSHACKING:

 

1:

il programmatore alimenta il chip poi cambia di livello

un pin del bus (SDO) che è connesso a un pin del chip e...

SI METTE IN ATTESA DI UNA RISPOSTA.

 

2:

il chip si attiva, 'sente' il cambio di livello sul pin (SDO) e dopo un

istante mantiene il livello (SDO) basso per almeno 4 millisecondi

 

3:

il programmatore quindi 'sente' su (SDO) la risposta del chip

e passa alle prossime fasi, quali programmazione, lettura,

verifica del codice e, a richiesta, la protezione di alcune

parti o di tutta la memoria del chip (Flash e EEprom)

 

E qui scatta l'inganno, il programmatore aspetta per un

tempo BREVISSIMO che NON E' sufficiente a sentire

la risposta del chip dato per morto, si perchè il poveretto

ora lavora in modalità clock in KHz, peggio di un bradipo!

Poverino, è troppo lento nella risposta, ma continuiamo...

 

4:

dopo un pò il programmatore 'si rompe le balle'

di aspettare il bradi-chip e decide di interrompere

ogni attività in sospeso, informa l'operatore del problema

...ed ecco che scatta al volo il classico 'vaffanc..o!'.

... è tutto qui! Chiaro no?

 

...ve l'avevo detto che il sw andava di fretta!

 

NOTA:

Nella realtà, dopo l'errore di temporizzazione il programmatore

scrive lo stesso i dati da inviare al chip, ma quest'ultimo non

essendo 'pronto a ricevere' perde il sincronismo di clock.

Ne consegue una programmazione sporca che fa strage

dei poveri bit nella memoria del chip.... a caso!

Alla successiva verifica dei dati ecco scaturire l'errore.

 

Guarda i segnali e le temporizzazioni durante la programmazione,

è un esempio di come si comportano i segnali sul bus ISP:

 

 


Dispositivo bloccato:

SDO va basso ma poi il chip non risponde

 

 

 


Dispositivo sano:

SDO va basso e il chip risponde correttamente

a blocchi di dati ordinati temporalmente.

 

 

Notare come si comporta la linea (SDO) quando la comunicazione

è OK rispetto al micro con i FUSES settati erroneamente.

 

E' lampante che la linea del clock presenta un unico e lungo

burst assolutamente non sincronizzato con la linea (SDO).

 

 


Soluzione del 'Genio' 

 

Alla fine poi era semplice, bastava aspettare qualche millisecondo in più...

 

La mè nona la disèva: "La pazienza è la virtù dei forti..."

 

Qualche nota sul principio di funzionamento dello sketch:

 

Il software inizialmente analizza il chip e cerca di leggere la

sua 'Signature Bytes' in modo da identificarlo correttamente

per poi assegnargli i tre valori di default dei FUSES

in base al modello di processore rilevato.

 

Rilevata la 'Signature Bytes'  provvede a cancellare tutta

la memoria FLASH del chip con il comando 'CHIP ERASE'.

 

Ricalcola e riscrive i FUSES corretti in base al modello.

 

Dopo un ulteriore controllo e rilettura dei FUSES, se l'operazione

è andata a buon fine il software lo segnala tramite un LED

facendo tre lampeggi veloci e una pausa lunga.

 

Se invece non riesce a identificare il chip oppure

non riesce a scrivere i FUSES farà lampeggiare il LED

con velocità diverse a seconda dell'errore rilevato.

 

Se invece non fa nessun lampeggio il chip è bruciato o

non è stato inserito correttamente nello zoccolo.

 

Lo sketch da caricare su un AtTiny85 provvede a interrogare

i dispositivi ad esso collegati mantenendo le giuste temporizzazioni.

Ho modificato alcuni punti chiave e ho commentato il software.

 

Ricordatevi di settare l'IDE di Arduino come da istruzioni allegate

e di riscrivere il bootloader prima della programmazione

in modo da impostare tutti i parametri correttamente.

 

Bene, vi metto a disposizione il pacchetto per farvi il circuitino

in questione, nel file c'è tutto l'occorrente.

  AtTiny_HVSP_Fuse_Resetter.zip 

 

Ringrazio mr. Uri Shacked per il grande lavoro svolto

e la preziosissima documentazione condivisa in rete.

 

...CHAPEAU...

 

 

 

 


 

Your sniffed IP is:  - All rights reserved - 2022/2023 - Tutti i diritti riservati.

I marchi citati sono di proprieta' delle rispettive aziende - All trademarks are the property of their respective owners and companies.

Carlo Manzoni - Via Enrico Fermi, 10 - 26848 San Fiorano (Lo) - Mobile: +39 338 3114954 - C.F: MNZCRL57A04H844O

(i numeri sconosciuti sono bloccati, al cellulare rispondo solo previo SMS/Whatsapp di presentazione)