Volendo estrarre il codice contenuto nell'ATmega328 di un Arduino, magari per conservarne una copia in formato .hex da poter utilizzare in un secondo momento per la scrittura di un microcontrollore vergine, quale sarebbe la procedura migliore da seguire?
Ovviamente nell'ipotesi che il micro in questione non sia stato protetto in lettura tramite opzione lock_bit.
Il codice presente nel micro di Arduino è in formato esadecimale e solo in tale formato è estraibile, poi è praticamente impossibile risalire al sorgente; se ti è chiaro questo il secondo impedimento (la faccio completa per chi legge...) può essere la protezione mediante lock bit: in questo caso la lettura viene effettuata ma ti restituisce solo una riga, quindi è assolutamente inutile; i lock bit possono essare resettati solo mediante un chip_erase che però provoca contestualmente la cancellazione della flash, quindi niente da fare.
Se non ci sono impedimenti il modo per leggere il codice è quello di ricorrere ad AVRDUDE, da riga di comando (personalmente lo preferisco decisamente alle varie utility che ho provato), mediante tecnica ISP.
Per poter eseguire questa operazione ti occorrono due schede Arduino (qualsiasi modello, ma ideali sono le UNO), o almeno una scheda Arduino ed una breadboard sulla quale montare il micro da cui leggere la flash, in questo caso ti servono anche un quarzo da 16 MHz e due condensatori ceramici da 22pF, oltre ad una R da 10k (non indispensabile ma meglio se c'è), naturalmente i necessari cavetti e ponticelli jumper per i varicollegamenti ISP e locali.
Come sei attrezzato?
demonoid:
Volendo estrarre il codice contenuto nell'ATmega328 di un Arduino, magari per conservarne una copia in formato .hex da poter utilizzare in un secondo momento per la scrittura di un microcontrollore vergine, quale sarebbe la procedura migliore da seguire?
Ovviamente nell'ipotesi che il micro in questione non sia stato protetto in lettura tramite opzione lock_bit.
Ciao e benvenuto.
Normalmente ci si presenta prima di fare domande in un posto dove siamo nuovi, no?
Come richiesto dal regolamento, prima di fare una richiesta si fa una ricerca... perché dalla ricerca escono fuori un sacco di discussioni in merito, anche molto recenti come questa...
leo72:
Ciao e benvenuto.
Normalmente ci si presenta prima di fare domande in un posto dove siamo nuovi, no?
Come richiesto dal regolamento, prima di fare una richiesta si fa una ricerca... perché dalla ricerca escono fuori un sacco di discussioni in merito, anche molto recenti come questa...
Mi scuso per non aver preso nota della regola causa superficialità. Ho appena provveduto alla presentazione
Riguardo alla discussione già presente ammetto che mi è sfuggita durante la ricerca. Rimediando l'ho letta ma purtroppo si ferma proprio sul punto che mi interessa, cioè su come eseguire l'estrazione.
Grazie per la risposta esaustiva Michele.
Al momento ho a disposizione un solo Arduino UNO R3. Non ho una breadboard ma potrei procurarmela oppure realizzare i collegamenti su millefori o PCB.
OK, allora scaricati la mia Guida sulla Programmazione (v. in firma), leggi la parte che spiega come effettuare un collegamento ISP tra Arduino UNO ed un micro su breadboard (puoi ovviamente emularlo con la millefori ma è più problematico a mio parere). Quando sei pronto passiamo alla parte software. Benvenuto sul Forum.
Grazie Mcihele, guida scaricata. Potresti confermarmi che i collegamenti da eseguire sono quelli descritti da pagina 10 a pagina 13 della guida?
sì, sono quelli.
perfetto grazie, ti aggiorno appena riesco ad approntare il tutto.
Michele ho realizzato i collegamenti tra Arduino e breadboard come spiegato nella tua guida. Adesso come procedo?
1 - copia la cartella \hardware\tools\avr dell'IDE 1.0.5 di Arduino in c:
2 - vai nel prompt dei comandi dos
3 - digita il comando:
"C:\avr\bin\avrdude.exe" -C "C:\avr\etc\avrdude.conf" -p m328p -c stk500v1 -b 19200 -P COMx -U flash:r:C:\flash_read.hex:i
4 - se l'operazione va a buon fine ti troverai in c:\ un file flash_read.hex che contiene lo sketch presente nel mega328P
Note:
COMx è la COM associata ad Arduino, al posto della x metti il numero della porta, p.es. COM9
Tale numero non può superare il 9 altrimenti devi riassegnare la COM con un valore inferiore
Se ti dà errore di programmatore, al posto di stk500v1 scrivi arduino
In alcuni casi (non me li ricordo più) le virgolette danno errore, in caso le togli
Fammi sapere.
Grazie mille Michele! Appena torno a casa e ho un momento libero provo e ti faccio sapere.
Michele scusami per l'enorme ritardo ma ho avuto degli inconvenienti......
Cmq ho provato a leggere il micro usando le tue istruzioni ma ottengo questa risposta =(
Usa una GUI tipo AVRdudess, ti risolvi molti problemi della linea di comando.
Paolo, non farla così semplice, se provi ad usare i vari modelli di Arduino le cose cambiano moltissimo, in alcuni casi ancora non ho trovato soluzione, è per questo che ti dico che sto "studiando" da alcuni mesi; il programma è bello e valido, ma ha alcune pecche anche serie, ed escono fuori proprio quando si devono trattare situazioni particolari.
@ dem: prova a sostituire "stk500v1" con "arduino" e sincerati che i collegamenti ISP (alimentazione compresa!) siano stati eseguiti correttamente.
ciao Michele,
scusami se ripesco e riattivo questa discussione dopo diverso tempo,
ma non riesco a trovare la tua guida alla programmazione ISP e volevo sapere quali sono
i collegamenti da utilizzare descritti nella tua guida da pagina 10 a pagina 13
per eseguire i passaggi descritti in questo post?
molok:
ma non riesco a trovare la tua guida alla programmazione ISP
Nel frattempo la guida, con le dovute aggiunte ed estensioni, è diventata un libro e il relativo pdf è stato ritirato per ovvi motivi di copyright.
molok:
ma non riesco a trovare la tua guida alla programmazione ISP ...
... eccola QUI ... da comprare
Guglielmo
gpb01:
... eccola QUI ... da comprareGuglielmo
cavolo, anni fà l'avevo scaricata a gratis ma ho perso il file..
ehhmmm!!! gioco il jolly!! riformulo la richiesta..
quali collegamenti devo effettuare per poter procedere senza problemi?
astrobeed:
e il relativo pdf è stato ritirato per ovvi motivi di copyright.
Mica tanto ovvi.
Nella guida non era specificato nessuna tipo di licenza utilizzata, ma era riportato nell'introduzione che la guida era gratuita e a disposizione di tutti.
Poi naturalmente comprendo gli accordi commerciali tra il Prof. e l'azienda che ha pubblicato il libro.
Però non credo che lasciare comunque la guida comunque fruibile porterebbe una minore vendita del libro.
Anzi penso il contrario, dove però il libro, in confronto all'ultima versione della giuda, debba offrire un valore aggiunto come una più ampia trattazione ed eventualmente una versione aggiornata agli ultimi IDE e prodotti ATmel. Cosa che la guida non potrebbe essendo ferma al 2012.
E comunque ho anche il libro autografato dall'autore.
molok:
quali collegamenti devo effettuare per poter procedere senza problemi?
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 sceglie il pin 10.