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?
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
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.
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.
Si estos requisitos se cumplen pues no tienes más que mirar en la consola el mensaje que te aparece 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
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
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: