Recuperare eseguibile da un Arduino NANO

Ho su un Arduino NANO una vecchia versione di sketch che avevo fatto e di cui non ricordo la versione.
La versione installata è perfettamente funzionante e mi piacerebbe recuperarla anche nel formato eseguibile o alltro.
Recuperarla nel senso di scaricarla dalla memoria per poi installarla su un altro NANO.
Saluti

LelloGi

Ti serve un programmator ISPe con avrdude leggi la memoria e salvi il tutto su un file .hex

Questo è tutto quello che puoi recuperare, null'altro.

Guglielmo

Edit: leggi più avanti perché si può fare anche via USB

Ciao, mi sembra che il video sia in spagnolo, ma è piuttosto grafico e descrive in dettaglio i passaggi che devi fare.
Video
Saluti.

No, quello spiega come scrivere, compilare un programma, recuperare il .hex e clonarlo in un altro arduino senza dover ogni volta compilare.

Nel suo caso invece lui NON ha più il sorgente (sarebbe troppo facile :grin:), ma deve andare a recuperare dalla flash del ATmega328P il codice già compilato per trasferirlo su un altro ATmega328P.

Questo è possibile SOLO disponendo di un programmatore ISP da collegare al connettore ICSP e, tramite esso, recuperare dalla flash il codice (cosa oltretutto possibile solo perché lui NON lo ha protetto, perché, se lo avesse protetto dalla copia, neanché così sarebbe riuscito).

Guglielmo

Non caro @ gpb01 Penso che tu non abbia capito bene il video, quello che fa è:
1- Creare un "modello" di uno schizzo vuoto.
2- leggi e scrivi su quel modello con il programma avrdudess il codice di lampeggiamento veloce
3- con lo stesso programma, registra quel modello in arduino con il lampeggiamento lento
4- Arduino lo accetta e inizia a funzionare con il nuovo lampeggio

Poi ha salvato il codice in esadecimale sull'hard disk per future registrazioni ed è stato in grado di registrarlo su un nuovo arduino, che è quello che penso voglia fare l'amico @LelloGi.
Saluti.

1 Like

Ok, ho riguardato bene il video e ... beh ... mi hai fatto scoprire veramente una cosa nuova :smiley:, avdude riesce ad usare il protocollo "arduino" non solo per programmare il chip, ma anche per leggere !!!

Ti garantisco che in tanti anni mai avevo cercato di fare questa prova ... molto interessante, grazie per l'informazione ! Correggo i miei post precedenti per eliminare la cattiva informazione ...

A questo punto si può usare sia l'interfaccia grafica "avrdudess" (strada più semplice) che direttamente avrdude da linea comando (che è poi quello che fa avrdudess dietro le quinte) e lanciare la lettura, il salvataggio del file .hex e poi la successiva scrittura e non è necessario usare un programmatore ICSP (... ovviamente vale sempre la cosa che il programma non deve essere stato protetto).

Ancora grazie per la segnalazione ! :wink:

Guglielmo

@LelloGi : se ben ricordo tu lavori su mac (come me) e quindi la cosa si complica un tantino.

Per usare avrdudess (interfaccia grafica verso avrdude) sotto mac devi installare "Mono" ed usare il prodotto con tale piattaforma. T'avverto subito che il primo avvio è di una lentezza esasperante (almeno sulla mia macchina) ... sembra quasi che non stia funzionando, ma ... se aspetti alcuni minuti vedrai apparite la maschera di avrdudess (oltre ad un po' di segnalazioni nel terminal dove lo avrai dovuto lanciare).

L'altra strada è studiarti il manuale di avrdude e ricavare i comandi che servono ... non esattamente banale, ma fattibile.

Guglielmo

Edit: vedi più avanti ... NON serve che installi avrdudess e Mono

@gonpezzi : ... In effetti, ora che mi hai fatto notare la cosa e mi ci hai fatto pensare ... quando da IDE noi chiediamo la "verifica" del programma, l'IDE lancia prima la scrittura in flash e poi fa la verifica che la scrittura sia avvenuta correttamente, quindi ... era ovvio che la cosa era fattibile solo che ... la mia abitudine ad usare sempre programmatori esterni su ICSP non mi ha fatto notare la cosa ed ero convinto che il recupero della flash fosse possibile, appunto, solo via ICSP... :slightly_smiling_face:

Ti meriteresti un punto "karma", ma dato che non ci sono più ... metto il :heart: ... :joy: :joy: :joy:

Guglielmo

@LelloGi : ... l'età e l'ora tarda giocano brutti schezi ... a mente fresca ... sempre se ben ricordo e se sei su mac, NON serve né Mono né avrdudess ... c'è un'ottima interfaccia grafica (quindi simile nell'uso ad avrdudess) nativa per mac, è AVRfuses ... che magari ti ho già consigliato in passato :smiley:

Unico motivo per eventualmente installare Mono e avrdudess è che è un prodotto che mi sembra venga aggiornato con maggiore frequenza ... ma per l'uso che devi farne ... AVRfuses è più che sufficiente :wink:

Guglielmo

Grazie dei consigli di entrambi.
Si, uso di preferenza il Mac ma in alternativa ho anche un Pc con Windows 10.
Appena rientro "at home" provo a seguire i vostri consigli.
Saluti
LelloGi

Ho visto anche il video e mi sembra semplice anche questa opzione.
Saluti

LelloGi

Sei hai una macchina Win sicuramente SI, altrimenti, invece che avrdudess su Win usi AVRfuses su mac ... fanno la stessa cosa, sono solo una GUI verso avrdude.

Guglielmo

qualche info o link in proposito ?
grazie!

Ci sono gli appositi FUSE per il "Lock" (lock fuses) ... occhio perché una volta attivati poi ci vuole un "chip erase" per azzerarli ...

Nel datasheet di ciascuna MCU è sempre ben specificato cosa essi fanno e come usarli (con estrema cautela, sapendo bene quello che stai facendo).

Leggi anche QUI :slight_smile:

Guglielmo

Tutto "abbastanza" chiaro.
Prima di approfondire personalmente il discorso (visto che mi ha dato gli input sui quali cercare) , faccio ulteriore domanda perchè non ho capito una cosa: pongo come esempio un ipotetico scenario :
parliamo sempre di esp32 : faccio il mio programma, lo carico, e lo do a chi deve utilizzarlo. Per potergli far fare update uso OTA, con connessione al mio server dove rilascio il .bin aggiornato.
Se io blocco l'esp nei modi indicati dal link che hai postato, il download OTA avviene lo stesso o non è possibile ?
Si parlava di blocco della lettura e non di scrittura ... ma non mi è completamente chiaro .

NO, questo è il forum di Arduino ed io mi riferisco sempre agli Arduino e, se non meglio specificato, ad Arduino UNO, ovvero ... MCU AVR ... per gli ESP32 c'è il forum di Espressif :grin:

Della serie ... NON ho la più pallida idea se questa cosa esiste e come anche su ESP32 ... :roll_eyes:

Quando fate delle richieste specificate sempre di cosa parlate !

Guglielmo

Una piccola ricerca su Google mostra che su ESP32 la cosa funziona diversamente ...
... tutti dettagli QUI :smiley:

Guglielmo

Si, è spagnolo colombiano, sicuramente migliore di altri "dialetti" spagnoli sudamericani! :joy:

Interessantissima la cosa e spiegata molto bene: la proverò al più presto. Grazie!

grazie della info ...
in ogni caso è semplicissimo e chiarissimo ... per me è come arrivare su marte con una "graziella" :frowning: