Estrarre .hex da ATmega328

PaoloP:
I collegamenti sono gli stessi della programmazione ISP.
Ovvero i pin: MISO, MOSI, SCK, VCC, GND e RESET.
Tutti vanno ai rispettivi omologhi eccetto il RESET del target che va collegato ad un pin diverso. Di solito si seglie il pin 10.

grazie mille Paolo,
per il tuo tempestivo intervento alla mia richiesta..
quindi digital pin 13, 12, 11, VCC, GND e reset al pin digitale 10, giusto?
i pin sono validi anche per un atmega 168 20 AU?

eventualmente in rete si riesce a trovare uno schema?

Per poter leggere la flash del micro ti serve un programmatore ISP.
Tu quale hai? oppure stai usando un secondo Arduino come programmatore?

Non confondere i pin digitali di Arduino con i piedini fisici del microcontrollore.
Il 168 e il 328 hanno la stessa piedinatura.

PaoloP:
Per poter leggere la flash del micro ti serve un programmatore ISP.
Tu quale hai? oppure stai usando un secondo Arduino come programmatore?

Non confondere i pin digitali di Arduino con i piedini fisici del microcontrollore.
Il 168 e il 328 hanno la stessa piedinatura.

ciao Paolo,
si ho un altro arduino e volevo utilizzarlo per la lettura della flash da comando dos..
questo è un processo che non ho mai provato ed ero curioso di vedere fino a che punto sarei riuscito..
boh! ho paura di combinare casini, forse meglio lasciarla come teoria questa curiosità!

Più che da DOS o da shell, scarica AVRdudess --> AVRDUDESS – A GUI for AVRDUDE | Zak’s Electronics Blog ~*
Il Setup o lo zip se non vuoi installarlo.

Apri l'IDE di Arduino e sull'Arduino carica sopra lo sketch "Arduino as ISP" che trovi nel menù File -> Esempi.
Dopo caricato chiudi l'IDE.

Collega l'Arduino "programmatore" con il micro che vuoi leggere. I collegamenti sono quelli illustrati prima.
MOSI (D11) con MOSI (piedino 17)
MISO (D12) con MISO (piedino 18)
SCK (D13) con SCK (piedino 19)
VCC (5V) con VCC del micro (cerca il piedino corrispondente)
GND (GND) con GND (cerca il piedino corrispondente nel datasheet)
RESET (D10) con il RESET del micro (piedino 1)

Per usare AVRdudess con l'Arduino as ISP devi selezionare come programmatore Atmel STK500 Version 1.x firmware e specificare 19200 come baudrate e indica la porta COM a cui è connesso l'Arduino "programmatore".
Se ti da errore di libreria mancante copia dentro la cartella di AVRdudess il file libusb0.dll che trovi nella directory principale dell'IDE.

Poi premi Detect nella finestra di AVRdudess e controlla se ti appaiono i dati del micro collegato.

Attenzione: in base a come è impostato il microcontrollore potresti avere bisogno di un quarzo esterno e dei condensatori.

Per leggere la Flash o la Eeprom usa le funzioni Read.

P.S. Non selezionare nel menu Programmer di AVRdudess Arduino. Rischi che AVRdudess cerchi il microcotrollore montato sull'Arduino "programmatore" e non quello da leggere/programmare.

wow, grande Paolo..
adesso ci devo proprio provare :slight_smile:
naturalmente, se si tratta di collegare un arduino uno con arduino pro mini non necessito
di quarzo e condensatori, giusto?

ti faccio sapere il risultato..

ciao Paolo,
di seguito il risultato della scansione:

avrdude.exe: ser_open(): can't set com-state for "\.\COM5"

avrdude.exe done. Thank you.

come posso procedere?

Scollega Arduino.
Riavvia il PC. Windows suppongo.

Se è Windows vai su gestione periferiche. Collega l'Arduino e verifica che porta COM viene riconosciuta.
Se anche così non dovesse andare, disinstalla e reinstalla il driver dell'Arduino, poi riavvia il PC e riprova.
E' un problema di seriale su PC non di AVRdudess.

Detected 1e950f = ATmega328P
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.05s

avrdude.exe: Device signature = 0x1e950f

avrdude.exe done. Thank you.

~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.05s

avrdude.exe: Device signature = 0x1e950f

avrdude.exe done. Thank you.

ciao Paolo,
ancora una volta mi hai consigliato bene ed ho risolto subito..
ho fatto la lettura della flash e dell'eeprom ma non capisco come
estrapolare il file?

Nel riquadro dedicato alla Flash o alla Eeprom, selezioni il file da creare (pulsante con i puntini ....)
Poi selezioni la funzione Read e premi GO.
Dal menu a tendina puoi scegliere il formato di esportazione oppure mettere AUTO.

I file creati ti permetto di caricare lo stesso programma estratto su altri micro (identici).
Non è possibile riottenere il codice di origine dello sketch. Puoi al massimo disassemblare il file della flash, ma sono argomenti che non conosco neanche io molto bene.

Se ti comperi uno usbasp
http://www.ebay.it/itm/USBASP-Programmatore-USB-ICP-per-Microcontroller-Atmel-AVR-Arduino-Nuovo-/261880493140?hash=item3cf94b3454
e l'adattatore
http://www.ebay.it/itm/Adattatore-Programmatore-USBASP-Arduino-AVRISP-STK500-Atmel-Atmega-/181733351195?hash=item2a5026df1b

cliccando su un bottone...

puoi leggere facilmente con khazama:
http://khazama.com/project/programmer/

extreme burner:

avrstudio ..e tanti altri programmi

ciao icio,
grazie mille per il consiglio e considerato il costo non eccessivo
mi sà che lo prendo..

PaoloP:
I file creati ti permetto di caricare lo stesso programma estratto su altri micro (identici).

grazie Paolo,
valori hex recuperati..
naturalmente per caricare il file .hex seguo il processo write?

Paolo in alternativa se recupero la flash da un atmega168 20AU
la posso caricare su un atmega328P?

molok:
naturalmente per caricare il file .hex seguo il processo write?

Si processo inverso.

molok:
Paolo in alternativa se recupero la flash da un atmega168 20AU
la posso caricare su un atmega328P?

Non lo so.

Sì, non dovrebbero esserci problemi

ciao paolo, ciao icio,
scusate il ritardo ieri ho fatto tardi col test..
il risultato è stato abbastanza buono ma non ottimo,
perchè in lettura avrdudess delude tantissimo, in sostanza
lasciando tutti i valori in default codifica male la lettura aggiungendo virgole,
probabilmente forse cambiando qualcosa nelle impostazioni
si risolve, ma non conosco bene il processo, devo studiarci ancora un pò.
invece, in scrittura è affidabile (avevo già un file .hex e lo carica perfettamente).
inoltre per il dubbio della compatibilità tra 168 e 328, il test ha funzionzionato perfettamente, in entrambi ho caricato il file .hex senza problemi.

è un peccato non riuscire a recuperare lo sketch da un hex,
in rete ho trovato diverse soluzioni di altri utenti ma non funzionano assolutamente.

molok:
è un peccato non riuscire a recuperare lo sketch da un hex,
in rete ho trovato diverse soluzioni di altri utenti ma non funzionano assolutamente.

Diciamo che a me darebbe fastidio se uno mi tira giù un .hex, costato giorni di lavoro, da un mio macchinario che usa Atmel per poi copiarselo sul suo... Figuriamoci se poi ottiene anche lo sketch....

A te non darebbe fastidio?

Mi è già successo che un tipo ha copiato un mio macchinario che monta Mitsubishi Alfa e poi si è fatto il download dell' .hex (e dello sketch, anche se poi lo deve riordinare, e non è facilissimo) ed ora usa il mio programma tranquillamente sulle macchine copiate, senza aver apportato nemmeno una modifica.

Per cui ben venga questa limitazione che è un po' una limitazione antipirateria (industriale) ...

steve-cr:
A te non darebbe fastidio?

ciao steve,
sono perfettamente d'accordo con te,
ma il test è stato sviluppato eslusivamente per motivi di studio e conoscenza..
per eliminare i problemi descritti da te si potrebbe procedere con
un lock bits ma ho vaghe informazioni a riguardo forse altri
ti possono indirizzare meglio, ad ogni modo ci sono molti post
che trattano l'argomento..

però è anche vero che arduino nasce open source e come strumento
di condivisione di informazione degli utenti utilizzatori,
poi se molti lo fanno per business.. boh!!

steve-cr:
Mi è già successo che un tipo ha copiato un mio macchinario che monta Mitsubishi Alfa e poi si è fatto il download dell' .hex (e dello sketch, anche se poi lo deve riordinare, e non è facilissimo) ed ora usa il mio programma tranquillamente sulle macchine copiate, senza aver apportato nemmeno una modifica.

Fammi capire, tu hai messo in circolazione degli apparati dotati di micro con software sviluppato da te e non hai attivato le protezioni hardware per la lettura della flash ?

molok:
.....però è anche vero che arduino nasce open source e come strumento
di condivisione di informazione degli utenti utilizzatori,
poi se molti lo fanno per business.. boh!!......

E' stato detto molte volte, arduino è un sistema di sviluppo, compilatore e librerie, la scheda è un volgare MC a 8 bit e basta, se si vuole si può usare QUALSIASI dico QUALSIASI compilatore, anche in basic o in pascal, in assembler o in qualsiasi linguaggio, poi basta attivare i lockbits e nessuno lo potrà più leggere o clonare

icio:
poi basta attivare i lockbits e nessuno lo potrà più leggere o clonare

ciao icio,
è un processo che ancora non conosco, come si attivano i lockbits?