¿Cómo leer el programa actual de un Arduino?

14

Adquirí un PCB Arduino con un ATmega2560 , ya programado con el cargador de arranque Arduino y algún programa. Tengo el boceto , pero antes de jugar con él, me gustaría hacer una copia de seguridad del binario actual que está en el controlador. Como la mayoría de los Arduinos, está conectado a la PC usando un convertidor de USB a serie conectado a TX0 y RX0 y no hay una interfaz ISP .

Aparentemente hay un código para leer en el gestor de arranque Arduino , pero no tengo idea de qué herramienta usar para acceder a él, ya que no hay ningún elemento de menú en el IDE de Arduino.

¿Qué software necesito para leer el programa desde Arduino?

AndreKR
fuente
Código encontrado para leer en el cargador de arranque, pregunta editada.
AndreKR
Esto no hace más difícil su pregunta, pero puede exportar sus esqueletos de arduino como un archivo .HEX.
uranium Lees

Respuestas:

1

El gestor de arranque Arduino es una variante del protocolo STK500 original (1.x) . El carácter 't' (ASCII 0x74) es el comando "Leer página". Entonces, tal vez sea posible extraer el programa a través del puerto serie a través del cargador de arranque usando AVRDUDE ... Pero, en el mejor de los casos, creo que tomará un tiempo elegante para hacerlo.

vicatcu
fuente
11

He descargado una memoria de Duemillenova con ATMega328P con el siguiente comando:

avrdude -C avrdude.conf -v -v -v -v -p atmega328p -c stk500 -U flash:r:"c:/arduino.hex":r -P\\.\COM2 -b57600
usuario17555
fuente
1
atención que el programador aplicable es probablemente arduino y no stk500.
Paulo Neves
¿Por qué son -vnecesarios cuatro s?
Peter Mortensen
De la documentación de AVRDUDE, "2.1 Descripciones de opciones" : "... -v Habilitar salida detallada. Más -v opciones aumentan el nivel de detalle " .
Peter Mortensen
Esta debería ser la respuesta aceptada.
Caterpillaraoz
¡SI! El pro micro bootloader no funcionó en mi pro micro clon. Descargué el flash de un micro clon profesional y lo guardé en el que necesitaba un cargador de arranque. Utilizando un Arduino como ISP (Linux) - volcado: ./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; escribir: ./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; verificar:./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
7

¿ El AVR de respaldo con hilo avrdude responde a su pregunta? Básicamente, puede leer toda la memoria de un AVR siempre que el fusible de protección no esté configurado.

Esta es la configuración que uso para ATtiny's y ATmega's.

En el tablero que se muestra:

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

Consulte la hoja de datos del controlador qué pin exacto usar. Hay bastantes sitios web en Internet que escriben sobre la programación de AVR utilizando un Arduino, por ejemplo: http://hlt.media.mit.edu/?p=1229

jippie
fuente
Necesito un segundo arduino para eso, ¿verdad? No tengo uno
AndreKR
1
Este es un método de dos Arduino, sí.
jippie
Y, aunque es un poco difícil de ver en la imagen, los pines utilizados en el Arduino objetivo tampoco son TX0 y RX0, ¿verdad?
AndreKR
No, TX y RX no se utilizan para ICP. Se actualizó un poco la respuesta.
jippie
Bueno, creo que te perdiste todo el punto de mi pregunta, probablemente porque le di un mal título. Reformé toda la pregunta.
AndreKR
3

Por lo que puedo ver desde el código fuente del gestor de arranque Arduino , no hay forma de 'volcar' toda la memoria de él. El gestor de arranque admite un modo 'monitor' que le permite volcar un byte de memoria a la vez. Sin embargo, según los comentarios del código fuente "/ * las funciones del monitor solo se compilarán cuando se use ATmega128, debido a las restricciones de tamaño del bloque de arranque * /"

Como tal, supongo que no tienes suerte si no quieres usar ISP, cambiar el gestor de arranque o subir un boceto para hacerlo.

RJR
fuente
Me refería a la sección que comienza en la línea 701 con else if(ch=='t') {.
AndreKR
Buen punto: no había visto eso.
RJR
2

Pensé que había una opción de menú para eso, pero no la encuentro en este momento. Si tiene un programador de ISP, puede usar AVR Studio para leer la imagen de memoria del chip y guardarla en un archivo HEX, que le permitiría restaurarla de la misma manera.

Editar

En respuesta a tu comentario, ¡eso es fácil! Necesita asimilar dos diagramas de información para llevarlo a cabo. El primero es el mapeo de pin Arduino / ATMega2560.

ingrese la descripción de la imagen aquí

El segundo es el mapeo del pin del encabezado ISP / AVR:

ingrese la descripción de la imagen aquí

Armado con estas dos imágenes, deberías poder ver cómo conectarlo.

  • Ejecute un cable desde DIG50 al pin del encabezado ISP de Dragon 1
  • Pase un cable desde VCC al pin del encabezado ISP de Dragon 2
  • Pase un cable desde DIG52 al pin 3 del encabezado ISP de Dragon
  • Tienda un cable desde DIG51 al pin 4 del encabezado ISP de Dragon
  • Ejecute un cable desde RESET hasta el pin 5 del encabezado ISP de Dragon
  • Ejecute un cable desde GND al pin del encabezado ISP de Dragon 6

Con esos en su lugar, debería poder usar AVR Studio para leer el archivo Hex del chip; avíseme si necesita más orientación.

vicatcu
fuente
Tengo un Dragon, pero no sé qué pines del Dragon conectar a la interfaz serial del Arduino.
AndreKR
@AndreKR ver mi respuesta editada para obtener más información
vicatcu
Como se indicó en mi pregunta, sé cómo leer el programa utilizando ISP, por supuesto. Lo que quiero saber es cómo hacerlo utilizando la interfaz en serie (TX0 y RX0), de la misma manera que los programas se cargan al controlador en el mundo Arduino.
AndreKR
@AndreKR Estoy confundido ... tienes un dragón, ¿por qué no querrías leer el programa de la manera normal? No entendí tu comentario sobre no saber qué pines conectar a la "interfaz serial"
vicatcu
La PCB que tengo no tiene un encabezado ISP. Sin embargo, tiene una interfaz en serie y un gestor de arranque Arduino. De esa manera, los programas se cargan en el mundo Arduino, y aparentemente se pueden descargar de la misma manera.
AndreKR