Tengo la necesidad de escribir un programa de cargador de arranque en un microcontrolador AVR (Atmega32) para habilitar la autoprogramación. He leído varios recursos sobre el tema de los cargadores de arranque y he llegado a la siguiente conclusión:
La primera dirección de flash tiene información almacenada sobre dónde está el inicio del programa del cargador de arranque. Por lo tanto, cuando se lee desde flash, la ejecución comenzará en 0x00 y saltará a donde se especifique en esa ubicación al cargador de arranque.
El programa del cargador de arranque debe entonces "escuchar" los datos entrantes en un pin. Si se encuentra información, quizás después de un marco de datos específico que consiste en un comando relacionado con una secuencia de reprogramación, el cargador de arranque comienza a guardar los datos entrantes en otra ubicación en flash. Después del final de la transmisión de datos, el cargador de arranque debe saltar a la dirección flash asociada con el primer byte de información durante la fase de reprogramación y comenzar la ejecución.
Tengo entendido que esta secuencia de eventos, escucha y reprogramación, ocurre en cada evento RESET. Si no se encuentra información entrante, entonces comienza la ejecución normal del código ya presente en flash (comenzando en la misma dirección en la que el cargador de arranque comenzaría a guardar).
Básicamente algo como esto:
Dado que conozco el proceso de este programa de cargador de arranque muy básico, ¿dónde puedo comenzar a aprender exactamente cómo escribir este programa específicamente para la arquitectura AVR? Si el tamaño es una preocupación, entiendo que estos programas pueden estar escritos en ASM. Teniendo en cuenta que no conozco suficiente ASM, por no hablar del conjunto de instrucciones para un controlador determinado, lo más probable es que escriba este programa en C.
¿Alguna sugerencia / recursos?
Gracias