Caricamento sketch tramite pendrive USB

Ciao a tutti, ho cercato nel forum ma non sono riuscito a trovare una risposta,
volevo sapere se qualcuno è riuscito, usando una shield usb host, a fare in modo che l'arduino auto aggiorni lo sketch quando si inserisce una pen usb con dentro un file hex, contenente lo sketch.
Sapete darmi una mano?

Grazie

Chiedi molto, ma sembrerebbe un lavoro fattibile, ovviamente scrivendo da 0 un bootloader. In poche parole dovresti nello sketch intercettare l'inserimento della pendrive e identificare il file, a questo punto resetti in un qualche modo il micro. Dal bootloader esegui la stessa verifica, e in caso di presenza del file riscrivi la flash(operazione non cosi semplice) con le informazioni presenti nel file hex, dopo di che esegui normalmente lo sketch. Sinceramente sembra un lavoro più semplice che riscrivere il bootloader originale di Arduino, dove il protocollo di comunicazione impone molti più accorgimenti, qui invece si tratterebbe solo di leggere e scrivere.
Io al tuo posto eviterei le modifiche a livello di sketch e per forzare l'update semplicemente userei il pulsante di reset fisico.
Sarebbe carino verificare se qualcuno abbia gia pensato di implementare una soluzione del genere.

Prendi un rasberry e usa quello per fare l' upload.

Ciao Uwe

Ciao,

ottimo il suggerimento di uwefed.

Se vuoi rimanere nel mondo Arduino (magari per poter realizzare qualcosa di standalone) forse sarebbe più facile utilizzare una scheda SD per contenere il file .hex invece di una penna USB.

In questo caso credo si debba smanettare con lo sketch ArduinoISP per fare in modo che legga il .hex dalla SD invece che riceverlo dalla seriale. In pratica il tuo progetto finale dovrebbe avere due ATmega328. Il primo programmato con lo sketch ArduinoISP opportunamente modificato; il secondo dovrebbe essere quello che viene riprogrammato e svolge l'effettivo lavoro del tuo progetto.

Purtroppo il mio è solo uno spunto di riflessione ed è possibile che mi sfugga qualcosa oppure che il lavoro da fare per modificare lo sketch ArduinoISP non sia affatto banale.

Ciao.
Vittorio.

D'accordo con Uwe, bisogna vedere che disponibilità di spazio ha, nonché budget. Io personalmente credo non userei mai una Raspberry per un compito cosi limitato.
L'idea del doppio ATmega328P è di sicuro meno onerosa, se abbinata poi ad un lettore SD ancora meglio.
Non è necessario modificare l'ArduinoISP, alla fine l'upload di codice nella flash degli ATmega è ben documentato e si attua con la semplice connessione SPI, bisognerebbe verificare se il lettore SD possa garantire una lettura abbastanza rapida per stare dietro alla scrittura della flash.

Ragazzi grazie per i suggerimenti,
purtroppo a livello di bootloader e di come, nei dettagli, viene caricato uno sketch ne so poco niente.

Direi che l'opzione del raspberry non è percorribile, mi sembra sprecato e complica troppo l'hardware.

Mi interessava capire tecnicamente come funziona il caricamento di uno sketch perchè sarebbe interessante per applicazioni standalone, poter aggiornare il codice senza collegare pc e farlo inserendo una chiavetta usb.

Sull'opzione dell' SD seguo i vostri spunti e provo a reperire un po' di informazioni.

Se qualcuno invece ha già provato a fare il caricamento da pen usb ed è così gentile da darmi qualche dritta è il benvenuto, stessa cosa sui bootloader.

Intanto un grazie a tutti
Guido

Il bootloader è semplicemente uno sketch posto in un area particolare della flash che viene eseguito all'avvio dell'AVR, su Arduino si occupa di verificare se ci sono connessioni seriali in arrivo e in caso vi sia un tentativo di caricare uno sketch si occupa di comunicare con il PC e scrivere lo sketch nella restante flash.
Nel caso da me proposto cambierebbe solo la sorgente dello sketch che non sarebbe piu il PC ma un SD, quindi l'AVR si avvia, il bootloader verifica che vi sia un aggiornamento nella SD, se c'è lo scrive nella flash, passa ad eseguire lo sketch.

Nel caso di due AVR il sistema cambia, un AVR verifica il file a questo punto si interfaccia con SPI al secondo Arduino e lo manda in modalità programmazione e gli invia lo sketch.

La prima è una programmazione SW la seconda HW.

Questo lo conoscete già?

http://crossroadsfencing.com/BobuinoRev17/index.html

Questo lo conoscete già?

Cross Roads Electronics

ottimo progetto... forse eccessivo per gli scopi di questo thread. Tuttavia la pagina riporta il link al lavoro iniziale di Nick Gammon che sembra essere più semplice e adatto a quello che vuole fare guicit.

Comunque cercando "upload hexfile from sd card" su Google vengono fuori molti risultati. La cosa sembra sicuramente fattibile in maniera compatta (pochi componenti) ed economica.