Tengo una placa Arduino Uno, con un código (boceto) ya quemado / almacenado en el microcontrolador. ¿Cómo puedo acceder a ese código?

Arduino IDE está cargando el código Arduino. El código se desarrolla básicamente en Embedded C. Al cargar un Sketch primero, convertirá el código en código HEX para el Controlador y ese archivo HEX se guardará en Arduino.

El Arduino tiene formas infinitas de diseño como se ve por su símbolo

Contestaré esto en dos partes, el n. ° 1 es relativamente fácil, el n. ° 2 imposible al nivel que supongo que quieres.

1. Extrayendo el código hexadecimal del Uno:

Si bien los detalles dependerán de la revisión del Uno que tenga, querrá usar avrdude (disponible para Linux, incluido con el software OS X Arduino) y un comando similar al siguiente que extraería la información de un ATmega168 :

avrdude -F -v -pm168 -cstk500v1 -P / dev / ttyUSB0 -b19200 -D -Uflash: r: program.bin: r

Mire la documentación de avrdude para que coincida con el parámetro de la parte -p específico de su dispositivo (o publíquelos y podemos ir desde allí).

Como parece que tiene el Uno Rev3, esa placa tiene un ATmega328 ( -pm328 ). El programador “se comunica utilizando el protocolo STK500 original”, por lo tanto, el indicador de protocolo de comunicación -c debería ser -cstk500v1 el comando que necesitaría (suponiendo que Uno esté conectado a / dev / ttyUSB0):

avrdude -F -v -pm328p -cstk500v1 -P / dev / ttyUSB0 -b19200 -D -Uflash: r: program.bin: r

A continuación su segunda pregunta.

2. Convertir código hexadecimal a fuente original:

Lo siento, pero eso no es posible. Si bien puede obtener algunos “descompiladores” hexadecimales, el galimatías devuelto, aunque funcionalmente correcto, no será legible para los humanos (algunos comerciales, como los Rayos Hexagonales, pueden darle cierto nivel de legibilidad humana).

Dicho esto, lo mejor es que sería un traductor / convertidor de hexadecimal a ensamblador, que aún le dará una mejor idea de lo que está sucediendo, pero seguirá siendo (por definición) de muy bajo nivel. Todos los nombres de variables, comentarios, etc. se eliminarán y todavía se quedará sin saber el contenido original del programa fuente, solo el resultado compilado.

Como se trata de un dispositivo Atmel, puede intentar utilizar la cadena de herramientas gcc específica de avr avr-gcc . Específicamente, necesitará avr-objdump usando la bandera de tipo MCU necesaria -m atmega328 (avr5) (Lista completa de arquitecturas disponibles, tipos MCU)

avr-objdump -s -m atmega328 program.hex> program.dump

También es posible, dependiendo de su configuración, que proporcionar el tipo de arquitectura en sí (avr5) sería suficiente:

avr-objdump -s -m avr5 program.hex> program.dump

Fuente: ¿Cómo puedo averiguar qué se quema en una ROM Arduino?

Suponiendo que tiene Arduino instalado en su sistema, use la utilidad avrdude que se encuentra en esta ruta C: \ Archivos de programa (x86) \ Arduino \ hardware \ tools \ avr \ bin

Estos comandos simples pueden extraer el archivo hexadecimal

establecer RUTA = C: \ Archivos de programa (x86) \ Arduino \ hardware \ tools \ avr \ bin
avrdude -patmega328p -carduino -PCOM25 -b115200 -D -Uflash: r: output.hex: i -C “C: \ Archivos de programa (x86) \ Arduino \ hardware \ tools \ avr \ etc \ avrdude.conf”

Reemplace COM25 para que coincida con su puerto COM utilizado por Arduino

Reemplace los archivos de programa (x86) con archivos de programa si el suyo es un sistema de 32 bits

El comando produce output.hex que no es más que el contenido del flash en formato Intel HEX

Puede recuperar el código hexadecimal. Hay varios cargadores disponibles para grabar código y recuperar código hexadecimal. UNO es uno de ellos. Es demasiado fácil Abra el software y encontrará la opción. En este momento no lo tengo, de lo contrario podría haberte enviado capturas de pantalla, pero puedes aprenderlo en YouTube, hay varios tutoriales en video disponibles.

Gracias por A2A,

Puede recuperar el código (archivo hexadecimal) solo si no hay un bit de bloqueo establecido. Para leer el archivo hexadecimal, necesita un programador como el programador USBASP y Avrdudes o cualquier otro programador universal.

Eso depende de qué tipo de código se queme en su placa Arduino

Si el código consta de las características mencionadas a continuación

  1. GPIO relacionado – Conecte cualquier LED
  2. Serail (código UART): monitor serie abierto o cualquier hiperterminal con una velocidad de transmisión adecuada según su código ya quemado

No puedes Como este boceto se realizó en cualquier IDE y cuando se compila su código, se escribe en un microcontrolador de la única manera que entiende … 1s y 0s, este código se llama lenguaje máquina. Es posible que pueda extraer este código con algunas herramientas, pero no podrá volver a convertirlo en un boceto.

Me encontré en esta misma situación hace uno o dos años, ya que había perdido el boceto en un arduino que estaba almacenado en el MCU. Mi solución fue revisar los archivos temporales de Windows buscando el boceto, ¡y lo encontré! Por supuesto, no en formato de boceto arduino, pero creo que era un archivo txt. Buena suerte si ese es el caso!

More Interesting

¿Qué sitio web es bueno para aprender sistemas integrados?

¿Cuáles son los fragmentos / trucos / hacks de código C incrustado absolutamente pequeños que debe conocer para un código de sistema incrustado?

¿Cuáles son los libros que necesito leer antes de leer la hoja de datos de los microcontroladores y programar el sistema integrado?

Estoy confundido acerca de si debo continuar con mi trabajo en el campo incrustado o ir al GRE. Como no puedo hacer ambas cosas al mismo tiempo, ¿qué debo hacer?

¿Cómo es el crecimiento profesional en sistemas embebidos para una nueva en Robert Bosch, Bangalore? También tengo un trabajo de software que paga más que Bosch, ¿alguna sugerencia?

¿Es Arduino una mala forma de aprender sistemas embebidos? Mis habilidades en C son buenas y quiero ser un ingeniero de software integrado profesional. Compré un kit Arduino y comencé a hacer proyectos, pero fue fácil. No estoy aprendiendo ¿Cuál debería ser el siguiente paso?

¿Qué significa el microcontrolador de 8,16,32 bits desde el punto de vista de un programador?

¿Cómo se relaciona el diseño electrónico y la tecnología con los sistemas integrados?

¿Cuál es el papel del desarrollador del controlador del dispositivo en los sistemas integrados?

¿Cuál es la diferencia entre sistema embebido y sistema informático?

¿Qué dispositivo debo usar? Arduino o RaspberryPi?

¿Cuál es tu vida diaria como ingeniero integrado?

Estoy trabajando en un enjambre industrial de robots, ¿se recomienda centrarse en el comando y control basado en el servidor, o centrarse en el control centrado en el robot?

¿Cuál es la diferencia entre un dispositivo que ejecuta Embedded Linux con arranque seguro y un dispositivo sin arranque seguro?

¿Cuál es la mejor manera de crear un sistema operativo de propósito único para un dispositivo integrado?