Recupero sketch compilato da Arduino R4 WiFi

Buongiorno a tutti, per un progetto sto usando un Arduino r4 WiFi, ma purtroppo modificando il codice mi son reso conto di non aver fatto un backup di quello funzionante (attualmente in funzione sulla scheda) e volevo chiede se fosse possibile recuperarlo..

purtroppo la versione "Beta" del codice e completamente diversa da quella attualmente in funzione che possedeva dei bug che però non bloccavano ne rovinavano il risultato finale (Cosa che non so spiegarmi neanche io :slight_smile: ).

spero sia possibile altrimenti devo girare tra le tantissime pendrive da 8gb che tengo per i progetti e sperare che in uno di quelli per puro caso ci sia andato a finire il codice...

p.s.: mi interesserebbe solo il .hex/.bin in quanto so che in teoria non si puo estrapolare il .ino in quanto la board riceve il codice compilato dal computer

Grazie mille

La vedo grigia ...
... parliamo di R4 WiFi ... che, contrariamente alla R4 MINIMA, non ha il connettore JTAG. Ha un paio di piazzole che sono il SWDIO e SWDCLK, ma ci si arriva solo con i pogo-pin e ... comunque occorre un programmatore JLINK o STLINK v2 o simili ed il software adatto :roll_eyes:

Tu come sei messo in tal senso ?

Guglielmo

P.S.: Non conosco se e come sia possibile via interfacia seriale, ma la vedo dura visto che si passa attraverso l'ESP32 che ha il compito di prender ei dati dalla seriale e programmare il Renesas RA4M1 e NON mi risulta abbia funzioni inverse.

Nel file "boards.txt" vedo le seguenti linee per la programmazione:

unor4wifi.upload.tool=bossac
unor4wifi.upload.tool.default=bossac
unor4wifi.upload.protocol=sam-ba

Quindi usa bossac che, in via teorica, ha anche la possibilità di leggere oltre che di scrivere:

-r, --read[=SIZE]
Read SIZE bytes from the target's flash memory and store the contents in FILE. If SIZE is not specified the entire contents on the target's flash memory will subsequently be read and written to disk.

... ma NON ho la più pallida idea né se funzioni con la R4 WiFi, né di come costruire la linea comando.

Credo che dovresti mettere in modalità "bootloader" la scheda (doppia pressione rapida del tasto "reset") e poi provare a leggere la memoria con "bossac" .... qualche cosa del tipo:

bossac --port=porta_seriale --read=firmware_recuperato.bin

... chissà se funziona :roll_eyes:

Guglielmo

Un consiglio per il tuo futuro da programmatore (anche e soprattutto con Arduino): impara a usare un sistema di controllo versione (chiamato anche VCS o Repository Manager).

I più famosi sono Git (spesso usato tramite piattaforme online come GitHub) e il più classico SVN.

Ecco perché ti cambieranno la vita, specialmente se i tuoi progetti Arduino iniziano a crescere:

  • Addio alle copie volanti e alle chiavette USB. Un solo progetto pulito, e sarà il software a tenere traccia di tutta la cronologia delle modifiche introdotte.
  • Se oggi modifichi il codice per aggiungere o cambiare qualcosa e smette misteriosamente di funzionare, con un click puoi vedere cosa hai cambiato rispetto a ieri o tornare indietro alla versione funzionante.
  • Puoi usarli sia localmente sul tuo PC (installando Git), sia online (caricando i progetti su GitHub, GitLab o Bitbucket).

In questo modo se hai bisogno di aiuto sul forum, ti basterà rendere pubblico il progetto (o aggiungere specifici collaboratori) e condividere un link anziché fare copia-incolla.

ho provato con bossac non so se ho sbagliato qualcosa ma quando collego arduino trovo la porta seriale con: ls /dev/cu.usbmodem*
ma dopo bossac mi da questo output:

antho@MacBook-Air ~ % ~/Library/Arduino15/packages/arduino/tools/bossac/1.9.1-arduino5/bossac --port=/dev/cu.usbmodemF412FA9F6B902 --read=firmware_recuperato.bin 
bossac: missing file
Try 'bossac -h' or 'bossac --help' for more information

ho sentito parlare di git, purtroppo su windows il comando di wget non funziona.....

attualmente (per problemi legati alla CPU del computer fisso l'ho mandato in assistenza) uso un Macbook (non granchè quando il firmware di arduino deve collaborare con un server in python in quanto non so se solo a me, ma il Firewall del Mac blocca qualsiasi porta di qualsiasi server...) però penso che quando tornerà il fisso tenterò di installarlo per vie diverse...

Grazie mille per il consiglio! ti chiedo un altra cosa a riguardo, tiene traccia delle modifiche direttamente nel file con il codice oppure in un log a parte ?

Git ha un installer per ogni tipo di sistema operativo, lo usiamo molto al lavoro.

Per quanto riguarda le cose personali invece, uso direttamente GitHub che su Windows e Mac mette a disposizione anche l'applicazione GitHub Desktop che rende più semplici alcune operazioni.

Io ho tutti i miei progetti online perché mi capita di sviluppare da diverse macchine, alcuni sono pubblici altri invece li tengo privati perché magari non sono per me o ci sono dati sensibili. Sul PC lascio solo le prove che faccio al volo.

Se non li hai mai usati, dovrai familiarizzare con la terminologia: push, pull, commit, stash, fork etc etc... io devo andare a cercare informazioni ancora adesso :sweat_smile:

Per rispondere alla tua domanda, Git non modifica assolutamente i tuoi file originali inserendo note o log al loro interno. Il tracciamento avviene in un "mondo parallelo": quando crei un progetto con Git, viene generata una cartella nascosta all'interno del tuo progetto chiamata .git
È lì dentro che Git salva tutta la "storia", i log e i vecchi stati dei file.

Pensa a ogni commit come a un'istantanea (in gergo snapshot) di tutti i tuoi file in quel preciso istante. Ogni commit è identificato da un codice SHA univoco.
Se domani vuoi tornare indietro nel tempo, Git prende la "vecchia foto" dalla cartella nascosta e sostituisce temporaneamente il file sul tuo PC con la versione di quel giorno.

Se vuoi vedere le modifiche rispetto allo stato attuale, tra diversi commit, tra diversi branch, etc etc puoi usare il comando "diff".
GitHub Dektop invece mostra sempre le modifiche rispetto allo stato attuale:

Comunque è un mondo a parte e qui stiamo andando fuori tema rispetto al tuo problema attuale.

Hai provato a vedere se c'è un manuale online per il tool bossac?
Il comando cosi come lo hai inserito non mi torna.

ah ok grazie per la spiegazione, si ho cercato ma non l'ho trovato.. ho provato a chiededere anche alla "Aimone" di google anche se lascia desiderare rispetto a come l'avevano presentata :smiling_face_with_tear: ma o mi da comandi che non esistono di " bossac " o addirittura mi fa usare python con esptool per fare un ponte tramite l'ESP32, ma in realtà ho controllato e non è possibile fare con esptool, in quanto mi fa leggere solo la memory dell'ESP

Nel mio post#3 c'è il link ai comandi bossac ... :roll_eyes:

@Antho: usa il "verbose" nel caricamento del codice su una R4 WiFi e guarda la sintassi del comando per la scrittura ... poi la modifichi per la lettura :wink:

Guglielmo

@gpb01 non avevo visto il link :sweat_smile:

Ho fatto due prove al volo sul mio terminale (senza scheda collegata).

  • con il classico cmd di windows il comando dovrebbe essere
"C:\Users\xxxxxxx\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.9.1-arduino5/bossac" --port=COM1 --read firmware.bin

No device found on COM1
  • con powershell invece la sintassi è un po' più complessa
 & "C:\Users\xxxxxx\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.9.1-arduino5\bossac.exe" '--port=COM1' '--read' firmware.bin

No device found on COM1

Con Linux/MacOS quindi, dopo aver verificato il path, dovrebbe essere qualcosa del genere.
Il carattere '=' va messo nel caso in cui si voglia specificare la quantità esatta di byte da leggere.

~/Library/Arduino15/packages/arduino/tools/bossac/1.9.1-arduino5/bossac --port=/dev/cu.usbmodemF412FA9F6B902 --read firmware_recuperato.bin

grazie mille, oggi mi è arrivato il pc aggiustato, quindi ho pronto sia su CMD sia su macOS ma su windows mi dice che alla porta COM3 non trova il device attualmente in bootloader (ho verificato su gestione dispositivi) mentre si Mac mi da questo errore

antho@MacBook-Air /Library % ~/Library/Arduino15/packages/arduino/tools/bossac/1.9.1-arduino5/bossac --port=/dev/cu.usbmodemF412FA9F6B902 --read firmware_recuperato.bin

Permission denied
antho@MacBook-Air /Library % sudo ~/Library/Arduino15/packages/arduino/tools/bossac/1.9.1-arduino5/bossac --port=/dev/cu.usbmodemF412FA9F6B902 --read firmware_recuperato.bin
Password:
Read 1048576 bytes from flash
[                              ] 0% (0/256 pages)
SAM-BA operation failed
antho@MacBook-Air /Library % 

P.S. Spero di non aver sbagliato a scriver il comando

Io sono più all'antica: salvo tutte le versioni, come
Geigerino_v0.1
Geigerino_v0.2_temp1
Geigerino_v0.2_temp2
Geigerino_v0.2_p1
Geigerino_v0.2
...
Geigerino_v1.0
e me le mando anche per email (per il 328p sono meno di 100kB l'uno). Le versioni _temp1-2 e _p1 sono incomplete e prove non funzionanti o non soddisfacenti. Inoltre, divido i programmi in più file (cartelle dell'IDE) di cui uno è un testo con versione, data e descrizione particolareggiata di ciò che ho aggiunto o cambiato.

In altre parole fai manualmente quello che potresti automatizzare con due click :sweat_smile:
Abbiamo un approccio agli antipodi, ma l'importante è avere un metodo che funzioni!
Io a volte faccio le action GitHub anche per automatizzare il versioning... :smirking_face:

@Antho
A casa ho anche io un R4 WiFi. Se mi ricordo quando rientro, faccio qualche prova.

Come detto ...

Guglielmo

Già fatto… il led integrato fa un effetto “respiro” si accende spegne gradualmente ma l’errore è lo stesso

... purtroppo potrebbe essere (da verificare) che il bootloader Arduino specifico per il UNO R4 WiFi NON abilita il comando di read di SAM-BA e allora ... c'è poco da fare.

Guglielmo

Io, tutte le volte che ho avuto questo problema (e sono state tante, sbaglio molto più spesso di quanto sono disposto ad ammettere) non vi ho mai nemmeno provato a recuperare il "binario linkato" dal micro

So per esperienza che ci metto di meno a rifare il lavoro sul "sorgente"che già che ci sono tolgo tutti gli "errorini" e similia che con una maggiore "esperienza" del problema ho nel frattempo capito e ora so come evitare

In buona sostanza in meno tempo di quello che ci vuole per ottenere un binario ottengo un sorgente di una generazione più avanti

Ci ho provato un po' anche io ma nulla da fare.

C:\Users\Tolentino>"C:\Users\Tolentino\AppData\Local\Arduino15\packages\arduino\tools\bossac\1.9.1-arduino5/bossac" --port=COM3 -r "C:\Users\Tolentino\Documents\firmware.bin"
Read 1048576 bytes from flash
[                              ] 0% (0/256 pages)
SAM-BA operation failed

Sembrerebbe che il bootloader consenta solo di fare upload.

Credo che, purtroppo, si possa fare solo via JTAG ... :roll_eyes:

Guglielmo

Grazie Mille per l'aiuto, in questi giorni son riuscito a migliorare la versione quella con i bug rendendola utilizzabile e più precisa... adesso sto provando a saldare tutti i pezzi nuovi, penso che ci metterò un pò di tempo a rifarlo partire ma per adesso può andare anche con i cavi volanti :smiley: