Puedo escribir programas para un Arduino, y todo lo que hago es enchufarlo y hacer clic en "subir". Mi código compilado entra en la memoria del programa de ATMega. Fácil, ¿verdad?
Bueno, me gustaría saber qué sucede exactamente en general. El microcontrolador tiene algo de memoria, por lo que existe algún método para tomar datos sin procesar de un cable USB y escribir en el microcontrolador como si fuera una unidad flash o algo así. Sin embargo, sé que esto no es posible a menos que un programa especial de cargador de arranque esté ya presente en el microcontrolador.
Así que ahora estoy confundido. ¿Cómo podría cargar programas en un Arduino si no tuviera el cargador de arranque? ¿Cómo programo otros microcontroladores (como un ARM) sin la interfaz fácil de usar de Arduino?
Pregunta relacionada con la bonificación: al leer (y no entender) algunas páginas web, he descubierto que ARM está programado a través de JTAG. ¿Qué está haciendo esto exactamente? El módulo JTAG envía datos al ARM, pero ¿exactamente qué datos envía? ¿Cómo puede el ARM aceptar un nuevo código sin que algún programa ya se esté ejecutando en el ARM que interpreta los datos de JTAG y los escribe en la memoria correcta?