¿Cómo se transfieren los datos a la memoria de los microcontroladores?

He estado trabajando con Arduino por un tiempo y ahora pensé en usar microcontroladores AVR en la placa de pruebas. Vi varios tutoriales sobre cómo transferir archivos .hex al microcontrolador AVR. Mostraron cómo usar el programador USB para transferir el archivo .hex pero si digo que quiero saber cómo hacer que funcione un programador USB, ¿cuál es la estructura de un programador USB? No encontré nada, ¿alguien puede darme una buena respuesta de cómo se transfiere el archivo .hex a la memoria de los microcontroladores, es decir, el segmento de código en la memoria?

Gracias,

Respuestas (1)

Hay dos formas de programar un dispositivo AVR.

El primero es a través de un programador externo que interactúa con hardware "oculto" en el chip. La forma más común de esto es ISP, descrito en AVR910 . Existen otros métodos, consulte la hoja de datos del dispositivo AVR correspondiente para obtener más detalles.

El otro es la autoprogramación, que implica la ejecución de código en el dispositivo AVR para aceptar los datos que se programarán a través de uno o más pines en el chip y luego usar códigos de operación especiales para escribir los datos en flash y EEPROM. Esto se describe en AVR109 .

Tenga en cuenta que la "programación por USB" es en realidad una autoprogramación donde el cargador de arranque abre una conexión en serie y el software de programación envía los datos a través de esta conexión en serie. Esto es cierto tanto en dispositivos con un chip de interfaz USB independiente, como Arduino Uno, como en dispositivos con soporte USB integrado, como Arduino Leonardo.

La autoprogramación actualiza un AVR que se ha programado previamente para admitir esta función (como Arduino); pero un chip AVR nuevo, nunca programado, requiere ISP (programación en el sistema), ¿correcto?
@MarkU: Depende de qué dispositivo esté hablando. Ciertamente, el ATmega328 viene de fábrica completamente en blanco, pero el ATmega32U4 viene preprogramado con un gestor de arranque basado en USB.