Come leggere il programma corrente da un Arduino?


14

Ho acquistato un PCB Arduino con un ATmega2560 , già programmato con il bootloader Arduino e alcuni programmi. Ho lo schizzo , ma prima di armeggiarmi, vorrei fare il backup dell'attuale binario che si trova nel controller. Come la maggior parte degli Arduinos, è collegato al PC tramite un convertitore da USB a seriale collegato a TX0 e RX0 e non esiste un'interfaccia ISP .

Apparentemente c'è un codice per la lettura nel bootloader di Arduino , ma non ho idea di quale strumento utilizzare per accedervi in ​​quanto non vi è alcuna voce di menu nell'IDE di Arduino.

Di quale software ho bisogno per leggere il programma da Arduino?


Codice trovato per la lettura nel bootloader, domanda modificata.
AndreKR,

questo dosent pone la tua domanda, ma puoi esportare i tuoi arechino skech come file .HEX.
uranium Lees,

Risposte:


1

Il bootloader Arduino è una variante del protocollo STK500 originale (1.x) . Il carattere 't' (ASCII 0x74) è il comando "Leggi pagina". Quindi forse è possibile estrarre il programma attraverso la porta seriale tramite il bootloader usando AVRDUDE ... Ma nella migliore delle ipotesi, ci vorrà un po 'di tempismo per farlo.


11

Ho scaricato un ricordo da Duemillenova con ATMega328P con il seguente comando:

avrdude -C avrdude.conf -v -v -v -v -p atmega328p -c stk500 -U flash:r:"c:/arduino.hex":r -P\\.\COM2 -b57600

1
attenzione che il programmatore applicabile è probabilmente arduino e non stk500.
Paulo Neves,

Perché sono -vnecessari quattro secondi?
Peter Mortensen,

Dalla documentazione AVRDUDE, "2.1 Descrizioni delle opzioni" : "... -v Abilita output dettagliato. Altre opzioni -v aumentano il livello di dettaglio. "
Peter Mortensen,

Questa dovrebbe essere la risposta accettata.
Caterpillaraoz,

SÌ! Il micro bootloader professionale non ha funzionato sul mio micro clone professionale. Ho scaricato il flash da un microclone professionale funzionante e salvato in quello che aveva bisogno di un bootloader. L'utilizzo di un Arduino come ISP (linux) - discarica: ./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:r:"/tmp/dump.bin":r -P /dev/ttyUSB0; scrivi ./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:w:"/tmp/dump.bin":r -P /dev/ttyUSB0:; verifica:./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:v:"/tmp/dump.bin":r -P /dev/ttyUSB0
b_laoshi il

7

Ha l' AVR backup con avrdude filo rispondere alla tua domanda? Fondamentalmente è possibile leggere tutta la memoria da un AVR purché il fusibile di protezione non sia impostato.

Questa è la configurazione che uso per ATtiny e ATmega.

Nella scheda mostrata:

  • 11 = MOSI
  • 12 = MISO
  • 13 = SCLK

Fare riferimento al foglio dati del controller quale pin esatto utilizzare. Esistono molti siti Web su Internet che scrivono sulla programmazione di AVR usando un Arduino, ad es .: http://hlt.media.mit.edu/?p=1229


Ho bisogno di un secondo arduino per quello, giusto? Non ne ho uno.
AndreKR,

1
Questo è un metodo Arduino due, sì.
jippie,

E, sebbene sia un po 'difficile vedere nella foto, i pin utilizzati sul target Arduino non sono nemmeno TX0 e RX0, vero?
AndreKR,

No, TX e RX non sono utilizzati per ICP. Aggiornato un po 'la risposta.
jippie,

Beh, penso che ti sia perso l'intero punto della mia domanda, probabilmente perché gli ho dato un titolo negativo. Ho riformulato l'intera domanda.
AndreKR,

3

Per quanto posso vedere dal codice sorgente del bootloader di Arduino , non c'è modo di "scaricare" tutta la memoria da esso. Il bootloader supporta una modalità "monitor" che consente di scaricare un byte di memoria alla volta. Tuttavia, secondo i commenti del codice sorgente "/ * le funzioni di monitoraggio verranno compilate solo quando si utilizza ATmega128, a causa dei vincoli delle dimensioni del blocco di avvio * /"

Come tale, immagino che tu sia sfortunato se non vuoi usare l'ISP, cambiare il bootloader o caricare uno schizzo per farlo.


Mi riferivo alla sezione che inizia nella riga 701 con else if(ch=='t') {.
AndreKR,

Un buon punto: non l'avevo visto.
RJR,

2

Ho pensato che ci fosse un'opzione di menu per questo, ma non lo trovo in questo momento. Se si dispone di un programmatore ISP, è possibile utilizzare AVR Studio per leggere l'immagine di memoria dal chip e salvarla in un file HEX, che consentirebbe di ripristinarla con gli stessi mezzi.

modificare

In risposta al tuo commento, è facile! È necessario assimilare due diagrammi per informazioni. Il primo è il Pin Mapping Arduino / ATMega2560.

inserisci qui la descrizione dell'immagine

Il secondo è l'ISP Header / AVR Pin Mapping:

inserisci qui la descrizione dell'immagine

Armati di queste due immagini, dovresti essere in grado di vedere come collegarlo.

  • Far passare un filo da DIG50 al pin 1 dell'intestazione Dragon ISP
  • Far passare un filo dal VCC al pin 2 dell'intestazione Dragon ISP
  • Far passare un filo da DIG52 al pin 3 dell'intestazione Dragon ISP
  • Far passare un filo da DIG51 al pin 4 dell'intestazione Dragon ISP
  • Esegui un filo da RESET al pin 5 dell'intestazione Dragon ISP
  • Esegui un filo da GND al pin 6 dell'intestazione Dragon ISP

Con quelli in atto, dovresti essere in grado di utilizzare AVR Studio per leggere il file Hex dal chip - fammi sapere se hai bisogno di ulteriori indicazioni.


Ho un drago, ma non so quali pin del drago si collegano all'interfaccia seriale di Arduino.
AndreKR,

@AndreKR vedi la mia risposta modificata per maggiori informazioni
vicatcu

Come indicato nella mia domanda, so come leggere il programma usando l'ISP, ovviamente. Quello che voglio sapere è come farlo utilizzando l'interfaccia seriale (TX0 e RX0), allo stesso modo in cui i programmi vengono caricati sul controller nel mondo Arduino.
AndreKR,

@AndreKR Sono confuso ... hai un drago, perché non dovresti voler leggere il programma in modo normale - Ho frainteso il tuo commento sul non sapere quali pin collegare alla "interfaccia seriale"
vicatcu

Il PCB che ho non ha un'intestazione ISP. Tuttavia, ha un'interfaccia seriale e un bootloader Arduino. In questo modo i programmi vengono caricati nel mondo Arduino e apparentemente possono essere scaricati allo stesso modo.
AndreKR,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.