Novato: Se puede leer el programa subido a arduino?

La cuestion es que he guardado tantas versiones de un programa que no se cual tengo metida actualmete, por eso realizo esta pregunta, ya que ignoro su respuesta...
Se puede leer el programa subido a arduino? si es asi, como puedo leerlo o descargarlo?

Muchas gracias.

Con el ISP Lo puedes hacer, te vuelca el binario claro.

si quieres recuperar el código fuente...no se puede.

Con el ISP Lo puedes hacer, te vuelca el binario claro.

@fm se haría con la consola usando avrdude?

No, tendrías que usar avrdude y un ICSP o ICSP + AVR studio de Atmel. Es la única forma que se me ocurre.

ok, me ha quedado claro, muchisimas gracias.

Con avrdude se podría hacer, este es el comando a ejecutar con el avrdude que viene con el IDE v1.0 (más que nada para usar la nueva versión)
http://code.google.com/p/arduino/wiki/Arduino1

El ejecutable/binario del avrdude está en: arduino-1.0-rc2\hardware\tools\avr\bin

avrdude -C PATH_AL_IDE_ARDUINO/arduino-1.0-rc2/hardware/tools/avr/etc/avrdude.conf -patmega328p -carduino -P\\.\NOMBRE_PUERTO_SERIE -b115200 -D -Uflash:v:PATH_AL_HEX/TU_HEX.cpp.hex:i

Suponiendo que tienes conectado una placa con el micro atmega328p, si es otro modelo, pues deberás cambiar el argumento -p al que corresponda.
Esto verificará/comparará el hexadecimal (sketch compilado) que le indiques con el que el Arduino tenga en memoria, por lo que si la verificación es correcta, significará que ese es el que está subido.
Para sacar el hexadecimal, en el IDE (para la versión 0022 que supongo será la que estés usando), pulsa Shift mientas le das al play, eso hará que en la consola de abajo aparezca la ruta donde se almacena el hexadecimal correspondiente al sketch.

Un saludo

Una pregunta, se descarga el binario por el puerto serie?

Supongo que tendré que leer el manual de avrdude.

El comando anterior sólo hace el paso de verificación en vez del de programación y verificación.
La verificación será la razón por la que el led TX de los Arduino con FTDI se enciende en la segunda parte de la programación, le manda de vuelta el hex al avrdude para verificar. Si no, no tendría sentido.

La receta de chiva es la ideal para localizar el sketch en cuestión a partir de la comparación de sus binarios. Como te dice chiva la ruta del binario (.hex) del sketch que deseas comparar se obtiene, en las últimas versiones del IDE de arduino, al compilar manteniendo la tecla SHIFT. Haciendo esto te aparecerá la ruta entre los mensajes de compilación que se mostrarán en la ventana de mensajes de la parte inferior del IDE.

Un truquillo que uso yo, siempre que puedo, es utilizar la clase Serial en la función setup(), al comienzo del sketch, para mostrar un mensaje por consola con la versión del sketch y otros datos. Pero claro, se tienen que cumplir grosso modo unos requisitos:

  • Llevar un control de versiones de un sketch. Tienes que tener todas las versiones del sketch y que el texto que se imprime corresponda realmente con cada versión.
  • Que no necesite los pines 0 y 1 desde el principio del sketch para otros menesteres.
  • Y que dispongas de suficiente memoria para ello. Hay veces que un sketch necesita toda la memoria y hay que escatimar el uso de Serial.
#define VERSION "Skecth v.1.3"

void setup(){
  Serial.begin(9600);
  Serial.println(VERSION);
}

void loop()
{
}

Si estos requisitos se cumplen pues no tienes más que mirar en la consola el mensaje que te aparece :wink: y así podrás dirigirte al código fuente de tu sketch que tendrás almacenado.

Una cosa similar a esto, pero de forma externa y automática, con webservices, un gestor de base de datos en un sistema y alguna cosilla más la estuve usando para las pruebas que hice hace tiempo en el proyecto de 'arduino y la nube (cloud computing)'. Para que cuando los usuarios del 'sistema en cloud' subieran sus sketches el identificador devuelto del .hex compilado sirviese para localizar el fuente que lo había generado :wink:

Saludos.

coLe.

Chiva, leyendo el comando veo que es para verificar. Es mas, yo tengo el entorno configurado en modo verbose. Pero la pregunta que hacia era para recuperar una imagen que hay en la flash vía arvdude.

Hasta el momento las estaba recuperando vía ICSP con AVR studio. Alguno de vosotros lo ha hecho/probado?

fm, creo que he dicho 'verificar' unas cuantas veces :smiley:
Si quieres volcar la flash, cambia:

-Uflash:v:PATH_AL_HEX/TU_HEX.cpp.hex:i

por:

-Uflash:r:PATH_DONDE_GUARDAR.hex:i

Destacar que descarga toda la flash al completo

Importante que avrdude tenga permisos para guardar en donde le digas (mejor si lo ejecutas desde una consola con permisos de admin), si lo guardas en Windows 7 en la partición en la que está instalada el SO, acabará en: C:\Users\USUARIO\AppData\Local\VirtualStore
que es la ruta donde se guardan los datos de los programas que no tienen permisos de escritura en la ruta indicada y dentro de VirtualStore estará en la ruta que le hayas puesto a partir de C:

chiva, si disculpa pero estoy en un terminal de unas pocas pulgadas, por unas pocas pulgadas y la vista ya no es lo que era... :wink:

Ya he visto, que efectivamente se puede leer, escribir, volcar a fichero, en el manual de avrdude.

Como ejemplo ponen:
avrdude -p m128 -c stk500 -U flash:r:"c:/diag flash.bin":r

Esta noche probaré en modo interactivo "-t" a ver que saco.